Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / webui / extensions / extension_settings_handler.h
index ff7ecac..779a484 100644 (file)
 #include <vector>
 
 #include "base/memory/scoped_ptr.h"
-#include "base/prefs/pref_change_registrar.h"
 #include "base/scoped_observer.h"
 #include "chrome/browser/extensions/error_console/error_console.h"
 #include "chrome/browser/extensions/extension_install_prompt.h"
-#include "chrome/browser/extensions/extension_install_ui.h"
+#include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
-#include "chrome/browser/extensions/extension_warning_service.h"
 #include "chrome/browser/extensions/requirements_checker.h"
+#include "chrome/common/extensions/webstore_install_result.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_ui_message_handler.h"
-#include "ui/shell_dialogs/select_file_dialog.h"
+#include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_prefs_observer.h"
+#include "extensions/browser/extension_registry_observer.h"
+#include "extensions/browser/warning_service.h"
 #include "url/gurl.h"
 
 class ExtensionService;
@@ -44,6 +46,7 @@ class PrefRegistrySyncable;
 
 namespace extensions {
 class Extension;
+class ExtensionRegistry;
 class ManagementPolicy;
 
 // Information about a page running in an extension, for example a popup bubble,
@@ -66,15 +69,17 @@ class ExtensionSettingsHandler
     : public content::WebUIMessageHandler,
       public content::NotificationObserver,
       public content::WebContentsObserver,
-      public ui::SelectFileDialog::Listener,
       public ErrorConsole::Observer,
       public ExtensionInstallPrompt::Delegate,
+      public ExtensionManagement::Observer,
+      public ExtensionPrefsObserver,
+      public ExtensionRegistryObserver,
       public ExtensionUninstallDialog::Delegate,
-      public ExtensionWarningService::Observer,
+      public WarningService::Observer,
       public base::SupportsWeakPtr<ExtensionSettingsHandler> {
  public:
   ExtensionSettingsHandler();
-  virtual ~ExtensionSettingsHandler();
+  ~ExtensionSettingsHandler() override;
 
   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
 
@@ -84,7 +89,7 @@ class ExtensionSettingsHandler
   base::DictionaryValue* CreateExtensionDetailValue(
       const Extension* extension,
       const std::vector<ExtensionPage>& pages,
-      const ExtensionWarningService* warning_service);
+      const WarningService* warning_service);
 
   void GetLocalizedValues(content::WebUIDataSource* source);
 
@@ -93,46 +98,57 @@ class ExtensionSettingsHandler
   friend class BrokerDelegate;
 
   // content::WebContentsObserver implementation.
-  virtual void RenderViewDeleted(
-      content::RenderViewHost* render_view_host) OVERRIDE;
-  virtual void NavigateToPendingEntry(
+  void RenderViewDeleted(content::RenderViewHost* render_view_host) override;
+  void DidStartNavigationToPendingEntry(
       const GURL& url,
-      content::NavigationController::ReloadType reload_type) OVERRIDE;
+      content::NavigationController::ReloadType reload_type) override;
 
   // Allows injection for testing by friend classes.
   ExtensionSettingsHandler(ExtensionService* service,
                            ManagementPolicy* policy);
 
   // WebUIMessageHandler implementation.
-  virtual void RegisterMessages() OVERRIDE;
-
-  // SelectFileDialog::Listener implementation.
-  virtual void FileSelected(const base::FilePath& path,
-                            int index,
-                            void* params) OVERRIDE;
-  virtual void MultiFilesSelected(
-      const std::vector<base::FilePath>& files, void* params) OVERRIDE;
-  virtual void FileSelectionCanceled(void* params) OVERRIDE;
+  void RegisterMessages() override;
 
   // ErrorConsole::Observer implementation.
-  virtual void OnErrorAdded(const ExtensionError* error) OVERRIDE;
+  void OnErrorAdded(const ExtensionError* error) override;
 
   // content::NotificationObserver implementation.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
+  void Observe(int type,
+               const content::NotificationSource& source,
+               const content::NotificationDetails& details) override;
+
+  // ExtensionRegistryObserver implementation.
+  void OnExtensionLoaded(content::BrowserContext* browser_context,
+                         const Extension* extension) override;
+  void OnExtensionUnloaded(content::BrowserContext* browser_context,
+                           const Extension* extension,
+                           UnloadedExtensionInfo::Reason reason) override;
+  void OnExtensionUninstalled(content::BrowserContext* browser_context,
+                              const Extension* extension,
+                              extensions::UninstallReason reason) override;
+
+  // ExtensionPrefsObserver implementation.
+  void OnExtensionDisableReasonsChanged(const std::string& extension_id,
+                                        int disable_reasons) override;
+
+  // ExtensionManagement::Observer implementation.
+  void OnExtensionManagementSettingsChanged() override;
 
   // ExtensionUninstallDialog::Delegate implementation, used for receiving
   // notification about uninstall confirmation dialog selections.
-  virtual void ExtensionUninstallAccepted() OVERRIDE;
-  virtual void ExtensionUninstallCanceled() OVERRIDE;
+  void ExtensionUninstallAccepted() override;
+  void ExtensionUninstallCanceled() override;
 
-  // ExtensionWarningService::Observer implementation.
-  virtual void ExtensionWarningsChanged() OVERRIDE;
+  // WarningService::Observer implementation.
+  void ExtensionWarningsChanged() override;
 
   // ExtensionInstallPrompt::Delegate implementation.
-  virtual void InstallUIProceed() OVERRIDE;
-  virtual void InstallUIAbort(bool user_initiated) OVERRIDE;
+  void InstallUIProceed() override;
+  void InstallUIAbort(bool user_initiated) override;
+
+  // Called after the App Info Dialog has closed.
+  virtual void AppInfoDialogClosed();
 
   // Helper method that reloads all unpacked extensions.
   void ReloadUnpackedExtensions();
@@ -147,20 +163,29 @@ class ExtensionSettingsHandler
   void HandleInspectMessage(const base::ListValue* args);
 
   // Callback for "launch" message.
-  void HandleLaunchMessage(const ListValue* args);
+  void HandleLaunchMessage(const base::ListValue* args);
 
   // Callback for "reload" message.
   void HandleReloadMessage(const base::ListValue* args);
 
+  // Callback for "repair" message.
+  void HandleRepairMessage(const base::ListValue* args);
+
   // Callback for "enable" message.
   void HandleEnableMessage(const base::ListValue* args);
 
   // Callback for "enableIncognito" message.
   void HandleEnableIncognitoMessage(const base::ListValue* args);
 
+  // Callback for "enableErrorCollection" message.
+  void HandleEnableErrorCollectionMessage(const base::ListValue* args);
+
   // Callback for "allowFileAcces" message.
   void HandleAllowFileAccessMessage(const base::ListValue* args);
 
+  // Callback for "allowOnAllUrls" message.
+  void HandleAllowOnAllUrlsMessage(const base::ListValue* args);
+
   // Callback for "uninstall" message.
   void HandleUninstallMessage(const base::ListValue* args);
 
@@ -176,8 +201,11 @@ class ExtensionSettingsHandler
   // Callback for "autoupdate" message.
   void HandleAutoUpdateMessage(const base::ListValue* args);
 
-  // Callback for "loadUnpackedExtension" message.
-  void HandleLoadUnpackedExtensionMessage(const base::ListValue* args);
+  // Callback for the "dismissADTPromo" message.
+  void HandleDismissADTPromoMessage(const base::ListValue* args);
+
+  // Callback for the "showPath" message.
+  void HandleShowPath(const base::ListValue* args);
 
   // Utility for calling JavaScript window.alert in the page.
   void ShowAlert(const std::string& message);
@@ -199,32 +227,38 @@ class ExtensionSettingsHandler
       const Extension* extension,
       const std::set<content::RenderViewHost*>& views,
       std::vector<ExtensionPage>* result);
-  void GetShellWindowPagesForExtensionProfile(
-      const Extension* extension,
-      Profile* profile,
-      std::vector<ExtensionPage>* result);
+  void GetAppWindowPagesForExtensionProfile(const Extension* extension,
+                                            Profile* profile,
+                                            std::vector<ExtensionPage>* result);
 
   // Returns the ExtensionUninstallDialog object for this class, creating it if
   // needed.
   ExtensionUninstallDialog* GetExtensionUninstallDialog();
 
+  // Called when the reinstallation is complete.
+  void OnReinstallComplete(bool success,
+                           const std::string& error,
+                           webstore_install::Result result);
+
   // Callback for RequirementsChecker.
   void OnRequirementsChecked(std::string extension_id,
                              std::vector<std::string> requirement_errors);
 
+  // Handles the load retry notification sent from
+  // ExtensionService::ReportExtensionLoadError. Attempts to retry loading
+  // extension from |path| if retry is true, otherwise removes |path| from the
+  // vector of currently loading extensions.
+  //
+  // Does nothing if |path| is not a currently loading extension this object is
+  // tracking.
+  void HandleLoadRetryMessage(bool retry, const base::FilePath& path);
+
   // Our model.  Outlives us since it's owned by our containing profile.
   ExtensionService* extension_service_;
 
   // A convenience member, filled once the extension_service_ is known.
   ManagementPolicy* management_policy_;
 
-  // Used to pick the directory when loading an extension.
-  scoped_refptr<ui::SelectFileDialog> load_extension_dialog_;
-
-  // Used to start the |load_extension_dialog_| in the last directory that was
-  // loaded.
-  base::FilePath last_unpacked_directory_;
-
   // Used to show confirmation UI for uninstalling extensions in incognito mode.
   scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
 
@@ -254,8 +288,6 @@ class ExtensionSettingsHandler
 
   content::NotificationRegistrar registrar_;
 
-  PrefChangeRegistrar pref_registrar_;
-
   // This will not be empty when a requirements check is in progress. Doing
   // another Check() before the previous one is complete will cause the first
   // one to abort.
@@ -264,12 +296,27 @@ class ExtensionSettingsHandler
   // The UI for showing what permissions the extension has.
   scoped_ptr<ExtensionInstallPrompt> prompt_;
 
-  ScopedObserver<ExtensionWarningService, ExtensionWarningService::Observer>
+  ScopedObserver<WarningService, WarningService::Observer>
       warning_service_observer_;
 
   // An observer to listen for when Extension errors are reported.
   ScopedObserver<ErrorConsole, ErrorConsole::Observer> error_console_observer_;
 
+  // An observer to listen for notable changes in the ExtensionPrefs, like
+  // a change in Disable Reasons.
+  ScopedObserver<ExtensionPrefs, ExtensionPrefsObserver>
+      extension_prefs_observer_;
+
+  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
+      extension_registry_observer_;
+
+  ScopedObserver<ExtensionManagement, ExtensionManagement::Observer>
+      extension_management_observer_;
+
+  // Whether we found any DISABLE_NOT_VERIFIED extensions and want to kick off
+  // a verification check to try and rescue them.
+  bool should_do_verification_check_;
+
   DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsHandler);
 };