- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / extension_web_ui.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_
7
8 #include <string>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "chrome/browser/favicon/favicon_service.h"
12 #include "chrome/common/extensions/manifest_url_handler.h"
13 #include "content/public/browser/web_ui_controller.h"
14
15 class Profile;
16
17 namespace content {
18 class BrowserContext;
19 class WebContents;
20 }
21
22 namespace extensions {
23 class BookmarkManagerPrivateEventRouter;
24 }
25
26 namespace user_prefs {
27 class PrefRegistrySyncable;
28 }
29
30 // This class implements WebUI for extensions and allows extensions to put UI in
31 // 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.
34 class ExtensionWebUI : public content::WebUIController {
35  public:
36   static const char kExtensionURLOverrides[];
37
38   ExtensionWebUI(content::WebUI* web_ui, const GURL& url);
39
40   virtual ~ExtensionWebUI();
41
42   virtual extensions::BookmarkManagerPrivateEventRouter*
43       bookmark_manager_private_event_router();
44
45   // BrowserURLHandler
46   static bool HandleChromeURLOverride(GURL* url,
47                                       content::BrowserContext* browser_context);
48   static bool HandleChromeURLOverrideReverse(
49       GURL* url, content::BrowserContext* browser_context);
50
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,
55       const extensions::URLOverrides::URLOverrideMap& overrides);
56   static void UnregisterChromeURLOverrides(Profile* profile,
57       const extensions::URLOverrides::URLOverrideMap& overrides);
58   static void UnregisterChromeURLOverride(const std::string& page,
59                                           Profile* profile,
60                                           const base::Value* override);
61
62   // Called from BrowserPrefs
63   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
64
65   // Get the favicon for the extension by getting an icon from the manifest.
66   // Note. |callback| is always run asynchronously.
67   static void GetFaviconForURL(
68       Profile* profile,
69       const GURL& page_url,
70       const FaviconService::FaviconResultsCallback& callback);
71
72  private:
73   // 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,
77                                            base::ListValue* list,
78                                            const base::Value* override);
79
80   // TODO(aa): This seems out of place. Why is it not with the event routers for
81   // the other extension APIs?
82   scoped_ptr<extensions::BookmarkManagerPrivateEventRouter>
83       bookmark_manager_private_event_router_;
84
85   // The URL this WebUI was created for.
86   GURL url_;
87 };
88
89 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_WEB_UI_H_