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

Unified Diff: trunk/src/extensions/renderer/user_script_slave.cc

Issue 307933008: Revert 273866 "Block content scripts from executing until user g..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 7 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 | « trunk/src/extensions/renderer/user_script_slave.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trunk/src/extensions/renderer/user_script_slave.cc
===================================================================
--- trunk/src/extensions/renderer/user_script_slave.cc (revision 274101)
+++ trunk/src/extensions/renderer/user_script_slave.cc (working copy)
@@ -31,6 +31,7 @@
using blink::WebSecurityOrigin;
using blink::WebSecurityPolicy;
using blink::WebString;
+using blink::WebView;
using content::RenderThread;
namespace extensions {
@@ -101,9 +102,9 @@
return extensions_->GetByID(extension_id);
}
-bool UserScriptSlave::UpdateScripts(
- base::SharedMemoryHandle shared_memory,
- const std::set<std::string>& changed_extensions) {
+bool UserScriptSlave::UpdateScripts(base::SharedMemoryHandle shared_memory) {
+ script_injections_.clear();
+
bool only_inject_incognito =
ExtensionsRendererClient::Get()->IsIncognitoProcess();
@@ -130,26 +131,6 @@
PickleIterator iter(pickle);
CHECK(pickle.ReadUInt64(&iter, &num_scripts));
- // If we pass no explicit extension ids, we should refresh all extensions.
- bool include_all_extensions = changed_extensions.empty();
-
- // If we include all extensions, then we clear the script injections and
- // start from scratch. If not, then clear only the scripts for extension ids
- // that we are updating. This is important to maintain pending script
- // injection state for each ScriptInjection.
- if (include_all_extensions) {
- script_injections_.clear();
- } else {
- for (ScopedVector<ScriptInjection>::iterator iter =
- script_injections_.begin();
- iter != script_injections_.end();) {
- if (changed_extensions.count((*iter)->extension_id()) > 0)
- iter = script_injections_.erase(iter);
- else
- ++iter;
- }
- }
-
script_injections_.reserve(num_scripts);
for (uint64 i = 0; i < num_scripts; ++i) {
scoped_ptr<UserScript> script(new UserScript());
@@ -173,15 +154,8 @@
base::StringPiece(body, body_length));
}
- // Don't add the script if it shouldn't shouldn't run in this tab, or if
- // we don't need to reload that extension.
- // It's a shame we don't catch this sooner, but since we lump all the user
- // scripts together, we can't skip parsing any.
- if ((only_inject_incognito && !script->is_incognito_enabled()) ||
- (!include_all_extensions &&
- changed_extensions.count(script->extension_id()) == 0)) {
- continue;
- }
+ if (only_inject_incognito && !script->is_incognito_enabled())
+ continue; // This script shouldn't run in an incognito tab.
script_injections_.push_back(new ScriptInjection(script.Pass(), this));
}
@@ -195,44 +169,38 @@
if (document_url.is_empty())
return;
+ content::RenderView* top_render_view =
+ content::RenderView::FromWebView(frame->top()->view());
+
ScriptInjection::ScriptsRunInfo scripts_run_info;
for (ScopedVector<ScriptInjection>::const_iterator iter =
script_injections_.begin();
iter != script_injections_.end();
++iter) {
- (*iter)->InjectIfAllowed(frame, location, document_url, &scripts_run_info);
- }
+ ScriptInjection* injection = *iter;
+ if (!injection->WantsToRun(frame, location, document_url))
+ continue;
- LogScriptsRun(frame, location, scripts_run_info);
-}
+ const Extension* extension = GetExtension(injection->extension_id());
+ DCHECK(extension);
-void UserScriptSlave::OnContentScriptGrantedPermission(
- content::RenderView* render_view, int request_id) {
- ScriptInjection::ScriptsRunInfo run_info;
- blink::WebFrame* frame = NULL;
- // Notify the injections that a request to inject has been granted.
- for (ScopedVector<ScriptInjection>::iterator iter =
- script_injections_.begin();
- iter != script_injections_.end();
- ++iter) {
- if ((*iter)->NotifyScriptPermitted(request_id,
- render_view,
- &run_info,
- &frame)) {
- DCHECK(frame);
- LogScriptsRun(frame, UserScript::RUN_DEFERRED, run_info);
- break;
+ if (PermissionsData::RequiresActionForScriptExecution(
+ extension,
+ ExtensionHelper::Get(top_render_view)->tab_id(),
+ document_url)) {
+ // TODO(rdevlin.cronin): Right now, this is just a notification, but soon
+ // we should block without user consent.
+ top_render_view->Send(
+ new ExtensionHostMsg_NotifyExtensionScriptExecution(
+ top_render_view->GetRoutingID(),
+ extension->id(),
+ top_render_view->GetPageId()));
}
- }
-}
-void UserScriptSlave::FrameDetached(blink::WebFrame* frame) {
- for (ScopedVector<ScriptInjection>::iterator iter =
- script_injections_.begin();
- iter != script_injections_.end();
- ++iter) {
- (*iter)->FrameDetached(frame);
+ injection->Inject(frame, location, &scripts_run_info);
}
+
+ LogScriptsRun(frame, location, scripts_run_info);
}
void UserScriptSlave::LogScriptsRun(
@@ -250,33 +218,22 @@
ScriptContext::GetDataSourceURLForFrame(frame)));
}
- switch (location) {
- case UserScript::DOCUMENT_START:
- UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_CssCount",
- info.num_css);
- UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_ScriptCount",
- info.num_js);
- if (info.num_css || info.num_js)
- UMA_HISTOGRAM_TIMES("Extensions.InjectStart_Time",
- info.timer.Elapsed());
- break;
- case UserScript::DOCUMENT_END:
- UMA_HISTOGRAM_COUNTS_100("Extensions.InjectEnd_ScriptCount", info.num_js);
- if (info.num_js)
- UMA_HISTOGRAM_TIMES("Extensions.InjectEnd_Time", info.timer.Elapsed());
- break;
- case UserScript::DOCUMENT_IDLE:
- UMA_HISTOGRAM_COUNTS_100("Extensions.InjectIdle_ScriptCount",
- info.num_js);
- if (info.num_js)
- UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", info.timer.Elapsed());
- break;
- case UserScript::RUN_DEFERRED:
- // TODO(rdevlin.cronin): Add histograms.
- break;
- case UserScript::UNDEFINED:
- case UserScript::RUN_LOCATION_LAST:
- NOTREACHED();
+ if (location == UserScript::DOCUMENT_START) {
+ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_CssCount",
+ info.num_css);
+ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_ScriptCount", info.num_js);
+ if (info.num_css || info.num_js)
+ UMA_HISTOGRAM_TIMES("Extensions.InjectStart_Time", info.timer.Elapsed());
+ } else if (location == UserScript::DOCUMENT_END) {
+ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectEnd_ScriptCount", info.num_js);
+ if (info.num_js)
+ UMA_HISTOGRAM_TIMES("Extensions.InjectEnd_Time", info.timer.Elapsed());
+ } else if (location == UserScript::DOCUMENT_IDLE) {
+ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectIdle_ScriptCount", info.num_js);
+ if (info.num_js)
+ UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", info.timer.Elapsed());
+ } else {
+ NOTREACHED();
}
}
« no previous file with comments | « trunk/src/extensions/renderer/user_script_slave.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698