| Index: extensions/renderer/script_injection.cc
|
| diff --git a/extensions/renderer/script_injection.cc b/extensions/renderer/script_injection.cc
|
| index da93590c3908c00fb33421a2b3ff9f1077e04b06..b58638fcccfab08a3d34bd5bd9859163fa86ceaf 100644
|
| --- a/extensions/renderer/script_injection.cc
|
| +++ b/extensions/renderer/script_injection.cc
|
| @@ -153,7 +153,7 @@ ScriptInjection::InjectionResult ScriptInjection::TryToInject(
|
|
|
| if (!injection_host_) {
|
| NotifyWillNotInject(ScriptInjector::EXTENSION_REMOVED);
|
| - return INJECTION_FINISHED; // We're done.
|
| + return INJECTION_CANCELED; // We're done.
|
| }
|
|
|
| blink::WebLocalFrame* web_frame = render_frame_->GetWebFrame();
|
| @@ -172,6 +172,8 @@ ScriptInjection::InjectionResult ScriptInjection::TryToInject(
|
| // notify it upon completion.
|
| if (result == INJECTION_BLOCKED)
|
| async_completion_callback_ = async_completion_callback;
|
| + else if (result == INJECTION_CANCELED)
|
| + NotifyWillNotInject(ScriptInjector::EXTENSION_REMOVED);
|
| return result;
|
| }
|
|
|
| @@ -211,6 +213,7 @@ void ScriptInjection::NotifyWillNotInject(
|
| ScriptInjection::InjectionResult ScriptInjection::Inject(
|
| ScriptsRunInfo* scripts_run_info) {
|
| DCHECK(injection_host_);
|
| + DCHECK(render_frame_);
|
| DCHECK(scripts_run_info);
|
| DCHECK(!complete_);
|
|
|
| @@ -218,8 +221,15 @@ ScriptInjection::InjectionResult ScriptInjection::Inject(
|
| bool should_inject_css = injector_->ShouldInjectCss(run_location_);
|
| DCHECK(should_inject_js || should_inject_css);
|
|
|
| - if (should_inject_js)
|
| + if (should_inject_js) {
|
| InjectJs();
|
| + // InjectJs() may run arbitrary blocking JavaScript code for an unspecified
|
| + // amount of time and destroy the frame and/or injection host.
|
| + if (!injection_host_)
|
| + return INJECTION_CANCELED;
|
| + if (!render_frame_)
|
| + return INJECTION_FINISHED;
|
| + }
|
| if (should_inject_css)
|
| InjectCss();
|
|
|
| @@ -274,7 +284,7 @@ void ScriptInjection::InjectJs() {
|
| callback.release());
|
| }
|
|
|
| - if (injection_host_->id().type() == HostID::EXTENSIONS)
|
| + if (injection_host_ && injection_host_->id().type() == HostID::EXTENSIONS)
|
| UMA_HISTOGRAM_TIMES("Extensions.InjectScriptTime", exec_timer.Elapsed());
|
| }
|
|
|
|
|