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 c3fee9dd67a809b5065bf31e8554a0eb6412ef64..d741c1efec92a53319f41aaa6a2d3c7a3aacc9a7 100644 |
--- a/chrome/browser/extensions/active_script_controller.h |
+++ b/chrome/browser/extensions/active_script_controller.h |
@@ -15,6 +15,7 @@ |
#include "base/memory/linked_ptr.h" |
#include "chrome/browser/extensions/location_bar_controller.h" |
#include "content/public/browser/web_contents_observer.h" |
+#include "extensions/browser/extension_registry_observer.h" |
#include "extensions/common/permissions/permissions_data.h" |
#include "extensions/common/user_script.h" |
@@ -30,12 +31,14 @@ 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 LocationBar"Controller". |
-class ActiveScriptController : public content::WebContentsObserver { |
+class ActiveScriptController : public content::WebContentsObserver, |
+ public ExtensionRegistryObserver { |
public: |
explicit ActiveScriptController(content::WebContents* web_contents); |
virtual ~ActiveScriptController(); |
@@ -68,10 +71,6 @@ class ActiveScriptController : public content::WebContentsObserver { |
// action should be displayed. |
ExtensionAction* GetActionForExtension(const Extension* extension); |
- // Notifies that the given |extension| has been unloaded; forwarded from the |
- // ExtensionRegistryObserver method. |
- void OnExtensionUnloaded(const Extension* extension); |
- |
#if defined(UNIT_TEST) |
// Only used in tests. |
PermissionsData::AccessType RequiresUserConsentForScriptInjectionForTesting( |
@@ -113,14 +112,20 @@ class ActiveScriptController : public content::WebContentsObserver { |
// Grants permission for the given request to run. |
void PermitScriptInjection(int64 request_id); |
+ // Log metrics. |
+ void LogUMA() const; |
+ |
// content::WebContentsObserver implementation. |
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
virtual void DidNavigateMainFrame( |
const content::LoadCommittedDetails& details, |
const content::FrameNavigateParams& params) OVERRIDE; |
- // Log metrics. |
- void LogUMA() const; |
+ // ExtensionRegistryObserver: |
+ virtual void OnExtensionUnloaded( |
+ content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ UnloadedExtensionInfo::Reason reason) OVERRIDE; |
// Whether or not the ActiveScriptController is enabled (corresponding to the |
// kActiveScriptEnforcement switch). If it is not, it acts as an empty shell, |
@@ -142,6 +147,9 @@ class ActiveScriptController : public content::WebContentsObserver { |
typedef std::map<std::string, linked_ptr<ExtensionAction> > ActiveScriptMap; |
ActiveScriptMap active_script_actions_; |
+ ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> |
+ extension_registry_observer_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ActiveScriptController); |
}; |