diff options
-rw-r--r-- | extensions/renderer/script_injection.cc | 14 | ||||
-rw-r--r-- | extensions/renderer/script_injection.h | 12 | ||||
-rw-r--r-- | extensions/renderer/script_injection_manager.cc | 10 | ||||
-rw-r--r-- | extensions/renderer/user_script_set.cc | 4 |
4 files changed, 25 insertions, 15 deletions
diff --git a/extensions/renderer/script_injection.cc b/extensions/renderer/script_injection.cc index 2a68720..ea588fe 100644 --- a/extensions/renderer/script_injection.cc +++ b/extensions/renderer/script_injection.cc @@ -21,7 +21,7 @@ #include "extensions/renderer/extensions_renderer_client.h" #include "third_party/WebKit/public/platform/WebString.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/WebScopedUserGesture.h" #include "third_party/WebKit/public/web/WebScriptSource.h" #include "third_party/WebKit/public/web/WebSecurityOrigin.h" @@ -59,7 +59,7 @@ void AppendAllChildFrames(blink::WebFrame* parent_frame, // |frame|. If no isolated world has been created for that extension, // one will be created and initialized. int GetIsolatedWorldIdForExtension(const Extension* extension, - blink::WebFrame* frame) { + blink::WebLocalFrame* frame) { static int g_next_isolated_world_id = ExtensionsRendererClient::Get()->GetLowestIsolatedWorldId(); @@ -114,7 +114,7 @@ void ScriptInjection::RemoveIsolatedWorld(const std::string& extension_id) { ScriptInjection::ScriptInjection( scoped_ptr<ScriptInjector> injector, - blink::WebFrame* web_frame, + blink::WebLocalFrame* web_frame, const std::string& extension_id, UserScript::RunLocation run_location, int tab_id) @@ -223,7 +223,9 @@ void ScriptInjection::Inject(const Extension* extension, for (std::vector<blink::WebFrame*>::iterator iter = frame_vector.begin(); iter != frame_vector.end(); ++iter) { - blink::WebFrame* frame = *iter; + // TODO(dcheng): Unfortunately, the code as written won't work in an OOPI + // world. This is just a temporary hack to make things compile. + blink::WebLocalFrame* frame = (*iter)->toWebLocalFrame(); // We recheck access here in the renderer for extra safety against races // with navigation, but different frames can have different URLs, and the @@ -251,7 +253,7 @@ void ScriptInjection::Inject(const Extension* extension, } void ScriptInjection::InjectJs(const Extension* extension, - blink::WebFrame* frame, + blink::WebLocalFrame* frame, base::ListValue* execution_results) { std::vector<blink::WebScriptSource> sources = injector_->GetJsSources(run_location_); @@ -307,7 +309,7 @@ void ScriptInjection::InjectJs(const Extension* extension, } } -void ScriptInjection::InjectCss(blink::WebFrame* frame) { +void ScriptInjection::InjectCss(blink::WebLocalFrame* frame) { std::vector<std::string> css_sources = injector_->GetCssSources(run_location_); for (std::vector<std::string>::const_iterator iter = css_sources.begin(); diff --git a/extensions/renderer/script_injection.h b/extensions/renderer/script_injection.h index 42ecdbd..d7edd66 100644 --- a/extensions/renderer/script_injection.h +++ b/extensions/renderer/script_injection.h @@ -11,7 +11,7 @@ #include "extensions/renderer/script_injector.h" namespace blink { -class WebFrame; +class WebLocalFrame; } namespace extensions { @@ -29,7 +29,7 @@ class ScriptInjection { static void RemoveIsolatedWorld(const std::string& extension_id); ScriptInjection(scoped_ptr<ScriptInjector> injector, - blink::WebFrame* web_frame, + blink::WebLocalFrame* web_frame, const std::string& extension_id, UserScript::RunLocation run_location, int tab_id); @@ -50,7 +50,7 @@ class ScriptInjection { ScriptsRunInfo* scripts_run_info); // Accessors. - blink::WebFrame* web_frame() const { return web_frame_; } + blink::WebLocalFrame* web_frame() const { return web_frame_; } const std::string& extension_id() const { return extension_id_; } int64 request_id() const { return request_id_; } @@ -64,11 +64,11 @@ class ScriptInjection { // Inject any JS scripts into the |frame|, optionally populating // |execution_results|. void InjectJs(const Extension* extension, - blink::WebFrame* frame, + blink::WebLocalFrame* frame, base::ListValue* execution_results); // Inject any CSS source into the |frame|. - void InjectCss(blink::WebFrame* frame); + void InjectCss(blink::WebLocalFrame* frame); // Notify that we will not inject, and mark it as acknowledged. void NotifyWillNotInject(ScriptInjector::InjectFailureReason reason); @@ -77,7 +77,7 @@ class ScriptInjection { scoped_ptr<ScriptInjector> injector_; // The (main) WebFrame into which this should inject the script. - blink::WebFrame* web_frame_; + blink::WebLocalFrame* web_frame_; // The id of the associated extension. std::string extension_id_; diff --git a/extensions/renderer/script_injection_manager.cc b/extensions/renderer/script_injection_manager.cc index 14f2767..abd7d80 100644 --- a/extensions/renderer/script_injection_manager.cc +++ b/extensions/renderer/script_injection_manager.cc @@ -321,7 +321,11 @@ void ScriptInjectionManager::InjectScripts( void ScriptInjectionManager::HandleExecuteCode( const ExtensionMsg_ExecuteCode_Params& params, content::RenderView* render_view) { - blink::WebFrame* main_frame = render_view->GetWebView()->mainFrame(); + // TODO(dcheng): Not sure how this can happen today. In an OOPI world, it + // would indicate a logic error--the browser must direct this request to the + // right renderer process to begin with. + blink::WebLocalFrame* main_frame = + render_view->GetWebView()->mainFrame()->toWebLocalFrame(); if (!main_frame) { render_view->Send( new ExtensionHostMsg_ExecuteCodeFinished(render_view->GetRoutingID(), @@ -357,10 +361,12 @@ void ScriptInjectionManager::HandleExecuteDeclarativeScript( int script_id, const GURL& url) { const Extension* extension = extensions_->GetByID(extension_id); + // TODO(dcheng): This function signature should really be a WebLocalFrame, + // rather than trying to coerce it here. scoped_ptr<ScriptInjection> injection = user_script_set_manager_->GetInjectionForDeclarativeScript( script_id, - web_frame, + web_frame->toWebLocalFrame(), tab_id, url, extension); diff --git a/extensions/renderer/user_script_set.cc b/extensions/renderer/user_script_set.cc index 92608bd..87f91fc 100644 --- a/extensions/renderer/user_script_set.cc +++ b/extensions/renderer/user_script_set.cc @@ -171,6 +171,8 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetDeclarativeScriptInjection( return scoped_ptr<ScriptInjection>(); } +// TODO(dcheng): Scripts can't be injected on a remote frame, so this function +// signature needs to be updated. scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( UserScript* script, blink::WebFrame* web_frame, @@ -208,7 +210,7 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( if (inject_css || inject_js) { injection.reset(new ScriptInjection( injector.Pass(), - web_frame, + web_frame->toWebLocalFrame(), extension->id(), run_location, tab_id)); |