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

Unified Diff: chrome/renderer/chrome_render_view_observer.cc

Issue 10598006: Browser tag shim (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: HasExtensionPermission Created 8 years, 6 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 | « chrome/renderer/chrome_render_view_observer.h ('k') | chrome/renderer/extensions/extension_dispatcher.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/chrome_render_view_observer.cc
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index 39585978d3c7eaf9bc07fd28509774810f8aa9bc..5093e43c1ee35a2d2e659b99784ac97a63950a07 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -70,6 +70,7 @@ using WebKit::WebURL;
using WebKit::WebURLRequest;
using WebKit::WebView;
using WebKit::WebVector;
+using extensions::APIPermission;
using webkit_glue::ImageResourceFetcher;
// Delay in milliseconds that we'll wait before capturing the page contents
@@ -482,31 +483,40 @@ bool ChromeRenderViewObserver::allowWriteToClipboard(WebFrame* frame,
return allowed;
}
-bool ChromeRenderViewObserver::IsExperimentalWebFeatureAllowed(
- const WebDocument& document) {
- // Experimental Web API is enabled when
- // - The specific API is allowed from command line flag, or
- // - If the document is running extensions or apps which
- // has the "experimental" permission, or
- // - The document is running Web UI.
- WebSecurityOrigin origin = document.securityOrigin();
- if (EqualsASCII(origin.protocol(), chrome::kChromeUIScheme))
- return true;
+bool ChromeRenderViewObserver::HasExtensionPermission(
+ const WebSecurityOrigin& origin, APIPermission::ID permission) const {
+ if (!EqualsASCII(origin.protocol(), chrome::kExtensionScheme))
+ return false;
+
+ const std::string extension_id = origin.host().utf8().data();
+ if (!extension_dispatcher_->IsExtensionActive(extension_id))
+ return false;
+
const extensions::Extension* extension =
- extension_dispatcher_->extensions()->GetExtensionOrAppByURL(
- ExtensionURLInfo(origin, document.url()));
+ extension_dispatcher_->extensions()->GetByID(extension_id);
if (!extension)
return false;
- return (extension_dispatcher_->IsExtensionActive(extension->id()) &&
- extension->HasAPIPermission(
- extensions::APIPermission::kExperimental));
+
+ return extension->HasAPIPermission(permission);
}
bool ChromeRenderViewObserver::allowWebComponents(const WebDocument& document,
bool defaultValue) {
if (defaultValue)
return true;
- return IsExperimentalWebFeatureAllowed(document);
+
+ WebSecurityOrigin origin = document.securityOrigin();
+ if (EqualsASCII(origin.protocol(), chrome::kChromeUIScheme))
+ return true;
+
+ // The <browser> tag is implemented via Shadow DOM.
+ if (HasExtensionPermission(origin, APIPermission::kBrowserTag))
+ return true;
+
+ if (HasExtensionPermission(origin, APIPermission::kExperimental))
+ return true;
+
+ return false;
}
static void SendInsecureContentSignal(int signal) {
« no previous file with comments | « chrome/renderer/chrome_render_view_observer.h ('k') | chrome/renderer/extensions/extension_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698