Index: extensions/renderer/script_injection_manager.cc |
diff --git a/extensions/renderer/script_injection_manager.cc b/extensions/renderer/script_injection_manager.cc |
index 2d18757f2caceb601b39c7a771d4bef5713c61f7..d91ca9d1aee5a4f870606857e0684c7ad9b8d3a0 100644 |
--- a/extensions/renderer/script_injection_manager.cc |
+++ b/extensions/renderer/script_injection_manager.cc |
@@ -17,6 +17,7 @@ |
#include "extensions/renderer/script_injection.h" |
#include "extensions/renderer/scripts_run_info.h" |
#include "ipc/ipc_message_macros.h" |
+#include "third_party/WebKit/public/web/WebDocument.h" |
#include "third_party/WebKit/public/web/WebFrame.h" |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
#include "third_party/WebKit/public/web/WebView.h" |
@@ -48,6 +49,10 @@ class ScriptInjectionManager::RVOHelper : public content::RenderViewObserver { |
virtual void OnDestruct() OVERRIDE; |
virtual void OnExecuteCode(const ExtensionMsg_ExecuteCode_Params& params); |
+ virtual void OnExecuteDeclarativeScript(int tab_id, |
+ const ExtensionId& extension_id, |
+ int script_id, |
+ const GURL& url); |
virtual void OnPermitScriptInjection(int64 request_id); |
// Tells the ScriptInjectionManager to run tasks associated with |
@@ -87,6 +92,8 @@ bool ScriptInjectionManager::RVOHelper::OnMessageReceived( |
IPC_MESSAGE_HANDLER(ExtensionMsg_ExecuteCode, OnExecuteCode) |
IPC_MESSAGE_HANDLER(ExtensionMsg_PermitScriptInjection, |
OnPermitScriptInjection) |
+ IPC_MESSAGE_HANDLER(ExtensionMsg_ExecuteDeclarativeScript, |
+ OnExecuteDeclarativeScript) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -150,6 +157,25 @@ void ScriptInjectionManager::RVOHelper::OnExecuteCode( |
manager_->HandleExecuteCode(params, render_view()); |
} |
+void ScriptInjectionManager::RVOHelper::OnExecuteDeclarativeScript( |
+ int tab_id, |
+ const ExtensionId& extension_id, |
+ int script_id, |
+ const GURL& url) { |
+ blink::WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); |
+ CHECK(main_frame); |
+ |
+ // Begin script injeciton workflow only if the current URL is identical to |
+ // the one that matched declarative conditions in the browser. |
+ if (main_frame->top()->document().url() == url) { |
Devlin
2014/08/28 21:38:10
This should *probably* be done better. This doesn
Mark Dittmer
2014/08/28 23:49:47
Done.
|
+ manager_->HandleExecuteDeclarativeScript(main_frame, |
+ tab_id, |
+ extension_id, |
+ script_id, |
+ url); |
+ } |
+} |
+ |
void ScriptInjectionManager::RVOHelper::OnPermitScriptInjection( |
int64 request_id) { |
manager_->HandlePermitScriptInjection(request_id); |
@@ -323,6 +349,30 @@ void ScriptInjectionManager::HandleExecuteCode( |
} |
} |
+void ScriptInjectionManager::HandleExecuteDeclarativeScript( |
+ blink::WebFrame* web_frame, |
+ int tab_id, |
+ const ExtensionId& extension_id, |
+ int script_id, |
+ const GURL& url) { |
+ const Extension* extension = extensions_->GetByID(extension_id); |
+ scoped_ptr<ScriptInjection> injection = |
+ user_script_set_manager_->GetInjectionForDeclarativeScript( |
+ script_id, |
+ web_frame, |
+ tab_id, |
+ url, |
+ extension); |
+ if (injection.get()) { |
+ ScriptsRunInfo scripts_run_info; |
+ // TODO(markdittmer): Use return value of TryToInject for error handling. |
+ injection->TryToInject(UserScript::BROWSER_DRIVEN, |
+ extension, |
+ &scripts_run_info); |
+ scripts_run_info.LogRun(web_frame, UserScript::BROWSER_DRIVEN); |
Devlin
2014/08/28 21:38:10
Even if we don't use the result of TryToInject yet
Mark Dittmer
2014/08/28 23:49:47
As per our conversation, ScriptInjection::TryToInj
|
+ } |
+} |
+ |
void ScriptInjectionManager::HandlePermitScriptInjection(int64 request_id) { |
ScopedVector<ScriptInjection>::iterator iter = |
pending_injections_.begin(); |