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

Unified Diff: extensions/renderer/user_script_set.cc

Issue 2278003002: Stop copying script contents for each RenderFrames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments from Devlin 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_set.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/user_script_set.cc
diff --git a/extensions/renderer/user_script_set.cc b/extensions/renderer/user_script_set.cc
index 5fd7ab8b28a367829c37239294efccafd442d1e8..cf10081267ea271bb22687c788d792d0f94c1b9b 100644
--- a/extensions/renderer/user_script_set.cc
+++ b/extensions/renderer/user_script_set.cc
@@ -31,6 +31,11 @@ namespace extensions {
namespace {
+// 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);";
+
GURL GetDocumentUrlForFrame(blink::WebLocalFrame* frame) {
GURL data_source_url = ScriptContext::GetDataSourceURLForFrame(frame);
if (!data_source_url.is_empty() && frame->isViewSourceModeEnabled()) {
@@ -113,6 +118,7 @@ bool UserScriptSet::UpdateUserScripts(base::SharedMemoryHandle shared_memory,
CHECK(iter.ReadUInt32(&num_scripts));
scripts_.clear();
+ script_sources_.clear();
scripts_.reserve(num_scripts);
for (uint32_t i = 0; i < num_scripts; ++i) {
std::unique_ptr<UserScript> script(new UserScript());
@@ -226,4 +232,46 @@ std::unique_ptr<ScriptInjection> UserScriptSet::GetInjectionForScript(
return injection;
}
+blink::WebString UserScriptSet::GetJsSource(const UserScript::File& file,
+ bool emulate_greasemonkey) {
+ const GURL& url = file.url();
+ std::map<GURL, blink::WebString>::iterator iter = script_sources_.find(url);
+ if (iter != script_sources_.end())
+ return iter->second;
+
+ base::StringPiece script_content = file.GetContent();
+ blink::WebString source;
+ if (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);
+ source = blink::WebString::fromUTF8(content);
+ } else {
+ source = blink::WebString::fromUTF8(script_content.data(),
+ script_content.length());
+ }
+ script_sources_[url] = source;
+ return source;
+}
+
+blink::WebString UserScriptSet::GetCssSource(const UserScript::File& file) {
+ const GURL& url = file.url();
+ std::map<GURL, blink::WebString>::iterator iter = script_sources_.find(url);
+ if (iter != script_sources_.end())
+ return iter->second;
+
+ base::StringPiece script_content = file.GetContent();
+ return script_sources_
+ .insert(std::make_pair(
+ url, blink::WebString::fromUTF8(script_content.data(),
+ script_content.length())))
+ .first->second;
+}
+
} // namespace extensions
« no previous file with comments | « extensions/renderer/user_script_set.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698