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, |