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

Unified Diff: extensions/renderer/extension_injection_host.cc

Issue 1335083004: [Extensions] Don't allow extensions to inject scripts into extension pages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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/extension_injection_host.cc
diff --git a/extensions/renderer/extension_injection_host.cc b/extensions/renderer/extension_injection_host.cc
index 1a6dca87f2500313109499894c80adf7ffef8315..9a5e2037b6d541b74c229e661228ca7317b12855 100644
--- a/extensions/renderer/extension_injection_host.cc
+++ b/extensions/renderer/extension_injection_host.cc
@@ -50,11 +50,6 @@ PermissionsData::AccessType ExtensionInjectionHost::CanExecuteOnFrame(
content::RenderFrame* render_frame,
int tab_id,
bool is_declarative) const {
- // If we don't have a tab id, we have no UI surface to ask for user consent.
- // For now, we treat this as an automatic allow.
- if (tab_id == -1)
- return PermissionsData::ACCESS_ALLOWED;
-
blink::WebSecurityOrigin top_frame_security_origin =
render_frame->GetWebFrame()->top()->securityOrigin();
// Only whitelisted extensions may run scripts on another extension's page.
@@ -66,21 +61,30 @@ PermissionsData::AccessType ExtensionInjectionHost::CanExecuteOnFrame(
// Declarative user scripts use "page access" (from "permissions" section in
// manifest) whereas non-declarative user scripts use custom
// "content script access" logic.
+ PermissionsData::AccessType access = PermissionsData::ACCESS_ALLOWED;
if (is_declarative) {
- return extension_->permissions_data()->GetPageAccess(
+ access = extension_->permissions_data()->GetPageAccess(
extension_,
document_url,
tab_id,
-1, // no process id
nullptr /* ignore error */);
} else {
- return extension_->permissions_data()->GetContentScriptAccess(
+ access = extension_->permissions_data()->GetContentScriptAccess(
extension_,
document_url,
tab_id,
-1, // no process id
nullptr /* ignore error */);
}
+ if (access == PermissionsData::ACCESS_WITHHELD &&
+ (tab_id == -1 || render_frame->GetWebFrame()->parent())) {
+ // Note: we don't consider ACCESS_WITHHELD for child frames or for frames
+ // outside of tabs because there is nowhere to surface a request.
not at google - send to devlin 2015/09/11 22:46:39 If you made the RenderFrameHost change I mentioned
+ // TODO(devlin): We should ask for permission somehow. crbug.com/491402.
+ access = PermissionsData::ACCESS_DENIED;
+ }
+ return access;
}
bool ExtensionInjectionHost::ShouldNotifyBrowserOfInjection() const {

Powered by Google App Engine
This is Rietveld 408576698