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

Unified Diff: chrome/renderer/user_script_slave.cc

Issue 340057: Add first-class support for user scripts (Closed)
Patch Set: newness Created 11 years, 1 month 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
Index: chrome/renderer/user_script_slave.cc
diff --git a/chrome/renderer/user_script_slave.cc b/chrome/renderer/user_script_slave.cc
index b71c7a8e44230b299f61e883ad903d97adae8996..473cda85626cba324f092e4ff98acfb11513a03c 100644
--- a/chrome/renderer/user_script_slave.cc
+++ b/chrome/renderer/user_script_slave.cc
@@ -51,22 +51,9 @@ int UserScriptSlave::GetIsolatedWorldId(const std::string& extension_id) {
UserScriptSlave::UserScriptSlave()
: shared_memory_(NULL),
- script_deleter_(&scripts_),
- user_script_start_line_(0) {
+ script_deleter_(&scripts_) {
api_js_ = ResourceBundle::GetSharedInstance().GetRawDataResource(
IDR_GREASEMONKEY_API_JS);
-
- // Count the number of lines that will be injected before the user script.
- base::StringPiece::size_type pos = 0;
- while ((pos = api_js_.find('\n', pos)) != base::StringPiece::npos) {
- user_script_start_line_++;
- pos++;
- }
-
- // NOTE: There is actually one extra line in the injected script because the
- // function header includes a newline as well. But WebKit expects the
- // numbering to be one-based, not zero-based, so actually *not* accounting for
- // this extra line ends us up with the right offset.
}
bool UserScriptSlave::UpdateScripts(base::SharedMemoryHandle shared_memory) {
@@ -178,13 +165,16 @@ bool UserScriptSlave::InjectScripts(WebFrame* frame,
if (!sources.empty()) {
int isolated_world_id = 0;
- if (script->is_standalone()) {
- // For standalone scripts, we try to emulate the Greasemonkey API.
+ // Emulate Greasemonkey API for scripts that were converted to extensions
+ // and "standalone" user scripts.
+ if (script->is_standalone() || script->emulate_greasemonkey()) {
sources.insert(sources.begin(),
WebScriptSource(WebString::fromUTF8(api_js_.as_string())));
- } else {
- // Setup chrome.self to contain an Extension object with the correct
- // ID.
+ }
+
+ // Setup chrome.self to contain an Extension object with the correct
+ // ID.
+ if (!script->extension_id().empty()) {
InsertInitExtensionCode(&sources, script->extension_id());
isolated_world_id = GetIsolatedWorldId(script->extension_id());
}

Powered by Google App Engine
This is Rietveld 408576698