| Index: chrome/browser/ui/webui/options2/extension_settings_handler.h
|
| diff --git a/chrome/browser/ui/webui/options2/extension_settings_handler.h b/chrome/browser/ui/webui/options2/extension_settings_handler.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9ac9713d6f71f1c7673c03d049c0ce38f9e3c80f
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/webui/options2/extension_settings_handler.h
|
| @@ -0,0 +1,200 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS2_EXTENSION_SETTINGS_HANDLER_H_
|
| +#define CHROME_BROWSER_UI_WEBUI_OPTIONS2_EXTENSION_SETTINGS_HANDLER_H_
|
| +#pragma once
|
| +
|
| +#include <set>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "chrome/browser/extensions/extension_install_ui.h"
|
| +#include "chrome/browser/extensions/extension_uninstall_dialog.h"
|
| +#include "chrome/browser/extensions/extension_warning_set.h"
|
| +#include "chrome/browser/ui/select_file_dialog.h"
|
| +#include "chrome/browser/ui/webui/options2/options_ui2.h"
|
| +#include "chrome/browser/ui/webui/chrome_web_ui.h"
|
| +#include "chrome/common/extensions/extension_resource.h"
|
| +#include "content/public/browser/notification_observer.h"
|
| +#include "content/public/browser/notification_registrar.h"
|
| +#include "googleurl/src/gurl.h"
|
| +
|
| +class Extension;
|
| +class ExtensionService;
|
| +class FilePath;
|
| +class PrefService;
|
| +class UserScript;
|
| +
|
| +namespace base {
|
| +class DictionaryValue;
|
| +class ListValue;
|
| +}
|
| +
|
| +// Information about a page running in an extension, for example a popup bubble,
|
| +// a background page, or a tab contents.
|
| +struct ExtensionPage {
|
| + ExtensionPage(const GURL& url, int render_process_id, int render_view_id,
|
| + bool incognito)
|
| + : url(url),
|
| + render_process_id(render_process_id),
|
| + render_view_id(render_view_id),
|
| + incognito(incognito) {}
|
| + GURL url;
|
| + int render_process_id;
|
| + int render_view_id;
|
| + bool incognito;
|
| +};
|
| +
|
| +// Extension Settings UI handler.
|
| +class ExtensionSettingsHandler : public OptionsPage2UIHandler,
|
| + public SelectFileDialog::Listener,
|
| + public ExtensionUninstallDialog::Delegate {
|
| + public:
|
| + ExtensionSettingsHandler();
|
| + virtual ~ExtensionSettingsHandler();
|
| +
|
| + static void RegisterUserPrefs(PrefService* prefs);
|
| +
|
| + // Extension Detail JSON Struct for page. (static for ease of testing).
|
| + // Note: |service| and |warnings| can be NULL in unit tests.
|
| + static base::DictionaryValue* CreateExtensionDetailValue(
|
| + ExtensionService* service,
|
| + const Extension* extension,
|
| + const std::vector<ExtensionPage>& pages,
|
| + const ExtensionWarningSet* warnings,
|
| + bool enabled,
|
| + bool terminated);
|
| +
|
| + // ContentScript JSON Struct for page. (static for ease of testing).
|
| + static base::DictionaryValue* CreateContentScriptDetailValue(
|
| + const UserScript& script,
|
| + const FilePath& extension_path);
|
| +
|
| + // Callback for "requestExtensionsData" message.
|
| + void HandleRequestExtensionsData(const base::ListValue* args);
|
| +
|
| + // Callback for "toggleDeveloperMode" message.
|
| + void HandleToggleDeveloperMode(const base::ListValue* args);
|
| +
|
| + // Callback for "inspect" message.
|
| + void HandleInspectMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "reload" message.
|
| + void HandleReloadMessage(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 "allowFileAcces" message.
|
| + void HandleAllowFileAccessMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "uninstall" message.
|
| + void HandleUninstallMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "options" message.
|
| + void HandleOptionsMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "showButton" message.
|
| + void HandleShowButtonMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "load" message.
|
| + void HandleLoadMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "pack" message.
|
| + void HandlePackMessage(const base::ListValue* args);
|
| +
|
| + // Callback for "autoupdate" message.
|
| + void HandleAutoUpdateMessage(const base::ListValue* args);
|
| +
|
| + // Utility for calling javascript window.alert in the page.
|
| + void ShowAlert(const std::string& message);
|
| +
|
| + // Callback for "selectFilePath" message.
|
| + void HandleSelectFilePathMessage(const base::ListValue* args);
|
| +
|
| + // Utility for callbacks that get an extension ID as the sole argument.
|
| + const Extension* GetExtension(const base::ListValue* args);
|
| +
|
| + // Forces a UI update if appropriate after a notification is received.
|
| + void MaybeUpdateAfterNotification();
|
| +
|
| + // Register for notifications that we need to reload the page.
|
| + void MaybeRegisterForNotifications();
|
| +
|
| + // SelectFileDialog::Listener
|
| + virtual void FileSelected(const FilePath& path,
|
| + int index, void* params) OVERRIDE;
|
| + virtual void MultiFilesSelected(
|
| + const std::vector<FilePath>& files, void* params) OVERRIDE;
|
| + virtual void FileSelectionCanceled(void* params) OVERRIDE {}
|
| +
|
| + // WebUIMessageHandler implementation.
|
| + virtual void RegisterMessages() OVERRIDE;
|
| + virtual WebUIMessageHandler* Attach(WebUI* web_ui) OVERRIDE;
|
| +
|
| + // OptionsUIHandler implementation.
|
| + virtual void GetLocalizedValues(
|
| + base::DictionaryValue* localized_strings) OVERRIDE;
|
| + virtual void Initialize() OVERRIDE;
|
| +
|
| + // content::NotificationObserver implementation.
|
| + virtual void Observe(int type,
|
| + const content::NotificationSource& source,
|
| + const content::NotificationDetails& details) OVERRIDE;
|
| +
|
| + // ExtensionUninstallDialog::Delegate implementation, used for receiving
|
| + // notification about uninstall confirmation dialog selections.
|
| + virtual void ExtensionUninstallAccepted() OVERRIDE;
|
| + virtual void ExtensionUninstallCanceled() OVERRIDE;
|
| +
|
| + private:
|
| + // Helper that lists the current active html pages for an extension.
|
| + std::vector<ExtensionPage> GetActivePagesForExtension(
|
| + const Extension* extension);
|
| + void GetActivePagesForExtensionProcess(
|
| + const std::set<RenderViewHost*>& views,
|
| + std::vector<ExtensionPage> *result);
|
| +
|
| + // Returns the ExtensionUninstallDialog object for this class, creating it if
|
| + // needed.
|
| + ExtensionUninstallDialog* GetExtensionUninstallDialog();
|
| +
|
| + // Our model. Outlives us since it's owned by our containing profile.
|
| + ExtensionService* extension_service_;
|
| +
|
| + // Used to pick the directory when loading an extension.
|
| + scoped_refptr<SelectFileDialog> load_extension_dialog_;
|
| +
|
| + // Used to show confirmation UI for uninstalling extensions in incognito mode.
|
| + scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
|
| +
|
| + // The id of the extension we are prompting the user about.
|
| + std::string extension_id_prompting_;
|
| +
|
| + // If true, we will ignore notifications in ::Observe(). This is needed
|
| + // to prevent reloading the page when we were the cause of the
|
| + // notification.
|
| + bool ignore_notifications_;
|
| +
|
| + // The page may be refreshed in response to a RENDER_VIEW_HOST_DELETED,
|
| + // but the iteration over RenderViewHosts will include the host because the
|
| + // notification is sent when it is in the process of being deleted (and before
|
| + // it is removed from the process). Keep a pointer to it so we can exclude
|
| + // it from the active views.
|
| + RenderViewHost* deleting_rvh_;
|
| +
|
| + // We want to register for notifications only after we've responded at least
|
| + // once to the page, otherwise we'd be calling javacsript functions on objects
|
| + // that don't exist yet when notifications come in. This variable makes sure
|
| + // we do so only once.
|
| + bool registered_for_notifications_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsHandler);
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_UI_WEBUI_OPTIONS2_EXTENSION_SETTINGS_HANDLER_H_
|
|
|