add details for unmatch header, bug DOCUMENT_START not work, add a flag for logging

This commit is contained in:
Carmelo Messina 2020-12-19 17:04:23 +01:00
parent 246a072ac6
commit 10a171ff5d

View file

@ -1,6 +1,6 @@
From: uazo <uazo@users.noreply.github.com>
Date: Fri, 18 Dec 2020 18:11:49 +0000
Subject: Experimental user scripts support (preview
Subject: Experimental user scripts support preview
---
chrome/android/BUILD.gn | 2 +
@ -10,9 +10,9 @@ Subject: Experimental user scripts support (preview
chrome/android/java_sources.gni | 3 +
chrome/android/proguard/main.flags | 7 +
chrome/browser/BUILD.gn | 5 +
chrome/browser/about_flags.cc | 5 +
chrome/browser/flag_descriptions.cc | 5 +
chrome/browser/flag_descriptions.h | 3 +
chrome/browser/about_flags.cc | 9 +
chrome/browser/flag_descriptions.cc | 10 +
chrome/browser/flag_descriptions.h | 5 +
chrome/browser/prefs/browser_prefs.cc | 2 +
...hrome_browser_main_extra_parts_profiles.cc | 4 +
chrome/browser/profiles/profile_manager.cc | 9 +
@ -42,8 +42,8 @@ Subject: Experimental user scripts support (preview
components/user_scripts/browser/BUILD.gn | 68 ++
.../user_scripts/browser/file_task_runner.cc | 40 +
.../user_scripts/browser/file_task_runner.h | 34 +
.../browser/user_script_loader.cc | 640 ++++++++++++++
.../user_scripts/browser/user_script_loader.h | 172 ++++
.../browser/user_script_loader.cc | 650 ++++++++++++++
.../user_scripts/browser/user_script_loader.h | 173 ++++
.../browser/user_script_pref_info.cc | 34 +
.../browser/user_script_pref_info.h | 58 ++
.../user_scripts/browser/user_script_prefs.cc | 241 ++++++
@ -63,12 +63,12 @@ Subject: Experimental user scripts support (preview
.../user_scripts/common/script_constants.h | 33 +
components/user_scripts/common/url_pattern.cc | 807 ++++++++++++++++++
components/user_scripts/common/url_pattern.h | 301 +++++++
.../user_scripts/common/url_pattern_set.cc | 327 +++++++
.../user_scripts/common/url_pattern_set.cc | 330 +++++++
.../user_scripts/common/url_pattern_set.h | 161 ++++
components/user_scripts/common/user_script.cc | 339 ++++++++
components/user_scripts/common/user_script.cc | 351 ++++++++
components/user_scripts/common/user_script.h | 371 ++++++++
.../common/user_scripts_features.cc | 31 +
.../common/user_scripts_features.h | 34 +
.../common/user_scripts_features.cc | 34 +
.../common/user_scripts_features.h | 35 +
components/user_scripts/common/view_type.cc | 39 +
components/user_scripts/common/view_type.h | 48 ++
components/user_scripts/renderer/BUILD.gn | 67 ++
@ -84,27 +84,27 @@ Subject: Experimental user scripts support (preview
.../user_scripts/renderer/script_injection.h | 160 ++++
.../renderer/script_injection_callback.cc | 26 +
.../renderer/script_injection_callback.h | 38 +
.../renderer/script_injection_manager.cc | 408 +++++++++
.../renderer/script_injection_manager.cc | 407 +++++++++
.../renderer/script_injection_manager.h | 102 +++
.../user_scripts/renderer/script_injector.h | 96 +++
.../user_scripts/renderer/scripts_run_info.cc | 31 +
.../user_scripts/renderer/scripts_run_info.h | 70 ++
.../renderer/user_script_injector.cc | 229 +++++
.../renderer/user_script_injector.h | 86 ++
.../user_scripts/renderer/user_script_set.cc | 240 ++++++
.../user_scripts/renderer/user_script_set.cc | 260 ++++++
.../user_scripts/renderer/user_script_set.h | 102 +++
.../renderer/user_script_set_manager.cc | 75 ++
.../renderer/user_script_set_manager.cc | 77 ++
.../renderer/user_script_set_manager.h | 62 ++
.../renderer/user_scripts_dispatcher.cc | 36 +
.../renderer/user_scripts_dispatcher.h | 48 ++
.../renderer/user_scripts_renderer_client.cc | 75 ++
.../renderer/user_scripts_renderer_client.cc | 76 ++
.../renderer/user_scripts_renderer_client.h | 33 +
.../renderer/web_ui_injection_host.cc | 26 +
.../renderer/web_ui_injection_host.h | 28 +
.../strings/userscripts_strings.grdp | 50 ++
tools/gritsettings/resource_ids.spec | 3 +
.../chromium/ui/base/SelectFileDialog.java | 3 +-
101 files changed, 8825 insertions(+), 4 deletions(-)
101 files changed, 8888 insertions(+), 4 deletions(-)
create mode 100755 components/user_scripts/android/BUILD.gn
create mode 100755 components/user_scripts/android/java/res/drawable-hdpi/userscript_off.png
create mode 100755 components/user_scripts/android/java/res/drawable-hdpi/userscript_on.png
@ -329,13 +329,17 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
#include "components/version_info/version_info.h"
#include "components/viz/common/features.h"
#include "components/viz/common/switches.h"
@@ -6257,6 +6258,10 @@ const FeatureEntry kFeatureEntries[] = {
@@ -6257,6 +6258,14 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(features::kUserDataSnapshot)},
#endif
+ {"enable-user-scripts", flag_descriptions::kEnableUserScriptsName,
+ flag_descriptions::kEnableUserScriptsDescription, kOsDesktop | kOsAndroid,
+ FEATURE_VALUE_TYPE(user_scripts::features::kEnableUserScripts)},
+
+ {"enable-user-scripts-log", flag_descriptions::kEnableLoggingUserScriptsName,
+ flag_descriptions::kEnableLoggingUserScriptsDescription, kOsDesktop | kOsAndroid,
+ FEATURE_VALUE_TYPE(user_scripts::features::kEnableLoggingUserScripts)},
+
#if defined(OS_WIN)
{"run-video-capture-service-in-browser",
@ -343,7 +347,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -4687,6 +4687,11 @@ const char kUserDataSnapshotDescription[] =
@@ -4687,6 +4687,16 @@ const char kUserDataSnapshotDescription[] =
"update and restoring them after a version rollback.";
#endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
@ -351,6 +355,11 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
+const char kEnableUserScriptsDescription[] =
+ "Enables experimental support on user scripts. "
+ "Please report back any bug.";
+
+const char kEnableLoggingUserScriptsName[] = "Enable logging user scripts component";
+const char kEnableLoggingUserScriptsDescription[] =
+ "Enables logging for troubleshooting feature. "
+ "Please report back any bug.";
+
#if defined(OS_WIN) || defined(OS_CHROMEOS)
const char kWebShareName[] = "Web Share";
@ -358,12 +367,14 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -2735,6 +2735,9 @@ extern const char kUserDataSnapshotName[];
@@ -2735,6 +2735,11 @@ extern const char kUserDataSnapshotName[];
extern const char kUserDataSnapshotDescription[];
#endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+extern const char kEnableUserScriptsName[];
+extern const char kEnableUserScriptsDescription[];
+extern const char kEnableLoggingUserScriptsName[];
+extern const char kEnableLoggingUserScriptsDescription[];
+
#if defined(OS_WIN) || defined(OS_CHROMEOS)
extern const char kWebShareName[];
@ -2149,7 +2160,7 @@ diff --git a/components/user_scripts/browser/user_script_loader.cc b/components/
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/browser/user_script_loader.cc
@@ -0,0 +1,640 @@
@@ -0,0 +1,650 @@
+/*
+ This file is part of Bromite.
+
@ -2250,7 +2261,8 @@ new file mode 100755
+
+// static
+bool UserScriptLoader::ParseMetadataHeader(const base::StringPiece& script_text,
+ std::unique_ptr<UserScript>& script) {
+ std::unique_ptr<UserScript>& script,
+ std::string& error_message) {
+ // http://wiki.greasespot.net/Metadata_block
+ base::StringPiece line;
+ size_t line_start = 0;
@ -2311,13 +2323,17 @@ new file mode 100755
+ script->set_description(value);
+ } else if (GetDeclarationValue(line, kMatchDeclaration, &value)) {
+ URLPattern pattern(UserScript::ValidUserScriptSchemes());
+ if (URLPattern::ParseResult::kSuccess != pattern.Parse(value))
+ if (URLPattern::ParseResult::kSuccess != pattern.Parse(value)) {
+ error_message = "Invalid UserScript Schema " + value;
+ return false;
+ }
+ script->add_url_pattern(pattern);
+ } else if (GetDeclarationValue(line, kExcludeMatchDeclaration, &value)) {
+ URLPattern exclude(UserScript::ValidUserScriptSchemes());
+ if (URLPattern::ParseResult::kSuccess != exclude.Parse(value))
+ if (URLPattern::ParseResult::kSuccess != exclude.Parse(value)) {
+ error_message = "Invalid UserScript Schema " + value;
+ return false;
+ }
+ script->add_exclude_url_pattern(exclude);
+ } else if (GetDeclarationValue(line, kRunAtDeclaration, &value)) {
+ if (value == kRunAtDocumentStartValue)
@ -2326,8 +2342,10 @@ new file mode 100755
+ script->set_run_location(UserScript::DOCUMENT_END);
+ else if (value == kRunAtDocumentIdleValue)
+ script->set_run_location(UserScript::DOCUMENT_IDLE);
+ else
+ else {
+ error_message = "Invalid RunAtDeclaration " + value;
+ return false;
+ }
+ }
+
+ // TODO(aa): Handle more types of metadata.
@ -2383,8 +2401,9 @@ new file mode 100755
+ return false;
+ }
+
+ if (!UserScriptLoader::ParseMetadataHeader(content, script)) {
+ *error = base::ASCIIToUTF16("Invalid script header.");
+ std::string detailed_error;
+ if (!UserScriptLoader::ParseMetadataHeader(content, script, detailed_error)) {
+ *error = base::ASCIIToUTF16("Invalid script header. " + detailed_error);
+ return false;
+ }
+
@ -2392,11 +2411,13 @@ new file mode 100755
+ // this value is used in ui to discriminate scripts
+ script->set_key(script_key);
+
+ script->set_match_origin_as_fallback(MatchOriginAsFallbackBehavior::kNever);
+
+ // remove unicode chars and set content into File
+ stripUnicode(content);
+ std::unique_ptr<UserScript::File> file(new UserScript::File());
+ file->set_content(content);
+ file->set_url(GURL("script.js")); // name doesn't matter
+ file->set_url(GURL(/*script_key*/ "script.js")); // name doesn't matter
+
+ // create SHA256 of file
+ char raw[crypto::kSHA256Length] = {0};
@ -2794,7 +2815,7 @@ diff --git a/components/user_scripts/browser/user_script_loader.h b/components/u
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/browser/user_script_loader.h
@@ -0,0 +1,172 @@
@@ -0,0 +1,173 @@
+/*
+ This file is part of Bromite.
+
@ -2873,7 +2894,8 @@ new file mode 100755
+
+ // Parses the includes out of |script| and returns them in |includes|.
+ static bool ParseMetadataHeader(const base::StringPiece& script_text,
+ std::unique_ptr<UserScript>& script);
+ std::unique_ptr<UserScript>& script,
+ std::string& error_message);
+
+ UserScriptLoader(content::BrowserContext* browser_context,
+ UserScriptsPrefs* prefs);
@ -5107,7 +5129,7 @@ diff --git a/components/user_scripts/common/url_pattern_set.cc b/components/user
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/common/url_pattern_set.cc
@@ -0,0 +1,327 @@
@@ -0,0 +1,330 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@ -5125,6 +5147,7 @@ new file mode 100755
+#include "url/gurl.h"
+#include "url/origin.h"
+#include "url/url_constants.h"
+#include "user_scripts_features.h"
+
+namespace user_scripts {
+
@ -5332,17 +5355,19 @@ new file mode 100755
+}
+
+bool URLPatternSet::MatchesURL(const GURL& url) const {
+ // LOG(INFO) << "---URLPatternSet::MatchesURL " << url.spec();
+
+ for (auto pattern = patterns_.cbegin(); pattern != patterns_.cend();
+ ++pattern) {
+ if (pattern->MatchesURL(url)) {
+ // LOG(INFO) << "---URLPatternSet::MatchesURL true";
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: URLPatternSet::MatchesURL true " << url.spec();
+
+ return true;
+ }
+ }
+
+ // LOG(INFO) << "---URLPatternSet::MatchesURL false";
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: URLPatternSet::MatchesURL false " << url.spec();
+
+ return false;
+}
+
@ -5605,7 +5630,7 @@ diff --git a/components/user_scripts/common/user_script.cc b/components/user_scr
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/common/user_script.cc
@@ -0,0 +1,339 @@
@@ -0,0 +1,351 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@ -5623,7 +5648,7 @@ new file mode 100755
+#include "base/pickle.h"
+#include "base/strings/pattern.h"
+#include "base/strings/string_util.h"
+//#include "switches.h"
+#include "user_scripts_features.h"
+
+namespace {
+
@ -5705,38 +5730,38 @@ new file mode 100755
+UserScript::~UserScript() = default;
+
+// static.
+std::unique_ptr<UserScript> UserScript::CopyMetadataFrom(
+ const UserScript& other) {
+ std::unique_ptr<UserScript> script(new UserScript());
+ script->run_location_ = other.run_location_;
+ script->name_space_ = other.name_space_;
+ script->name_ = other.name_;
+ script->description_ = other.description_;
+ script->version_ = other.version_;
+ script->globs_ = other.globs_;
+ script->exclude_globs_ = other.exclude_globs_;
+ script->url_set_ = other.url_set_.Clone();
+ script->exclude_url_set_ = other.exclude_url_set_.Clone();
+// std::unique_ptr<UserScript> UserScript::CopyMetadataFrom(
+// const UserScript& other) {
+// std::unique_ptr<UserScript> script(new UserScript());
+// script->run_location_ = other.run_location_;
+// script->name_space_ = other.name_space_;
+// script->name_ = other.name_;
+// script->description_ = other.description_;
+// script->version_ = other.version_;
+// script->globs_ = other.globs_;
+// script->exclude_globs_ = other.exclude_globs_;
+// script->url_set_ = other.url_set_.Clone();
+// script->exclude_url_set_ = other.exclude_url_set_.Clone();
+
+ // Note: File content is not copied.
+ for (const std::unique_ptr<File>& file : other.js_scripts()) {
+ std::unique_ptr<File> file_copy(new File(*file));
+ script->js_scripts_.push_back(std::move(file_copy));
+ }
+ for (const std::unique_ptr<File>& file : other.css_scripts()) {
+ std::unique_ptr<File> file_copy(new File(*file));
+ script->css_scripts_.push_back(std::move(file_copy));
+ }
+ script->host_id_ = other.host_id_;
+ script->consumer_instance_type_ = other.consumer_instance_type_;
+ script->user_script_id_ = other.user_script_id_;
+ script->emulate_greasemonkey_ = other.emulate_greasemonkey_;
+ script->match_all_frames_ = other.match_all_frames_;
+ script->match_origin_as_fallback_ = other.match_origin_as_fallback_;
+ script->incognito_enabled_ = other.incognito_enabled_;
+// // Note: File content is not copied.
+// for (const std::unique_ptr<File>& file : other.js_scripts()) {
+// std::unique_ptr<File> file_copy(new File(*file));
+// script->js_scripts_.push_back(std::move(file_copy));
+// }
+// for (const std::unique_ptr<File>& file : other.css_scripts()) {
+// std::unique_ptr<File> file_copy(new File(*file));
+// script->css_scripts_.push_back(std::move(file_copy));
+// }
+// script->host_id_ = other.host_id_;
+// script->consumer_instance_type_ = other.consumer_instance_type_;
+// script->user_script_id_ = other.user_script_id_;
+// script->emulate_greasemonkey_ = other.emulate_greasemonkey_;
+// script->match_all_frames_ = other.match_all_frames_;
+// script->match_origin_as_fallback_ = other.match_origin_as_fallback_;
+// script->incognito_enabled_ = other.incognito_enabled_;
+
+ return script;
+}
+// return script;
+// }
+
+void UserScript::add_url_pattern(const URLPattern& pattern) {
+ url_set_.AddPattern(pattern);
@ -5748,23 +5773,35 @@ new file mode 100755
+
+bool UserScript::MatchesURL(const GURL& url) const {
+ if (!url_set_.is_empty()) {
+ if (!url_set_.MatchesURL(url))
+ if (!url_set_.MatchesURL(url)) {
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: No Match for url_set";
+ return false;
+ }
+ }
+
+ if (!exclude_url_set_.is_empty()) {
+ if (exclude_url_set_.MatchesURL(url))
+ if (exclude_url_set_.MatchesURL(url)) {
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: No Match for exclude_url_set";
+ return false;
+ }
+ }
+
+ if (!globs_.empty()) {
+ if (!UrlMatchesGlobs(&globs_, url))
+ if (!UrlMatchesGlobs(&globs_, url)) {
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: No Match for globs";
+ return false;
+ }
+ }
+
+ if (!exclude_globs_.empty()) {
+ if (UrlMatchesGlobs(&exclude_globs_, url))
+ if (UrlMatchesGlobs(&exclude_globs_, url)) {
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: No Match for exclude_globs";
+ return false;
+ }
+ }
+
+ return true;
@ -6098,7 +6135,7 @@ new file mode 100755
+ ~UserScript();
+
+ // Performs a copy of all fields except file contents.
+ static std::unique_ptr<UserScript> CopyMetadataFrom(const UserScript& other);
+ // static std::unique_ptr<UserScript> CopyMetadataFrom(const UserScript& other);
+
+ const std::string& name_space() const { return name_space_; }
+ void set_name_space(const std::string& name_space) {
@ -6325,7 +6362,7 @@ diff --git a/components/user_scripts/common/user_scripts_features.cc b/component
new file mode 100644
--- /dev/null
+++ b/components/user_scripts/common/user_scripts_features.cc
@@ -0,0 +1,31 @@
@@ -0,0 +1,34 @@
+/*
+ This file is part of Bromite.
+
@ -6353,6 +6390,9 @@ new file mode 100644
+
+const base::Feature kEnableUserScripts = {"EnableUserScripts",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kEnableLoggingUserScripts =
+ {"EnableLoggingUserScripts",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+}
+
@ -6362,7 +6402,7 @@ diff --git a/components/user_scripts/common/user_scripts_features.h b/components
new file mode 100644
--- /dev/null
+++ b/components/user_scripts/common/user_scripts_features.h
@@ -0,0 +1,34 @@
@@ -0,0 +1,35 @@
+/*
+ This file is part of Bromite.
+
@ -6392,6 +6432,7 @@ new file mode 100644
+
+namespace features {
+ extern const base::Feature kEnableUserScripts;
+ extern const base::Feature kEnableLoggingUserScripts;
+}
+
+}
@ -7478,11 +7519,11 @@ new file mode 100755
+ complete_ = did_inject_js_ || !should_inject_js;
+
+ if (complete_) {
+ // LOG(INFO) << "---ScriptInjection::Inject complete";
+ LOG(INFO) << "---ScriptInjection::Inject complete";
+ injector_->OnInjectionComplete(std::move(execution_result_), run_location_,
+ render_frame_);
+ } else {
+ // LOG(INFO) << "---ScriptInjection::Inject INcomplete";
+ LOG(INFO) << "---ScriptInjection::Inject INcomplete";
+ ++scripts_run_info->num_blocking_js;
+ }
+
@ -7826,7 +7867,7 @@ diff --git a/components/user_scripts/renderer/script_injection_manager.cc b/comp
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/renderer/script_injection_manager.cc
@@ -0,0 +1,408 @@
@@ -0,0 +1,407 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@ -7858,6 +7899,7 @@ new file mode 100755
+#include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/public/web/web_view.h"
+#include "url/gurl.h"
+#include "../common/user_scripts_features.h"
+
+namespace user_scripts {
+
@ -7945,7 +7987,8 @@ new file mode 100755
+}
+
+void ScriptInjectionManager::RFOHelper::DidCreateDocumentElement() {
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::DidCreateDocumentElement";
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: DidCreateDocumentElement -> DOCUMENT_START";
+
+ ExtensionFrameHelper::Get(render_frame())
+ ->ScheduleAtDocumentStart(
@ -7979,7 +8022,9 @@ new file mode 100755
+}
+
+void ScriptInjectionManager::RFOHelper::DidFinishDocumentLoad() {
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::DidFinishDocumentLoad";
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: DidFinishDocumentLoad -> DOCUMENT_END";
+
+ DCHECK(content::RenderThread::Get());
+ ExtensionFrameHelper::Get(render_frame())
+ ->ScheduleAtDocumentEnd(
@ -8007,7 +8052,6 @@ new file mode 100755
+ ->ScheduleAtDocumentIdle(
+ base::Bind(&ScriptInjectionManager::RFOHelper::RunIdle,
+ weak_factory_.GetWeakPtr()));
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::DidFinishDocumentLoad exit";
+}
+
+void ScriptInjectionManager::RFOHelper::WillDetach() {
@ -8024,7 +8068,6 @@ new file mode 100755
+}
+
+void ScriptInjectionManager::RFOHelper::OnStop() {
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::OnStop";
+ // If the navigation request fails (e.g. 204/205/downloads), notify the
+ // extension to avoid keeping the frame in a START state indefinitely which
+ // leads to deadlocks.
@ -8032,21 +8075,19 @@ new file mode 100755
+}
+
+void ScriptInjectionManager::RFOHelper::RunIdle() {
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::RunIdle";
+ // Only notify the manager if the frame hasn't already had idle run since the
+ // task to RunIdle() was posted.
+ if (should_run_idle_) {
+ should_run_idle_ = false;
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: RunIdle -> DOCUMENT_IDLE";
+ manager_->StartInjectScripts(render_frame(), UserScript::DOCUMENT_IDLE);
+ }
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::RunIdle exit";
+}
+
+void ScriptInjectionManager::RFOHelper::StartInjectScripts(
+ UserScript::RunLocation run_location) {
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::StartInjectScripts";
+ manager_->StartInjectScripts(render_frame(), run_location);
+ // LOG(INFO) << "---ScriptInjectionManager::RFOHelper::StartInjectScripts exit";
+}
+
+void ScriptInjectionManager::RFOHelper::InvalidateAndResetFrame(
@ -8069,7 +8110,6 @@ new file mode 100755
+ : user_script_set_manager_(user_script_set_manager),
+ user_script_set_manager_observer_(this) {
+ user_script_set_manager_observer_.Add(user_script_set_manager_);
+ // LOG(INFO) << "---ScriptInjectionManager::ScriptInjectionManager";
+}
+
+ScriptInjectionManager::~ScriptInjectionManager() {
@ -8883,7 +8923,7 @@ diff --git a/components/user_scripts/renderer/user_script_set.cc b/components/us
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/renderer/user_script_set.cc
@@ -0,0 +1,240 @@
@@ -0,0 +1,260 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@ -8909,6 +8949,7 @@ new file mode 100755
+#include "third_party/blink/public/web/web_document.h"
+#include "third_party/blink/public/web/web_local_frame.h"
+#include "url/gurl.h"
+#include "../common/user_scripts_features.h"
+
+namespace user_scripts {
+
@ -9063,8 +9104,12 @@ new file mode 100755
+ web_frame, document_url, script->match_origin_as_fallback());
+
+ bool is_subframe = web_frame->Parent();
+ if (!script->MatchesDocument(effective_document_url, is_subframe))
+ if (!script->MatchesDocument(effective_document_url, is_subframe)) {
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: No Match name=" << script->name() << " " <<
+ "url=" << effective_document_url.spec();
+ return injection;
+ }
+
+ std::unique_ptr<ScriptInjector> injector(
+ new UserScriptInjector(script, this));
@ -9077,6 +9122,18 @@ new file mode 100755
+ injection.reset(new ScriptInjection(std::move(injector), render_frame,
+ std::move(injection_host), run_location,
+ log_activity));
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: Match name=" << script->name() << " " <<
+ "url=" << effective_document_url.spec();
+ } else {
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts)) {
+ if (script->run_location() != run_location)
+ LOG(INFO) << "UserScripts: wrong run location current " << run_location << " " <<
+ "expeted " << script->run_location();
+ else
+ LOG(INFO) << "UserScripts: Match but no script name=" << script->name() << " " <<
+ "url=" << effective_document_url.spec();
+ }
+ }
+ return injection;
+}
@ -9099,11 +9156,14 @@ new file mode 100755
+ std::string content =
+ base::StrCat({kUserScriptHead, script_content, kUserScriptTail});
+ source = blink::WebString::FromUTF8(content);
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: Injecting w/greasemonkey " << file.url();
+ // LOG(INFO) << "---UserScriptSet::GetJsSource emu " << script_content;
+ } else {
+ source = blink::WebString::FromUTF8(script_content.data(),
+ script_content.length());
+ // LOG(INFO) << "Injecting user script " << file.Ascii();
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: Injecting " << file.url();
+ }
+ script_sources_[url] = source;
+ return source;
@ -9235,13 +9295,14 @@ diff --git a/components/user_scripts/renderer/user_script_set_manager.cc b/compo
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/renderer/user_script_set_manager.cc
@@ -0,0 +1,75 @@
@@ -0,0 +1,77 @@
+#include "user_script_set_manager.h"
+
+#include "base/logging.h"
+#include "content/public/renderer/render_thread.h"
+#include "../common/host_id.h"
+#include "../common/extension_messages.h"
+#include "../common/user_scripts_features.h"
+#include "user_script_set.h"
+
+namespace user_scripts {
@ -9277,7 +9338,8 @@ new file mode 100755
+ int tab_id,
+ UserScript::RunLocation run_location) {
+
+ // LOG(INFO) << "---UserScriptSetManager::GetAllInjections";
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: GetAllInjections";
+
+ // static_scripts_ is UserScriptSet
+ static_scripts_.GetInjections(injections, render_frame, tab_id, run_location,
@ -9480,7 +9542,7 @@ diff --git a/components/user_scripts/renderer/user_scripts_renderer_client.cc b/
new file mode 100755
--- /dev/null
+++ b/components/user_scripts/renderer/user_scripts_renderer_client.cc
@@ -0,0 +1,75 @@
@@ -0,0 +1,76 @@
+#include "user_scripts_renderer_client.h"
+
+#include <memory>
@ -9512,7 +9574,8 @@ new file mode 100755
+}
+
+void UserScriptsRendererClient::RenderThreadStarted() {
+ // LOG(INFO) << "---UserScriptsRendererClient::RenderThreadStarted";
+ if (base::FeatureList::IsEnabled(features::kEnableLoggingUserScripts))
+ LOG(INFO) << "UserScripts: RenderThreadStarted";
+ content::RenderThread* thread = content::RenderThread::Get();
+
+ dispatcher_ = std::make_unique<UserScriptsDispatcher>();