Chromium Code Reviews| 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, |