OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/user_script_slave.h" | 5 #include "chrome/renderer/user_script_slave.h" |
6 | 6 |
7 #include "app/resource_bundle.h" | 7 #include "app/resource_bundle.h" |
8 #include "base/histogram.h" | 8 #include "base/histogram.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/perftimer.h" | 10 #include "base/perftimer.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 "chrome.self.onConnect = chrome.extension.onConnect;"; | 35 "chrome.self.onConnect = chrome.extension.onConnect;"; |
36 | 36 |
37 UserScriptSlave::UserScriptSlave() | 37 UserScriptSlave::UserScriptSlave() |
38 : shared_memory_(NULL), | 38 : shared_memory_(NULL), |
39 script_deleter_(&scripts_), | 39 script_deleter_(&scripts_), |
40 user_script_start_line_(0) { | 40 user_script_start_line_(0) { |
41 api_js_ = ResourceBundle::GetSharedInstance().GetRawDataResource( | 41 api_js_ = ResourceBundle::GetSharedInstance().GetRawDataResource( |
42 IDR_GREASEMONKEY_API_JS); | 42 IDR_GREASEMONKEY_API_JS); |
43 | 43 |
44 // Count the number of lines that will be injected before the user script. | 44 // Count the number of lines that will be injected before the user script. |
45 StringPiece::size_type pos = 0; | 45 base::StringPiece::size_type pos = 0; |
46 while ((pos = api_js_.find('\n', pos)) != StringPiece::npos) { | 46 while ((pos = api_js_.find('\n', pos)) != base::StringPiece::npos) { |
47 user_script_start_line_++; | 47 user_script_start_line_++; |
48 pos++; | 48 pos++; |
49 } | 49 } |
50 | 50 |
51 // NOTE: There is actually one extra line in the injected script because the | 51 // NOTE: There is actually one extra line in the injected script because the |
52 // function header includes a newline as well. But WebKit expects the | 52 // function header includes a newline as well. But WebKit expects the |
53 // numbering to be one-based, not zero-based, so actually *not* accounting for | 53 // numbering to be one-based, not zero-based, so actually *not* accounting for |
54 // this extra line ends us up with the right offset. | 54 // this extra line ends us up with the right offset. |
55 } | 55 } |
56 | 56 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 script->Unpickle(pickle, &iter); | 88 script->Unpickle(pickle, &iter); |
89 | 89 |
90 // Note that this is a pointer into shared memory. We don't own it. It gets | 90 // Note that this is a pointer into shared memory. We don't own it. It gets |
91 // cleared up when the last renderer or browser process drops their | 91 // cleared up when the last renderer or browser process drops their |
92 // reference to the shared memory. | 92 // reference to the shared memory. |
93 for (size_t j = 0; j < script->js_scripts().size(); ++j) { | 93 for (size_t j = 0; j < script->js_scripts().size(); ++j) { |
94 const char* body = NULL; | 94 const char* body = NULL; |
95 int body_length = 0; | 95 int body_length = 0; |
96 CHECK(pickle.ReadData(&iter, &body, &body_length)); | 96 CHECK(pickle.ReadData(&iter, &body, &body_length)); |
97 script->js_scripts()[j].set_external_content( | 97 script->js_scripts()[j].set_external_content( |
98 StringPiece(body, body_length)); | 98 base::StringPiece(body, body_length)); |
99 } | 99 } |
100 for (size_t j = 0; j < script->css_scripts().size(); ++j) { | 100 for (size_t j = 0; j < script->css_scripts().size(); ++j) { |
101 const char* body = NULL; | 101 const char* body = NULL; |
102 int body_length = 0; | 102 int body_length = 0; |
103 CHECK(pickle.ReadData(&iter, &body, &body_length)); | 103 CHECK(pickle.ReadData(&iter, &body, &body_length)); |
104 script->css_scripts()[j].set_external_content( | 104 script->css_scripts()[j].set_external_content( |
105 StringPiece(body, body_length)); | 105 base::StringPiece(body, body_length)); |
106 } | 106 } |
107 } | 107 } |
108 | 108 |
109 return true; | 109 return true; |
110 } | 110 } |
111 | 111 |
112 bool UserScriptSlave::InjectScripts(WebFrame* frame, | 112 bool UserScriptSlave::InjectScripts(WebFrame* frame, |
113 UserScript::RunLocation location) { | 113 UserScript::RunLocation location) { |
114 // Don't bother if this is not a URL we inject script into. | 114 // Don't bother if this is not a URL we inject script into. |
115 if (!URLPattern::IsValidScheme(GURL(frame->url()).scheme())) | 115 if (!URLPattern::IsValidScheme(GURL(frame->url()).scheme())) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 HISTOGRAM_TIMES("UserScripts:DocStart:Time", timer.Elapsed()); | 173 HISTOGRAM_TIMES("UserScripts:DocStart:Time", timer.Elapsed()); |
174 } else { | 174 } else { |
175 HISTOGRAM_COUNTS_100("UserScripts:DocEnd:Count", num_matched); | 175 HISTOGRAM_COUNTS_100("UserScripts:DocEnd:Count", num_matched); |
176 HISTOGRAM_TIMES("UserScripts:DocEnd:Time", timer.Elapsed()); | 176 HISTOGRAM_TIMES("UserScripts:DocEnd:Time", timer.Elapsed()); |
177 } | 177 } |
178 | 178 |
179 LOG(INFO) << "Injected " << num_matched << " user scripts into " << | 179 LOG(INFO) << "Injected " << num_matched << " user scripts into " << |
180 frame->url().spec().data(); | 180 frame->url().spec().data(); |
181 return true; | 181 return true; |
182 } | 182 } |
OLD | NEW |