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

Unified Diff: extensions/renderer/dispatcher.cc

Issue 498513002: Respect the clipboardRead and clipboardWrite permissions in content scripts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix extensions test compile Created 6 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
Index: extensions/renderer/dispatcher.cc
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index d52d1505c06bfe2a7da38acde2639c831bf5fa29..20acee89b1e235a4ba292e463007f46cb595f6fd 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -219,7 +219,9 @@ bool Dispatcher::IsExtensionActive(const std::string& extension_id) const {
return is_active;
}
-std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) {
+std::string Dispatcher::GetExtensionID(const WebFrame* frame,
+ int world_id,
+ bool use_effective_url) {
if (world_id != 0) {
// Isolated worlds (content script).
return ScriptInjection::GetExtensionIdForIsolatedWorld(world_id);
@@ -231,6 +233,8 @@ std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) {
// Extension pages (chrome-extension:// URLs).
GURL frame_url = ScriptContext::GetDataSourceURLForFrame(frame);
+ frame_url = ScriptContext::GetEffectiveDocumentURL(
+ frame, frame_url, use_effective_url);
return extensions_.GetExtensionOrAppIDByURL(frame_url);
}
@@ -243,7 +247,7 @@ void Dispatcher::DidCreateScriptContext(
return;
#endif
- std::string extension_id = GetExtensionID(frame, world_id);
+ std::string extension_id = GetExtensionID(frame, world_id, false);
const Extension* extension = extensions_.GetByID(extension_id);
Devlin 2014/09/03 22:09:16 This is unnecessarily complicated. We should just
Marijn Kruisselbrink 2014/09/03 23:54:07 Done, although I'm not entirely sure if it really
Devlin 2014/09/04 19:15:10 Good point, so I don't really feel too strongly ei
Marijn Kruisselbrink 2014/09/04 23:41:11 Actually I kind of like having this GetExtensionFr
if (!extension && !extension_id.empty()) {
@@ -260,15 +264,28 @@ void Dispatcher::DidCreateScriptContext(
extension_id = "";
}
+ extension_id = GetExtensionID(frame, world_id, true);
+ const Extension* effective_extension = extensions_.GetByID(extension_id);
Devlin 2014/09/03 22:09:16 If I recall correctly, GetEffectiveDocumentURL() o
Marijn Kruisselbrink 2014/09/03 23:54:07 Yes, the ideal end state is to get rid of extensio
Devlin 2014/09/04 19:15:10 Ah. That's too bad. Okay.
+
+ GURL frame_url = ScriptContext::GetDataSourceURLForFrame(frame);
Feature::Context context_type =
ClassifyJavaScriptContext(extension,
extension_group,
- ScriptContext::GetDataSourceURLForFrame(frame),
+ frame_url,
frame->document().securityOrigin());
+ Feature::Context effective_context_type = ClassifyJavaScriptContext(
+ effective_extension,
+ extension_group,
+ ScriptContext::GetEffectiveDocumentURL(frame, frame_url, true),
+ frame->document().securityOrigin());
ScriptContext* context =
- delegate_->CreateScriptContext(v8_context, frame, extension, context_type)
- .release();
+ delegate_->CreateScriptContext(v8_context,
+ frame,
+ extension,
+ context_type,
+ effective_extension,
+ effective_context_type).release();
script_context_set_.Add(context);
// Initialize origin permissions for content scripts, which can't be

Powered by Google App Engine
This is Rietveld 408576698