#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;
namespace extensions {
class Extension;
+class ExtensionRegistry;
class ManagementPolicy;
// Information about a page running in an extension, for example a popup bubble,
: 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);
base::DictionaryValue* CreateExtensionDetailValue(
const Extension* extension,
const std::vector<ExtensionPage>& pages,
- const ExtensionWarningService* warning_service);
+ const WarningService* warning_service);
void GetLocalizedValues(content::WebUIDataSource* source);
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();
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);
// 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);
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_;
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.
// 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);
};