| Index: chrome/browser/extensions/active_script_controller.h
|
| diff --git a/chrome/browser/extensions/active_script_controller.h b/chrome/browser/extensions/active_script_controller.h
|
| index f7b20888b0338840c819e3b0d76dddfa721894c4..b6f0ffebc9305824e21d61080ad25faed835a77e 100644
|
| --- a/chrome/browser/extensions/active_script_controller.h
|
| +++ b/chrome/browser/extensions/active_script_controller.h
|
| @@ -13,8 +13,10 @@
|
| #include "base/callback.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/memory/linked_ptr.h"
|
| +#include "base/scoped_observer.h"
|
| #include "chrome/browser/extensions/location_bar_controller.h"
|
| #include "content/public/browser/web_contents_observer.h"
|
| +#include "extensions/browser/extension_registry_observer.h"
|
|
|
| namespace content {
|
| class WebContents;
|
| @@ -28,13 +30,15 @@ class ExtensionAction;
|
|
|
| namespace extensions {
|
| class Extension;
|
| +class ExtensionRegistry;
|
|
|
| // The provider for ExtensionActions corresponding to scripts which are actively
|
| // running or need permission.
|
| // TODO(rdevlin.cronin): This isn't really a controller, but it has good parity
|
| // with PageAction"Controller".
|
| class ActiveScriptController : public LocationBarController::ActionProvider,
|
| - public content::WebContentsObserver {
|
| + public content::WebContentsObserver,
|
| + public ExtensionRegistryObserver {
|
| public:
|
| explicit ActiveScriptController(content::WebContents* web_contents);
|
| virtual ~ActiveScriptController();
|
| @@ -62,7 +66,7 @@ class ActiveScriptController : public LocationBarController::ActionProvider,
|
| void OnActiveTabPermissionGranted(const Extension* extension);
|
|
|
| // Notifies the ActiveScriptController of detected ad injection.
|
| - void OnAdInjectionDetected(const std::set<std::string> ad_injectors);
|
| + void OnAdInjectionDetected(const std::set<std::string>& ad_injectors);
|
|
|
| // LocationBarControllerProvider implementation.
|
| virtual ExtensionAction* GetActionForExtension(
|
| @@ -88,13 +92,23 @@ class ActiveScriptController : public LocationBarController::ActionProvider,
|
| // Runs any pending injections for the corresponding extension.
|
| void RunPendingForExtension(const Extension* extension);
|
|
|
| - // Handles the NotifyExtensionScriptExecution message.
|
| - void OnNotifyExtensionScriptExecution(const std::string& extension_id,
|
| - int page_id);
|
| + // Handle the RequestContentScriptPermission message.
|
| + void OnRequestContentScriptPermission(const std::string& extension_id,
|
| + int page_id,
|
| + int request_id);
|
| +
|
| + // Grants permission for the given request to run.
|
| + void GrantContentScriptPermission(int request_id);
|
|
|
| // content::WebContentsObserver implementation.
|
| virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
|
|
|
| + // ExtensionRegistryObserver implementation.
|
| + virtual void OnExtensionUnloaded(
|
| + content::BrowserContext* browser_context,
|
| + const Extension* extension,
|
| + UnloadedExtensionInfo::Reason reason) OVERRIDE;
|
| +
|
| // Log metrics.
|
| void LogUMA() const;
|
|
|
| @@ -118,6 +132,9 @@ class ActiveScriptController : public LocationBarController::ActionProvider,
|
| typedef std::map<std::string, linked_ptr<ExtensionAction> > ActiveScriptMap;
|
| ActiveScriptMap active_script_actions_;
|
|
|
| + ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
|
| + extension_registry_observer_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ActiveScriptController);
|
| };
|
|
|
|
|