summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorericzeng@chromium.org <ericzeng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-13 09:38:31 +0000
committerericzeng@chromium.org <ericzeng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-13 09:39:40 +0000
commit70527de53e8988eec24190e9911bbe3b1c8c85cc (patch)
tree3501c039840295d6c83ca11725852c12f37f90d9 /chrome/renderer
parent3da74d14e73e63f723d0d030783140d6ffd8e782 (diff)
downloadchromium_src-70527de53e8988eec24190e9911bbe3b1c8c85cc.zip
chromium_src-70527de53e8988eec24190e9911bbe3b1c8c85cc.tar.gz
chromium_src-70527de53e8988eec24190e9911bbe3b1c8c85cc.tar.bz2
Implement support for <extensionoptions> embedding in WebUI
Modify permissions and checks in GuestView, WebUI, and extensions to allow <extensionoptions> to be used within WebUI. In the GuestView infrastructure, allow guest views in WebUI to be created without extension ids. In extensions, allow extension options-related APIs to be used in WebUI contexts. In WebUI, relax the CSP to allow internal browser plugins. BUG=386842 Review URL: https://codereview.chromium.org/453613002 Cr-Commit-Position: refs/heads/master@{#289233} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc29
-rw-r--r--chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc8
2 files changed, 19 insertions, 18 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index a5094ce..9eb68b5 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -245,6 +245,14 @@ bool ShouldUseJavaScriptSettingForPlugin(const WebPluginInfo& plugin) {
return false;
}
+void IsGuestViewApiAvailableToScriptContext(
+ bool* api_is_available,
+ extensions::ScriptContext* context) {
+ if (context->GetAvailability("guestViewInternal").is_available()) {
+ *api_is_available = true;
+ }
+}
+
} // namespace
ChromeContentRendererClient::ChromeContentRendererClient() {
@@ -520,20 +528,13 @@ bool ChromeContentRendererClient::OverrideCreatePlugin(
WebPlugin** plugin) {
std::string orig_mime_type = params.mimeType.utf8();
if (orig_mime_type == content::kBrowserPluginMimeType) {
- WebDocument document = frame->document();
- const Extension* extension =
- GetExtensionByOrigin(document.securityOrigin());
- if (extension) {
- const extensions::APIPermission::ID perms[] = {
- extensions::APIPermission::kAppView,
- extensions::APIPermission::kEmbeddedExtensionOptions,
- extensions::APIPermission::kWebView,
- };
- for (size_t i = 0; i < arraysize(perms); ++i) {
- if (extension->permissions_data()->HasAPIPermission(perms[i]))
- return false;
- }
- }
+ bool guest_view_api_available = false;
+ extension_dispatcher_->script_context_set().ForEach(
+ render_frame->GetRenderView(),
+ base::Bind(&IsGuestViewApiAvailableToScriptContext,
+ &guest_view_api_available));
+ if (guest_view_api_available)
+ return false;
}
ChromeViewHostMsg_GetPluginInfo_Output output;
diff --git a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
index 960b675..47600fb 100644
--- a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
+++ b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
@@ -289,6 +289,7 @@ void ChromeExtensionsDispatcherDelegate::RequireAdditionalModules(
// The API will be automatically set up when first used.
if (context_type == extensions::Feature::BLESSED_EXTENSION_CONTEXT ||
context_type == extensions::Feature::UNBLESSED_EXTENSION_CONTEXT) {
+ // TODO(fsamuel): Use context->GetAvailability("webViewInternal").
if (extension->permissions_data()->HasAPIPermission(
extensions::APIPermission::kWebView)) {
module_system->Require("webView");
@@ -313,6 +314,7 @@ void ChromeExtensionsDispatcherDelegate::RequireAdditionalModules(
}
if (context_type == extensions::Feature::BLESSED_EXTENSION_CONTEXT) {
+ // TODO(fsamuel): Use context->GetAvailability("appViewInternal").
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableAppView) &&
extension->permissions_data()->HasAPIPermission(
extensions::APIPermission::kAppView)) {
@@ -322,10 +324,8 @@ void ChromeExtensionsDispatcherDelegate::RequireAdditionalModules(
}
}
- if (context_type == extensions::Feature::BLESSED_EXTENSION_CONTEXT &&
- extensions::FeatureSwitch::embedded_extension_options()->IsEnabled() &&
- extension->permissions_data()->HasAPIPermission(
- extensions::APIPermission::kEmbeddedExtensionOptions)) {
+ if (extensions::FeatureSwitch::embedded_extension_options()->IsEnabled() &&
+ context->GetAvailability("extensionOptionsInternal").is_available()) {
module_system->Require("extensionOptions");
}
}