15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/scoped_observer.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/error_console/error_console.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_install_prompt.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_install_ui.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/extension_management.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_uninstall_dialog.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/requirements_checker.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/webstore_install_result.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_observer.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui_message_handler.h" 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "extensions/browser/extension_prefs.h" 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/browser/extension_prefs_observer.h" 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h" 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/warning_service.h" 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionService; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebUIDataSource; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace extensions { 49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class Extension; 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ExtensionRegistry; 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class ManagementPolicy; 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Information about a page running in an extension, for example a popup bubble, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a background page, or a tab contents. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ExtensionPage { 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ExtensionPage(const GURL& url, 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int render_process_id, 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int render_view_id, 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool incognito, 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool generated_background_page); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_process_id; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito; 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool generated_background_page; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extension Settings UI handler. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionSettingsHandler 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public content::WebUIMessageHandler, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::WebContentsObserver, 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public ErrorConsole::Observer, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public ExtensionInstallPrompt::Delegate, 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public ExtensionManagement::Observer, 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public ExtensionPrefsObserver, 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public ExtensionRegistryObserver, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ExtensionUninstallDialog::Delegate, 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public WarningService::Observer, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public base::SupportsWeakPtr<ExtensionSettingsHandler> { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSettingsHandler(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionSettingsHandler(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension Detail JSON Struct for page. |pages| is injected for unit 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing. 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: |warning_service| can be NULL in unit tests. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* CreateExtensionDetailValue( 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const Extension* extension, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<ExtensionPage>& pages, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WarningService* warning_service); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetLocalizedValues(content::WebUIDataSource* source); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend class ExtensionUITest; 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) friend class BrokerDelegate; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content::WebContentsObserver implementation. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RenderViewDeleted( 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderViewHost* render_view_host) OVERRIDE; 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DidStartNavigationToPendingEntry( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NavigationController::ReloadType reload_type) OVERRIDE; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows injection for testing by friend classes. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSettingsHandler(ExtensionService* service, 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ManagementPolicy* policy); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebUIMessageHandler implementation. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterMessages() OVERRIDE; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // ErrorConsole::Observer implementation. 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnErrorAdded(const ExtensionError* error) OVERRIDE; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver implementation. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // ExtensionRegistryObserver implementation. 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnExtensionLoaded(content::BrowserContext* browser_context, 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension) OVERRIDE; 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnExtensionUnloaded( 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::BrowserContext* browser_context, 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Extension* extension, 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UnloadedExtensionInfo::Reason reason) OVERRIDE; 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void OnExtensionUninstalled( 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* browser_context, 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const Extension* extension, 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::UninstallReason reason) OVERRIDE; 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 135e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // ExtensionPrefsObserver implementation. 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void OnExtensionDisableReasonsChanged(const std::string& extension_id, 137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int disable_reasons) OVERRIDE; 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ExtensionManagement::Observer implementation. 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnExtensionManagementSettingsChanged() OVERRIDE; 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionUninstallDialog::Delegate implementation, used for receiving 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notification about uninstall confirmation dialog selections. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExtensionUninstallAccepted() OVERRIDE; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExtensionUninstallCanceled() OVERRIDE; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // WarningService::Observer implementation. 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ExtensionWarningsChanged() OVERRIDE; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExtensionInstallPrompt::Delegate implementation. 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InstallUIProceed() OVERRIDE; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void InstallUIAbort(bool user_initiated) OVERRIDE; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper method that reloads all unpacked extensions. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReloadUnpackedExtensions(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "requestExtensionsData" message. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleRequestExtensionsData(const base::ListValue* args); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "toggleDeveloperMode" message. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleToggleDeveloperMode(const base::ListValue* args); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "inspect" message. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleInspectMessage(const base::ListValue* args); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Callback for "launch" message. 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void HandleLaunchMessage(const base::ListValue* args); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "reload" message. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleReloadMessage(const base::ListValue* args); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Callback for "repair" message. 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void HandleRepairMessage(const base::ListValue* args); 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "enable" message. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleEnableMessage(const base::ListValue* args); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "enableIncognito" message. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleEnableIncognitoMessage(const base::ListValue* args); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Callback for "enableErrorCollection" message. 1820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void HandleEnableErrorCollectionMessage(const base::ListValue* args); 1830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "allowFileAcces" message. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleAllowFileAccessMessage(const base::ListValue* args); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Callback for "allowOnAllUrls" message. 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void HandleAllowOnAllUrlsMessage(const base::ListValue* args); 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "uninstall" message. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleUninstallMessage(const base::ListValue* args); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "options" message. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleOptionsMessage(const base::ListValue* args); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Callback for "permissions" message. 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void HandlePermissionsMessage(const base::ListValue* args); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "showButton" message. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleShowButtonMessage(const base::ListValue* args); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for "autoupdate" message. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleAutoUpdateMessage(const base::ListValue* args); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Callback for the "dismissADTPromo" message. 2065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void HandleDismissADTPromoMessage(const base::ListValue* args); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Callback for the "showPath" message. 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void HandleShowPath(const base::ListValue* args); 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Utility for calling JavaScript window.alert in the page. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowAlert(const std::string& message); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Utility for callbacks that get an extension ID as the sole argument. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns NULL if the extension isn't active. 216a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const Extension* GetActiveExtension(const base::ListValue* args); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forces a UI update if appropriate after a notification is received. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MaybeUpdateAfterNotification(); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register for notifications that we need to reload the page. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MaybeRegisterForNotifications(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper that lists the current inspectable html pages for an extension. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<ExtensionPage> GetInspectablePagesForExtension( 226a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const Extension* extension, bool extension_is_enabled); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetInspectablePagesForExtensionProcess( 228424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Extension* extension, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<content::RenderViewHost*>& views, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<ExtensionPage>* result); 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void GetAppWindowPagesForExtensionProfile(const Extension* extension, 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile, 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<ExtensionPage>* result); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ExtensionUninstallDialog object for this class, creating it if 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // needed. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionUninstallDialog* GetExtensionUninstallDialog(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Called when the reinstallation is complete. 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnReinstallComplete(bool success, 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& error, 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webstore_install::Result result); 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callback for RequirementsChecker. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRequirementsChecked(std::string extension_id, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> requirement_errors); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Handles the load retry notification sent from 249effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ExtensionService::ReportExtensionLoadError. Attempts to retry loading 250effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // extension from |path| if retry is true, otherwise removes |path| from the 251effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // vector of currently loading extensions. 252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Does nothing if |path| is not a currently loading extension this object is 254effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // tracking. 255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void HandleLoadRetryMessage(bool retry, const base::FilePath& path); 256effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Our model. Outlives us since it's owned by our containing profile. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* extension_service_; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A convenience member, filled once the extension_service_ is known. 261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ManagementPolicy* management_policy_; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to show confirmation UI for uninstalling extensions in incognito mode. 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The id of the extension we are prompting the user about. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extension_id_prompting_; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true, we will ignore notifications in ::Observe(). This is needed 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to prevent reloading the page when we were the cause of the 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notification. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ignore_notifications_; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The page may be refreshed in response to a RenderViewHost being destroyed, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but the iteration over RenderViewHosts will include the host because the 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notification is sent when it is in the process of being deleted (and before 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it is removed from the process). Keep a pointer to it so we can exclude 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it from the active views. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* deleting_rvh_; 2800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Do the same for a deleting RenderWidgetHost ID and RenderProcessHost ID. 2810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) int deleting_rwh_id_; 2820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) int deleting_rph_id_; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We want to register for notifications only after we've responded at least 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // once to the page, otherwise we'd be calling JavaScript functions on objects 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that don't exist yet when notifications come in. This variable makes sure 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we do so only once. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool registered_for_notifications_; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will not be empty when a requirements check is in progress. Doing 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // another Check() before the previous one is complete will cause the first 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one to abort. 295a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_ptr<RequirementsChecker> requirements_checker_; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The UI for showing what permissions the extension has. 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionInstallPrompt> prompt_; 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedObserver<WarningService, WarningService::Observer> 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service_observer_; 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 30358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // An observer to listen for when Extension errors are reported. 30458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedObserver<ErrorConsole, ErrorConsole::Observer> error_console_observer_; 30558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 306effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // An observer to listen for notable changes in the ExtensionPrefs, like 307effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // a change in Disable Reasons. 308e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ScopedObserver<ExtensionPrefs, ExtensionPrefsObserver> 309effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch extension_prefs_observer_; 310effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) extension_registry_observer_; 313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedObserver<ExtensionManagement, ExtensionManagement::Observer> 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_management_observer_; 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Whether we found any DISABLE_NOT_VERIFIED extensions and want to kick off 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // a verification check to try and rescue them. 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool should_do_verification_check_; 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsHandler); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 324a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace extensions 325a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_EXTENSIONS_EXTENSION_SETTINGS_HANDLER_H_ 327