Index: extensions/renderer/user_script_slave.h |
diff --git a/extensions/renderer/user_script_slave.h b/extensions/renderer/user_script_slave.h |
index fc3da79ae05a9223e52566cc1118043fb3b75119..48fcf069f44d47fd5f1bafcf324f1c927e308609 100644 |
--- a/extensions/renderer/user_script_slave.h |
+++ b/extensions/renderer/user_script_slave.h |
@@ -10,11 +10,13 @@ |
#include <string> |
#include <vector> |
+#include "base/memory/linked_ptr.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/shared_memory.h" |
#include "base/stl_util.h" |
#include "base/strings/string_piece.h" |
#include "extensions/common/user_script.h" |
+#include "third_party/WebKit/public/platform/WebString.h" |
#include "third_party/WebKit/public/web/WebScriptSource.h" |
class GURL; |
@@ -23,12 +25,15 @@ namespace blink { |
class WebFrame; |
} |
+namespace content { |
+class RenderView; |
+} |
+ |
using blink::WebScriptSource; |
namespace extensions { |
class Extension; |
class ExtensionSet; |
- |
// Manages installed UserScripts for a render process. |
class UserScriptSlave { |
public: |
@@ -41,11 +46,6 @@ class UserScriptSlave { |
// Update the parsed scripts from shared memory. |
bool UpdateScripts(base::SharedMemoryHandle shared_memory); |
- // Inject the appropriate scripts into a frame based on its URL. |
- // TODO(aa): Extract a UserScriptFrame interface out of this to improve |
- // testability. |
- void InjectScripts(blink::WebFrame* frame, UserScript::RunLocation location); |
- |
// Gets the isolated world ID to use for the given |extension| in the given |
// |frame|. If no isolated world has been created for that extension, |
// one will be created and initialized. |
@@ -59,7 +59,50 @@ class UserScriptSlave { |
void RemoveIsolatedWorld(const std::string& extension_id); |
+ // Inject the appropriate scripts into a frame based on its URL. |
+ // TODO(aa): Extract a UserScriptFrame interface out of this to improve |
+ // testability. |
+ void InjectScripts(blink::WebFrame* frame, UserScript::RunLocation location); |
+ |
+ // Allow an extension to inject scripts that were previously delayed for user |
+ // approval. |
+ void OnContentScriptGrantedPermission( |
+ content::RenderView* render_view, int request_id); |
+ |
private: |
+ // A PendingInjection that needs user approval before it can be executed. |
+ struct PendingInjection; |
+ typedef std::vector<linked_ptr<PendingInjection> > PendingInjectionList; |
+ |
+ // The information about a given set of scripts being run. Primarily for |
+ // metrics. |
+ struct ScriptsRunInfo; |
+ |
+ // Adds a pending injection to |pending_injections_|. Returns the id of the |
+ // pending injection. |
+ int AddPendingInjection(UserScript* script, |
+ UserScript::RunLocation location, |
+ const blink::WebString& frame_name); |
+ |
+ // Inject the css scripts from the given |script| into the |frame|, and record |
+ // metrics into |scripts_run_info|. |
+ void InjectCSSScripts(blink::WebFrame* frame, |
+ UserScript* script, |
+ ScriptsRunInfo* scripts_run_info); |
+ |
+ // Inject the js scripts from the given |script| into the |frame|, and record |
+ // metrics into |scripts_run_info|. |
+ void InjectJSScripts(blink::WebFrame* frame, |
+ UserScript* script, |
+ const Extension* extension, |
+ ScriptsRunInfo* scripts_run_info); |
+ |
+ // Log the data from scripts being run, including doing UMA and notifying the |
+ // browser. |
+ void LogScriptsRun(blink::WebFrame* frame, |
+ UserScript::RunLocation location, |
+ const ScriptsRunInfo& info); |
+ |
// Shared memory containing raw script data. |
scoped_ptr<base::SharedMemory> shared_memory_; |
@@ -67,6 +110,9 @@ class UserScriptSlave { |
std::vector<UserScript*> scripts_; |
STLElementDeleter<std::vector<UserScript*> > script_deleter_; |
+ // Map of extension ids to the injections pending for those extensions. |
+ PendingInjectionList pending_injections_; |
+ |
// Greasemonkey API source that is injected with the scripts. |
base::StringPiece api_js_; |