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..c79b4f11fd2863ba32e7256eb26cf107f3edf8cb 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 |
@@ -484,22 +485,27 @@ bool ChromeRenderViewObserver::allowWriteToClipboard(WebFrame* frame, |
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. |
+ // Experimental Web API is enabled when: |
+ // The document is running Web UI. |
WebSecurityOrigin origin = document.securityOrigin(); |
if (EqualsASCII(origin.protocol(), chrome::kChromeUIScheme)) |
return true; |
- const extensions::Extension* extension = |
- extension_dispatcher_->extensions()->GetExtensionOrAppByURL( |
- ExtensionURLInfo(origin, document.url())); |
- if (!extension) |
- return false; |
- return (extension_dispatcher_->IsExtensionActive(extension->id()) && |
- extension->HasAPIPermission( |
- extensions::APIPermission::kExperimental)); |
+ |
+ // The document is running extensions or apps which has the "experimental" |
+ // permission, or use the <browser> tag (which is implemented via Shadow DOM). |
+ if (EqualsASCII(origin.protocol(), chrome::kExtensionScheme)) { |
+ const std::string extension_id = origin.host().utf8().data(); |
+ if (!extension_dispatcher_->IsExtensionActive(extension_id)) |
+ return false; |
+ const extensions::Extension* extension = |
+ extension_dispatcher_->extensions()->GetByID(extension_id); |
+ if (!extension) |
+ return false; |
+ return extension->HasAPIPermission(APIPermission::kExperimental) || |
+ extension->HasAPIPermission(APIPermission::kBrowserTag); |
Aaron Boodman
2012/07/02 20:52:35
Is it possible to just check for the browser permi
Mihai Parparita -not on Chrome
2012/07/02 22:05:14
I don't see an easy way to do this (enable it for
Aaron Boodman
2012/07/02 23:04:37
Oh, I see the issue. My earlier comment was mistak
Mihai Parparita -not on Chrome
2012/07/02 23:23:45
Did something along these lines.
|
+ } |
+ |
+ return false; |
} |
bool ChromeRenderViewObserver::allowWebComponents(const WebDocument& document, |