Chromium Code Reviews| Index: chrome/renderer/extensions/dispatcher.cc |
| diff --git a/chrome/renderer/extensions/dispatcher.cc b/chrome/renderer/extensions/dispatcher.cc |
| index 3b2c3efdd37651f99f33890651c8850ee755da35..d6d76cc0607574cfc2e0149f8807d061ec5b989a 100644 |
| --- a/chrome/renderer/extensions/dispatcher.cc |
| +++ b/chrome/renderer/extensions/dispatcher.cc |
| @@ -83,9 +83,11 @@ |
| #include "grit/renderer_resources.h" |
| #include "third_party/WebKit/public/platform/WebString.h" |
| #include "third_party/WebKit/public/platform/WebURLRequest.h" |
| +#include "third_party/WebKit/public/web/WebCustomElement.h" |
| #include "third_party/WebKit/public/web/WebDataSource.h" |
| #include "third_party/WebKit/public/web/WebDocument.h" |
| #include "third_party/WebKit/public/web/WebFrame.h" |
| +#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
| #include "third_party/WebKit/public/web/WebScopedUserGesture.h" |
| #include "third_party/WebKit/public/web/WebSecurityPolicy.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| @@ -472,6 +474,9 @@ void Dispatcher::WebKitInitialized() { |
| InitOriginPermissions(extension); |
| } |
| + if (IsWithinPlatformApp()) |
| + EnableCustomElementWhiteList(); |
| + |
| is_webkit_initialized_ = true; |
| } |
| @@ -1076,7 +1081,7 @@ void Dispatcher::DidCreateScriptContext( |
| AddOrRemoveBindingsForContext(context); |
| - bool is_within_platform_app = IsWithinPlatformApp(frame); |
| + bool is_within_platform_app = IsWithinPlatformApp(); |
| // Inject custom JS into the platform app context. |
| if (is_within_platform_app) { |
| module_system->Require("platformApp"); |
| @@ -1149,11 +1154,14 @@ std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) { |
| return extensions_.GetExtensionOrAppIDByURL(frame_url); |
| } |
| -bool Dispatcher::IsWithinPlatformApp(const WebFrame* frame) { |
| - GURL url(UserScriptSlave::GetDataSourceURLForFrame(frame->top())); |
| - const Extension* extension = extensions_.GetExtensionOrAppByURL(url); |
| - |
| - return extension && extension->is_platform_app(); |
| +bool Dispatcher::IsWithinPlatformApp() { |
| + bool is_platform_app = false; |
| + for (std::set<std::string>::iterator iter = active_extension_ids_.begin(); |
| + iter != active_extension_ids_.end(); ++iter) { |
| + const Extension* extension = extensions_.GetByID(*iter); |
| + is_platform_app |= extension && extension->is_platform_app(); |
|
not at google - send to devlin
2013/08/08 22:48:23
you could avoid the is_platform_app variable by re
not at google - send to devlin
2013/08/08 22:51:44
actually scrap that, leave what you have - since i
Fady Samuel
2013/08/08 22:51:52
Ohh of course. I'm jetlagged and my brain is not a
|
| + } |
| + return is_platform_app; |
| } |
| void Dispatcher::WillReleaseScriptContext( |
| @@ -1171,7 +1179,7 @@ void Dispatcher::WillReleaseScriptContext( |
| } |
| void Dispatcher::DidCreateDocumentElement(WebKit::WebFrame* frame) { |
| - if (IsWithinPlatformApp(frame)) { |
| + if (IsWithinPlatformApp()) { |
| // WebKit doesn't let us define an additional user agent stylesheet, so we |
| // insert the default platform app stylesheet into all documents that are |
| // loaded in each app. |
| @@ -1222,6 +1230,9 @@ void Dispatcher::OnActivateExtension(const std::string& extension_id) { |
| extension_id, |
| extension->url(), |
| string16()); |
| + |
| + if (IsWithinPlatformApp()) |
| + EnableCustomElementWhiteList(); |
| } |
| } |
| @@ -1269,6 +1280,14 @@ void Dispatcher::AddOrRemoveOriginPermissions( |
| } |
| } |
| +void Dispatcher::EnableCustomElementWhiteList() { |
| + WebKit::WebRuntimeFeatures::enableCustomElements(true); |
| + WebKit::WebCustomElement::allowTagName("webview"); |
| + // TODO(fsamuel): Add <adview> to the whitelist once it has been converted |
| + // into a custom element. |
| + WebKit::WebCustomElement::allowTagName("browser-plugin"); |
| +} |
| + |
| void Dispatcher::AddOrRemoveBindings(const std::string& extension_id) { |
| v8_context_set().ForEach( |
| extension_id, |