Chromium Code Reviews| Index: extensions/renderer/user_script_set.cc |
| diff --git a/extensions/renderer/user_script_set.cc b/extensions/renderer/user_script_set.cc |
| index 752f4644a85739e58046e1d9169075ceab0ef153..4ba54e62160ceb4870d22bcb9fdd740cc136ad74 100644 |
| --- a/extensions/renderer/user_script_set.cc |
| +++ b/extensions/renderer/user_script_set.cc |
| @@ -12,9 +12,11 @@ |
| #include "extensions/common/permissions/permissions_data.h" |
| #include "extensions/renderer/extension_injection_host.h" |
| #include "extensions/renderer/extensions_renderer_client.h" |
| +#include "extensions/renderer/injection_host.h" |
| #include "extensions/renderer/script_context.h" |
| #include "extensions/renderer/script_injection.h" |
| #include "extensions/renderer/user_script_injector.h" |
| +#include "extensions/renderer/web_ui_injection_host.h" |
| #include "third_party/WebKit/public/web/WebDocument.h" |
| #include "third_party/WebKit/public/web/WebFrame.h" |
| #include "url/gurl.h" |
| @@ -55,6 +57,8 @@ void UserScriptSet::GetActiveExtensionIds( |
| for (ScopedVector<UserScript>::const_iterator iter = scripts_.begin(); |
| iter != scripts_.end(); |
| ++iter) { |
| + if ((*iter)->host_id().type() != HostID::EXTENSIONS) |
| + continue; |
| DCHECK(!(*iter)->extension_id().empty()); |
| ids->insert((*iter)->extension_id()); |
| } |
| @@ -69,16 +73,12 @@ void UserScriptSet::GetInjections( |
| for (ScopedVector<UserScript>::const_iterator iter = scripts_.begin(); |
| iter != scripts_.end(); |
| ++iter) { |
| - const Extension* extension = extensions_->GetByID((*iter)->extension_id()); |
| - if (!extension) |
| - continue; |
| scoped_ptr<ScriptInjection> injection = GetInjectionForScript( |
| *iter, |
| web_frame, |
| tab_id, |
| run_location, |
| document_url, |
| - extension, |
| false /* is_declarative */); |
| if (injection.get()) |
| injections->push_back(injection.release()); |
| @@ -155,8 +155,7 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetDeclarativeScriptInjection( |
| blink::WebFrame* web_frame, |
| int tab_id, |
| UserScript::RunLocation run_location, |
| - const GURL& document_url, |
| - const Extension* extension) { |
| + const GURL& document_url) { |
| for (ScopedVector<UserScript>::const_iterator it = scripts_.begin(); |
| it != scripts_.end(); |
| ++it) { |
| @@ -166,7 +165,6 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetDeclarativeScriptInjection( |
| tab_id, |
| run_location, |
| document_url, |
| - extension, |
| true /* is_declarative */); |
| } |
| } |
| @@ -181,9 +179,19 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( |
| int tab_id, |
| UserScript::RunLocation run_location, |
| const GURL& document_url, |
| - const Extension* extension, |
| bool is_declarative) { |
| scoped_ptr<ScriptInjection> injection; |
| + scoped_ptr<InjectionHost> injection_host; |
| + const HostID& host_id = script->host_id(); |
| + if (host_id.type() == HostID::EXTENSIONS) { |
| + const Extension* extension = extensions_->GetByID(host_id.id()); |
|
Devlin
2015/02/23 17:27:39
nit: Why not use the create method?
injection_host
Xi Han
2015/02/24 16:39:50
Done.
|
| + if (!extension) |
| + return injection.Pass(); |
| + injection_host.reset(new ExtensionInjectionHost(extension)); |
| + } else if (host_id.type() == HostID::WEBUI) { |
|
Devlin
2015/02/23 17:27:39
Since there are only two types, this should be an
Xi Han
2015/02/24 16:39:50
Done.
|
| + injection_host.reset(new WebUIInjectionHost(host_id)); |
| + } |
| + |
| if (web_frame->parent() && !script->match_all_frames()) |
| return injection.Pass(); // Only match subframes if the script declared it. |
| @@ -196,11 +204,8 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( |
| scoped_ptr<ScriptInjector> injector(new UserScriptInjector(script, |
| this, |
| is_declarative)); |
| - HostID host_id(HostID::EXTENSIONS, extension->id()); |
| - ExtensionInjectionHost extension_injection_host( |
| - make_scoped_refptr<const Extension>(extension)); |
| if (injector->CanExecuteOnFrame( |
| - &extension_injection_host, |
| + injection_host.get(), |
| web_frame, |
| -1, // Content scripts are not tab-specific. |
| web_frame->top()->document().url()) == |
| @@ -216,7 +221,7 @@ scoped_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript( |
| injection.reset(new ScriptInjection( |
| injector.Pass(), |
| web_frame->toWebLocalFrame(), |
| - host_id, |
| + injection_host.Pass(), |
| script->consumer_instance_type(), |
| run_location, |
| tab_id)); |