blob: 0153f69c09e6a9e20f2a76f29262afb52616e7ed [file] [log] [blame]
[email protected]44e329a2012-07-14 01:13:061// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]ea0f18b2009-07-27 22:16:112// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]8f9d4eb2011-02-05 01:39:105#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_
[email protected]811bfe372009-07-01 08:46:257
[email protected]b27257562009-11-16 23:28:268#include <string>
9
[email protected]3b63f8f42011-03-28 01:54:1510#include "base/memory/scoped_ptr.h"
[email protected]ee2ed42c2011-04-28 22:19:1411#include "chrome/browser/favicon/favicon_service.h"
[email protected]636ee43282013-01-12 15:58:0012#include "chrome/common/extensions/manifest_url_handler.h"
[email protected]e14c959122012-01-13 16:58:2513#include "content/public/browser/web_ui_controller.h"
[email protected]811bfe372009-07-01 08:46:2514
[email protected]443e9312013-05-06 06:17:3415class Profile;
16
[email protected]44e329a2012-07-14 01:13:0617namespace content {
[email protected]70482642012-12-19 22:25:2418class BrowserContext;
[email protected]44e329a2012-07-14 01:13:0619class WebContents;
20}
21
[email protected]70482642012-12-19 22:25:2422namespace extensions {
23class BookmarkManagerPrivateEventRouter;
24}
25
[email protected]443e9312013-05-06 06:17:3426namespace user_prefs {
[email protected]c753f142013-02-10 13:14:0427class PrefRegistrySyncable;
[email protected]443e9312013-05-06 06:17:3428}
[email protected]86c008e82009-08-28 20:26:0529
[email protected]d21cdb12011-02-10 01:22:3230// This class implements WebUI for extensions and allows extensions to put UI in
[email protected]bad77bf2010-08-21 21:21:2231// the main tab contents area. For example, each extension can specify an
32// "options_page", and that page is displayed in the tab contents area and is
33// hosted by this class.
[email protected]c63cedf22012-01-17 18:42:2234class ExtensionWebUI : public content::WebUIController {
[email protected]811bfe372009-07-01 08:46:2535 public:
[email protected]e2194742010-08-12 05:54:3436 static const char kExtensionURLOverrides[];
[email protected]c5b8ab42010-04-14 22:06:5037
[email protected]01ec4ec2012-01-18 04:13:4738 ExtensionWebUI(content::WebUI* web_ui, const GURL& url);
[email protected]86c008e82009-08-28 20:26:0539
[email protected]8f9d4eb2011-02-05 01:39:1040 virtual ~ExtensionWebUI();
[email protected]8e383412010-10-19 16:57:0341
[email protected]70482642012-12-19 22:25:2442 virtual extensions::BookmarkManagerPrivateEventRouter*
43 bookmark_manager_private_event_router();
[email protected]ced90ae12010-02-20 02:06:1644
[email protected]86c008e82009-08-28 20:26:0545 // BrowserURLHandler
[email protected]3d7474ff2011-07-27 17:47:3746 static bool HandleChromeURLOverride(GURL* url,
47 content::BrowserContext* browser_context);
48 static bool HandleChromeURLOverrideReverse(
49 GURL* url, content::BrowserContext* browser_context);
[email protected]86c008e82009-08-28 20:26:0550
51 // Register and unregister a dictionary of one or more overrides.
52 // Page names are the keys, and chrome-extension: URLs are the values.
53 // (e.g. { "newtab": "chrome-extension://<id>/my_new_tab.html" }
54 static void RegisterChromeURLOverrides(Profile* profile,
[email protected]636ee43282013-01-12 15:58:0055 const extensions::URLOverrides::URLOverrideMap& overrides);
[email protected]86c008e82009-08-28 20:26:0556 static void UnregisterChromeURLOverrides(Profile* profile,
[email protected]636ee43282013-01-12 15:58:0057 const extensions::URLOverrides::URLOverrideMap& overrides);
[email protected]86c008e82009-08-28 20:26:0558 static void UnregisterChromeURLOverride(const std::string& page,
59 Profile* profile,
[email protected]5d30f92bf2012-08-03 08:43:3760 const base::Value* override);
[email protected]86c008e82009-08-28 20:26:0561
62 // Called from BrowserPrefs
[email protected]37ca3fe02013-07-05 15:32:4463 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
[email protected]86c008e82009-08-28 20:26:0564
[email protected]4b91f1f2010-07-14 20:01:0465 // Get the favicon for the extension by getting an icon from the manifest.
[email protected]0ea3db52012-12-07 01:32:0166 // Note. |callback| is always run asynchronously.
67 static void GetFaviconForURL(
68 Profile* profile,
69 const GURL& page_url,
[email protected]a55e85b2012-12-12 02:31:5870 const FaviconService::FaviconResultsCallback& callback);
[email protected]591948962010-03-12 19:37:5271
[email protected]811bfe372009-07-01 08:46:2572 private:
[email protected]86c008e82009-08-28 20:26:0573 // Unregister the specified override, and if it's the currently active one,
74 // ensure that something takes its place.
75 static void UnregisterAndReplaceOverride(const std::string& page,
76 Profile* profile,
[email protected]f3a1c642011-07-12 19:15:0377 base::ListValue* list,
[email protected]5d30f92bf2012-08-03 08:43:3778 const base::Value* override);
[email protected]86c008e82009-08-28 20:26:0579
[email protected]bad77bf2010-08-21 21:21:2280 // TODO(aa): This seems out of place. Why is it not with the event routers for
81 // the other extension APIs?
[email protected]70482642012-12-19 22:25:2482 scoped_ptr<extensions::BookmarkManagerPrivateEventRouter>
83 bookmark_manager_private_event_router_;
[email protected]3efe14a62010-10-25 22:18:3884
[email protected]d21cdb12011-02-10 01:22:3285 // The URL this WebUI was created for.
[email protected]3efe14a62010-10-25 22:18:3886 GURL url_;
[email protected]811bfe372009-07-01 08:46:2587};
88
[email protected]8f9d4eb2011-02-05 01:39:1089#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_