Chromium Code Reviews| Index: extensions/renderer/script_injection.cc |
| diff --git a/extensions/renderer/script_injection.cc b/extensions/renderer/script_injection.cc |
| index 5a96cbb4fc1f033a3c39caf5b99a127014c42dad..57f3468186d2aaa8a88664da42a5621a3c0bd23e 100644 |
| --- a/extensions/renderer/script_injection.cc |
| +++ b/extensions/renderer/script_injection.cc |
| @@ -108,18 +108,19 @@ void ScriptInjection::RemoveIsolatedWorld(const std::string& host_id) { |
| ScriptInjection::ScriptInjection( |
| scoped_ptr<ScriptInjector> injector, |
| blink::WebLocalFrame* web_frame, |
| - const HostID& host_id, |
| + scoped_ptr<const InjectionHost> injection_host, |
| const UserScript::ConsumerInstanceType& consumer_instance_type, |
| UserScript::RunLocation run_location, |
| int tab_id) |
| : injector_(injector.Pass()), |
| web_frame_(web_frame), |
| - host_id_(host_id), |
| + injection_host_(injection_host.Pass()), |
| consumer_instance_type_(consumer_instance_type), |
| run_location_(run_location), |
| tab_id_(tab_id), |
| request_id_(kInvalidRequestId), |
| complete_(false) { |
| + CHECK(injection_host_.get()); |
| } |
| ScriptInjection::~ScriptInjection() { |
| @@ -128,7 +129,6 @@ ScriptInjection::~ScriptInjection() { |
| } |
| bool ScriptInjection::TryToInject(UserScript::RunLocation current_location, |
| - const InjectionHost* injection_host, |
| ScriptsRunInfo* scripts_run_info) { |
| if (current_location < run_location_) |
| return false; // Wait for the right location. |
| @@ -136,13 +136,14 @@ bool ScriptInjection::TryToInject(UserScript::RunLocation current_location, |
| if (request_id_ != kInvalidRequestId) |
| return false; // We're waiting for permission right now, try again later. |
| - if (!injection_host) { |
| + if (!injection_host_) { |
| NotifyWillNotInject(ScriptInjector::EXTENSION_REMOVED); |
| return true; // We're done. |
| } |
| - switch (injector_->CanExecuteOnFrame(injection_host, web_frame_, tab_id_, |
| - web_frame_->top()->document().url())) { |
| + switch (injector_->CanExecuteOnFrame( |
| + injection_host_.get(), web_frame_, tab_id_, |
| + web_frame_->top()->document().url())) { |
| case PermissionsData::ACCESS_DENIED: |
| NotifyWillNotInject(ScriptInjector::NOT_ALLOWED); |
| return true; // We're done. |
| @@ -150,7 +151,7 @@ bool ScriptInjection::TryToInject(UserScript::RunLocation current_location, |
| SendInjectionMessage(true /* request permission */); |
| return false; // Wait around for permission. |
| case PermissionsData::ACCESS_ALLOWED: |
| - Inject(injection_host, scripts_run_info); |
| + Inject(scripts_run_info); |
| return true; // We're done! |
| } |
| @@ -158,14 +159,13 @@ bool ScriptInjection::TryToInject(UserScript::RunLocation current_location, |
| return false; |
| } |
| -bool ScriptInjection::OnPermissionGranted(const InjectionHost* injection_host, |
| - ScriptsRunInfo* scripts_run_info) { |
| - if (!injection_host) { |
| +bool ScriptInjection::OnPermissionGranted(ScriptsRunInfo* scripts_run_info) { |
| + if (!injection_host_.get()) { |
| NotifyWillNotInject(ScriptInjector::EXTENSION_REMOVED); |
| return false; |
| } |
| - Inject(injection_host, scripts_run_info); |
| + Inject(scripts_run_info); |
| return true; |
| } |
| @@ -178,7 +178,7 @@ void ScriptInjection::SendInjectionMessage(bool request_permission) { |
| request_id_ = request_permission ? g_next_pending_id++ : kInvalidRequestId; |
| render_view->Send(new ExtensionHostMsg_RequestScriptInjectionPermission( |
| render_view->GetRoutingID(), |
| - host_id_.id(), |
| + host_id().id(), |
| injector_->script_type(), |
| request_id_)); |
| } |
| @@ -189,13 +189,12 @@ void ScriptInjection::NotifyWillNotInject( |
| injector_->OnWillNotInject(reason); |
| } |
| -void ScriptInjection::Inject(const InjectionHost* injection_host, |
| - ScriptsRunInfo* scripts_run_info) { |
| - DCHECK(injection_host); |
| +void ScriptInjection::Inject(ScriptsRunInfo* scripts_run_info) { |
| + DCHECK(injection_host_.get()); |
|
Devlin
2015/02/20 22:39:13
scoped_ptr has a bool operator, so this can be wri
Xi Han
2015/02/23 16:14:59
Done.
|
| DCHECK(scripts_run_info); |
| DCHECK(!complete_); |
| - if (injection_host->ShouldNotifyBrowserOfInjection()) |
| + if (injection_host_->ShouldNotifyBrowserOfInjection()) |
| SendInjectionMessage(false /* don't request permission */); |
| std::vector<blink::WebFrame*> frame_vector; |
| @@ -228,13 +227,14 @@ void ScriptInjection::Inject(const InjectionHost* injection_host, |
| // Note: we don't consider ACCESS_WITHHELD because there is nowhere to |
| // surface a request for a child frame. |
| // TODO(rdevlin.cronin): We should ask for permission somehow. |
| - if (injector_->CanExecuteOnFrame(injection_host, frame, tab_id_, top_url) == |
| - PermissionsData::ACCESS_DENIED) { |
| + if (injector_->CanExecuteOnFrame( |
| + injection_host_.get(), frame, tab_id_, top_url) == |
| + PermissionsData::ACCESS_DENIED) { |
| DCHECK(frame->parent()); |
| continue; |
| } |
| if (inject_js) |
| - InjectJs(injection_host, frame, execution_results.get()); |
| + InjectJs(frame, execution_results.get()); |
| if (inject_css) |
| InjectCss(frame); |
| } |
| @@ -247,20 +247,20 @@ void ScriptInjection::Inject(const InjectionHost* injection_host, |
| run_location_); |
| } |
| -void ScriptInjection::InjectJs(const InjectionHost* injection_host, |
| - blink::WebLocalFrame* frame, |
| +void ScriptInjection::InjectJs(blink::WebLocalFrame* frame, |
| base::ListValue* execution_results) { |
| std::vector<blink::WebScriptSource> sources = |
| injector_->GetJsSources(run_location_); |
| bool in_main_world = injector_->ShouldExecuteInMainWorld(); |
| int world_id = in_main_world |
| ? DOMActivityLogger::kMainWorldId |
| - : GetIsolatedWorldIdForInstance(injection_host, frame); |
| + : GetIsolatedWorldIdForInstance(injection_host_.get(), |
| + frame); |
| bool expects_results = injector_->ExpectsResults(); |
| base::ElapsedTimer exec_timer; |
| - if (injection_host->id().type() == HostID::EXTENSIONS) |
| - DOMActivityLogger::AttachToWorld(world_id, injection_host->id().id()); |
| + if (injection_host_->id().type() == HostID::EXTENSIONS) |
| + DOMActivityLogger::AttachToWorld(world_id, injection_host_->id().id()); |
| v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| v8::Local<v8::Value> script_value; |
| if (in_main_world) { |
| @@ -285,7 +285,7 @@ void ScriptInjection::InjectJs(const InjectionHost* injection_host, |
| script_value = (*results)[0]; |
| } |
| - if (injection_host->id().type() == HostID::EXTENSIONS) |
| + if (injection_host_->id().type() == HostID::EXTENSIONS) |
| UMA_HISTOGRAM_TIMES("Extensions.InjectScriptTime", exec_timer.Elapsed()); |
| if (expects_results) { |