Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1030)

Unified Diff: chrome/browser/extensions/active_script_controller.h

Issue 313453002: Resubmit: Block content scripts from executing until user grants permission (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tests Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698