| Index: extensions/renderer/script_injection.cc
|
| diff --git a/extensions/renderer/script_injection.cc b/extensions/renderer/script_injection.cc
|
| index 69cfc526c797f2cd7b9407495b34290765210d9e..2cf43366fd7896c0c36ac22a3313f1a0bb5eb63c 100644
|
| --- a/extensions/renderer/script_injection.cc
|
| +++ b/extensions/renderer/script_injection.cc
|
| @@ -213,15 +213,22 @@ ScriptInjection::InjectionResult ScriptInjection::Inject(
|
| DCHECK(injection_host_);
|
| DCHECK(scripts_run_info);
|
| DCHECK(!complete_);
|
| -
|
| - bool should_inject_js = injector_->ShouldInjectJs(run_location_);
|
| - bool should_inject_css = injector_->ShouldInjectCss(run_location_);
|
| - DCHECK(should_inject_js || should_inject_css);
|
| + bool should_inject_js = injector_->ShouldInjectJs(
|
| + run_location_, scripts_run_info->injected_scripts);
|
| + bool should_inject_css = injector_->ShouldInjectCss(
|
| + run_location_, scripts_run_info->injected_scripts);
|
| +
|
| + // This can happen if the extension specified a script to
|
| + // be run in multiple rules, and the script has already run.
|
| + // See crbug.com/nnn.
|
| + if (!should_inject_js && !should_inject_css) {
|
| + return INJECTION_FINISHED;
|
| + }
|
|
|
| if (should_inject_js)
|
| - InjectJs();
|
| + InjectJs(scripts_run_info);
|
| if (should_inject_css)
|
| - InjectCss();
|
| + InjectCss(scripts_run_info);
|
|
|
| complete_ = did_inject_js_ || !should_inject_js;
|
|
|
| @@ -237,11 +244,12 @@ ScriptInjection::InjectionResult ScriptInjection::Inject(
|
| return complete_ ? INJECTION_FINISHED : INJECTION_BLOCKED;
|
| }
|
|
|
| -void ScriptInjection::InjectJs() {
|
| +void ScriptInjection::InjectJs(ScriptsRunInfo* scripts_run_info) {
|
| DCHECK(!did_inject_js_);
|
| blink::WebLocalFrame* web_frame = render_frame_->GetWebFrame();
|
| std::vector<blink::WebScriptSource> sources =
|
| - injector_->GetJsSources(run_location_);
|
| + injector_->GetJsSources(run_location_, scripts_run_info);
|
| + DCHECK(!sources.empty());
|
| bool in_main_world = injector_->ShouldExecuteInMainWorld();
|
| int world_id = in_main_world
|
| ? DOMActivityLogger::kMainWorldId
|
| @@ -311,9 +319,9 @@ void ScriptInjection::OnJsInjectionCompleted(
|
| }
|
| }
|
|
|
| -void ScriptInjection::InjectCss() {
|
| +void ScriptInjection::InjectCss(ScriptsRunInfo* scripts_run_info) {
|
| std::vector<blink::WebString> css_sources =
|
| - injector_->GetCssSources(run_location_);
|
| + injector_->GetCssSources(run_location_, scripts_run_info);
|
| blink::WebLocalFrame* web_frame = render_frame_->GetWebFrame();
|
| for (const blink::WebString& css : css_sources)
|
| web_frame->document().insertStyleSheet(css);
|
|
|