Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: extensions/renderer/user_script_injector.cc

Issue 2325053002: Revert of Stop copying script contents for each RenderFrames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/user_script_injector.h ('k') | extensions/renderer/user_script_set.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/user_script_injector.cc
diff --git a/extensions/renderer/user_script_injector.cc b/extensions/renderer/user_script_injector.cc
index 5800edf024370586840b842deddb856933b65c09..8ae1c164cb64e2e8b8f3d268065b2871dd103e72 100644
--- a/extensions/renderer/user_script_injector.cc
+++ b/extensions/renderer/user_script_injector.cc
@@ -44,6 +44,11 @@
using RoutingInfoMap = std::map<RoutingInfoKey, bool>;
+// These two strings are injected before and after the Greasemonkey API and
+// user script to wrap it in an anonymous scope.
+const char kUserScriptHead[] = "(function (unsafeWindow) {\n";
+const char kUserScriptTail[] = "\n})(window);";
+
// A map records whether a given |script_id| from a webview-added user script
// is allowed to inject on the render of given |routing_id|.
// Once a script is added, the decision of whether or not allowed to inject
@@ -86,7 +91,6 @@
UserScriptSet* script_list,
bool is_declarative)
: script_(script),
- user_script_set_(script_list),
script_id_(script_->id()),
host_id_(script_->host_id()),
is_declarative_(is_declarative),
@@ -202,19 +206,35 @@
DCHECK_EQ(script_->run_location(), run_location);
const UserScript::FileList& js_scripts = script_->js_scripts();
- sources.reserve(js_scripts.size() +
- (script_->emulate_greasemonkey() ? 1 : 0));
+ sources.reserve(js_scripts.size());
+ for (const std::unique_ptr<UserScript::File>& file : js_scripts) {
+ base::StringPiece script_content = file->GetContent();
+ blink::WebString source;
+ if (script_->emulate_greasemonkey()) {
+ // We add this dumb function wrapper for user scripts to emulate what
+ // Greasemonkey does. |script_content| becomes:
+ // concat(kUserScriptHead, script_content, kUserScriptTail).
+ std::string content;
+ content.reserve(strlen(kUserScriptHead) + script_content.length() +
+ strlen(kUserScriptTail));
+ content.append(kUserScriptHead);
+ script_content.AppendToString(&content);
+ content.append(kUserScriptTail);
+ // TODO(lazyboy): |content| is copied to |source|, should be avoided.
+ // Investigate if we can leverage WebString's cheap copying mechanism
+ // somehow.
+ source = blink::WebString::fromUTF8(content);
+ } else {
+ source = blink::WebString::fromUTF8(script_content.data(),
+ script_content.length());
+ }
+ sources.push_back(blink::WebScriptSource(source, file->url()));
+ }
// Emulate Greasemonkey API for scripts that were converted to extension
// user scripts.
if (script_->emulate_greasemonkey())
- sources.push_back(g_greasemonkey_api.Get().GetSource());
-
- for (const std::unique_ptr<UserScript::File>& file : js_scripts) {
- sources.push_back(blink::WebScriptSource(
- user_script_set_->GetJsSource(*file, script_->emulate_greasemonkey()),
- file->url()));
- }
+ sources.insert(sources.begin(), g_greasemonkey_api.Get().GetSource());
return sources;
}
@@ -229,8 +249,14 @@
const UserScript::FileList& css_scripts = script_->css_scripts();
sources.reserve(css_scripts.size());
- for (const std::unique_ptr<UserScript::File>& file : script_->css_scripts())
- sources.push_back(user_script_set_->GetCssSource(*file));
+ for (const std::unique_ptr<UserScript::File>& file : script_->css_scripts()) {
+ // TODO(lazyboy): |css_content| string is copied into blink::WebString for
+ // every frame in the current renderer process. Avoid the copy, possibly by
+ // only performing the copy once.
+ base::StringPiece css_content = file->GetContent();
+ sources.push_back(
+ blink::WebString::fromUTF8(css_content.data(), css_content.length()));
+ }
return sources;
}
« no previous file with comments | « extensions/renderer/user_script_injector.h ('k') | extensions/renderer/user_script_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698