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/common/extensions/manifest_url_handler.h" 12#include "components/favicon_base/favicon_callback.h" 13#include "content/public/browser/web_ui_controller.h" 14 15class Profile; 16 17namespace content { 18class BrowserContext; 19class WebContents; 20} 21 22namespace extensions { 23class BookmarkManagerPrivateDragEventRouter; 24} 25 26namespace user_prefs { 27class 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. 34class 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::BookmarkManagerPrivateDragEventRouter* 43 bookmark_manager_private_drag_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 favicon_base::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::BookmarkManagerPrivateDragEventRouter> 83 bookmark_manager_private_drag_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_ 90