summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-29 21:48:37 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-29 21:48:37 +0000
commit5092c285dc334a75dc2e4b1d1075199d80f7ea20 (patch)
tree0044f9a9ace1c31fd8fddd580f62413e63444e75
parent791be42c278b6d5818775834c15819b9b4d1117f (diff)
downloadchromium_src-5092c285dc334a75dc2e4b1d1075199d80f7ea20.zip
chromium_src-5092c285dc334a75dc2e4b1d1075199d80f7ea20.tar.gz
chromium_src-5092c285dc334a75dc2e4b1d1075199d80f7ea20.tar.bz2
Set extension-related webkit preferences in a common location.
Before we were ending up with different preferences set in different locations. I'm not sure if this approach is right from the content-team's point of view. BUG= TEST= Review URL: http://codereview.chromium.org/8403024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107882 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chrome_content_browser_client.cc6
-rw-r--r--chrome/browser/chrome_content_browser_client.h4
-rw-r--r--chrome/browser/extensions/extension_host.cc18
-rw-r--r--chrome/browser/extensions/extension_webkit_preferences.cc27
-rw-r--r--chrome/browser/extensions/extension_webkit_preferences.h17
-rw-r--r--chrome/browser/notifications/balloon_host.cc3
-rw-r--r--chrome/browser/tab_contents/background_contents.cc9
-rw-r--r--chrome/browser/tab_contents/render_view_host_delegate_helper.cc20
-rw-r--r--chrome/browser/tab_contents/render_view_host_delegate_helper.h3
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--content/browser/mock_content_browser_client.cc4
-rw-r--r--content/browser/mock_content_browser_client.h4
-rw-r--r--content/browser/tab_contents/tab_contents.cc3
-rw-r--r--content/public/browser/content_browser_client.h3
-rw-r--r--content/shell/shell_content_browser_client.cc4
-rw-r--r--content/shell/shell_content_browser_client.h4
16 files changed, 78 insertions, 53 deletions
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 9be88fc..032bfce 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -891,10 +891,8 @@ bool ChromeContentBrowserClient::IsFastShutdownPossible() {
return !browser_command_line.HasSwitch(switches::kChromeFrame);
}
-WebPreferences ChromeContentBrowserClient::GetWebkitPrefs(
- content::BrowserContext* browser_context, bool is_web_ui) {
- return RenderViewHostDelegateHelper::GetWebkitPrefs(browser_context,
- is_web_ui);
+WebPreferences ChromeContentBrowserClient::GetWebkitPrefs(RenderViewHost* rvh) {
+ return RenderViewHostDelegateHelper::GetWebkitPrefs(rvh);
}
void ChromeContentBrowserClient::UpdateInspectorSetting(
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index bb8d55a..4d4e0ec6 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -113,9 +113,7 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient {
virtual speech_input::SpeechInputManager* GetSpeechInputManager() OVERRIDE;
virtual AccessTokenStore* CreateAccessTokenStore() OVERRIDE;
virtual bool IsFastShutdownPossible() OVERRIDE;
- virtual WebPreferences GetWebkitPrefs(
- content::BrowserContext* browser_context,
- bool is_web_ui) OVERRIDE;
+ virtual WebPreferences GetWebkitPrefs(RenderViewHost* rvh) OVERRIDE;
virtual void UpdateInspectorSetting(RenderViewHost* rvh,
const std::string& key,
const std::string& value) OVERRIDE;
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc
index 85fb48a..717816c 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -526,24 +526,8 @@ RendererPreferences ExtensionHost::GetRendererPrefs(
}
WebPreferences ExtensionHost::GetWebkitPrefs() {
- Profile* profile = Profile::FromBrowserContext(
- render_view_host()->process()->browser_context());
WebPreferences webkit_prefs =
- RenderViewHostDelegateHelper::GetWebkitPrefs(profile,
- false); // is_web_ui
- // Extensions are trusted so we override any user preferences for disabling
- // javascript or images.
- webkit_prefs.loads_images_automatically = true;
- webkit_prefs.javascript_enabled = true;
-
- // Enable privileged WebGL extensions.
- webkit_prefs.privileged_webgl_extensions_enabled = true;
-
- if (extension_host_type_ == chrome::VIEW_TYPE_EXTENSION_POPUP ||
- extension_host_type_ == chrome::VIEW_TYPE_EXTENSION_DIALOG ||
- extension_host_type_ == chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE ||
- extension_host_type_ == chrome::VIEW_TYPE_EXTENSION_INFOBAR)
- webkit_prefs.allow_scripts_to_close_windows = true;
+ RenderViewHostDelegateHelper::GetWebkitPrefs(render_view_host());
// Disable anything that requires the GPU process for background pages.
// See http://crbug.com/64512 and http://crbug.com/64841.
diff --git a/chrome/browser/extensions/extension_webkit_preferences.cc b/chrome/browser/extensions/extension_webkit_preferences.cc
new file mode 100644
index 0000000..4be4be7
--- /dev/null
+++ b/chrome/browser/extensions/extension_webkit_preferences.cc
@@ -0,0 +1,27 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/glue/webpreferences.h"
+
+#include "chrome/common/extensions/extension.h"
+
+namespace extension_webkit_preferences {
+
+void SetPreferences(WebPreferences* webkit_prefs, const Extension* extension) {
+ if (extension && !extension->is_hosted_app()) {
+ // Extensions are trusted so we override any user preferences for disabling
+ // javascript or images.
+ webkit_prefs->loads_images_automatically = true;
+ webkit_prefs->javascript_enabled = true;
+
+ // Tabs aren't typically allowed to close windows. But extensions shouldn't
+ // be subject to that.
+ webkit_prefs->allow_scripts_to_close_windows = true;
+
+ // Enable privileged WebGL extensions.
+ webkit_prefs->privileged_webgl_extensions_enabled = true;
+ }
+}
+
+} // extension_webkit_preferences
diff --git a/chrome/browser/extensions/extension_webkit_preferences.h b/chrome/browser/extensions/extension_webkit_preferences.h
new file mode 100644
index 0000000..508e8a8
--- /dev/null
+++ b/chrome/browser/extensions/extension_webkit_preferences.h
@@ -0,0 +1,17 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBKIT_PREFERENCES_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBKIT_PREFERENCES_H_
+
+class Extension;
+struct WebPreferences;
+
+namespace extension_webkit_preferences {
+
+void SetPreferences(WebPreferences* preferences, const Extension* extension);
+
+} // namespace extension_webkit_preferences
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBKIT_PREFERENCES_H_
diff --git a/chrome/browser/notifications/balloon_host.cc b/chrome/browser/notifications/balloon_host.cc
index 897c29c..ca63c90 100644
--- a/chrome/browser/notifications/balloon_host.cc
+++ b/chrome/browser/notifications/balloon_host.cc
@@ -66,8 +66,7 @@ const string16& BalloonHost::GetSource() const {
WebPreferences BalloonHost::GetWebkitPrefs() {
WebPreferences web_prefs =
- RenderViewHostDelegateHelper::GetWebkitPrefs(balloon_->profile(),
- enable_web_ui_);
+ RenderViewHostDelegateHelper::GetWebkitPrefs(render_view_host_);
web_prefs.allow_scripts_to_close_windows = true;
return web_prefs;
}
diff --git a/chrome/browser/tab_contents/background_contents.cc b/chrome/browser/tab_contents/background_contents.cc
index 6b3187a..33af53f 100644
--- a/chrome/browser/tab_contents/background_contents.cc
+++ b/chrome/browser/tab_contents/background_contents.cc
@@ -185,12 +185,9 @@ RendererPreferences BackgroundContents::GetRendererPrefs(
}
WebPreferences BackgroundContents::GetWebkitPrefs() {
- // TODO(rafaelw): Consider enabling the webkit_prefs.dom_paste_enabled for
- // apps.
- Profile* profile = Profile::FromBrowserContext(
- render_view_host_->process()->browser_context());
- WebPreferences prefs = RenderViewHostDelegateHelper::GetWebkitPrefs(profile,
- false);
+ WebPreferences prefs =
+ RenderViewHostDelegateHelper::GetWebkitPrefs(render_view_host_);
+
// Disable all kinds of acceleration for background pages.
// See http://crbug.com/96005 and http://crbug.com/96006
prefs.force_compositing_mode = false;
diff --git a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
index 9533c76..6b2fa71 100644
--- a/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
+++ b/chrome/browser/tab_contents/render_view_host_delegate_helper.cc
@@ -13,7 +13,9 @@
#include "chrome/browser/background/background_contents_service_factory.h"
#include "chrome/browser/chrome_content_browser_client.h"
#include "chrome/browser/character_encoding.h"
+#include "chrome/browser/extensions/extension_process_manager.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_webkit_preferences.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/prerender/prerender_manager.h"
@@ -23,6 +25,7 @@
#include "chrome/browser/user_style_sheet_watcher.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
+#include "content/browser/child_process_security_policy.h"
#include "content/browser/gpu/gpu_data_manager.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
@@ -326,8 +329,9 @@ RenderWidgetHostView*
// static
WebPreferences RenderViewHostDelegateHelper::GetWebkitPrefs(
- content::BrowserContext* browser_context, bool is_web_ui) {
- Profile* profile = Profile::FromBrowserContext(browser_context);
+ RenderViewHost* rvh) {
+ Profile* profile = Profile::FromBrowserContext(
+ rvh->process()->browser_context());
PrefService* prefs = profile->GetPrefs();
WebPreferences web_prefs;
@@ -525,13 +529,23 @@ WebPreferences RenderViewHostDelegateHelper::GetWebkitPrefs(
}
DCHECK(!web_prefs.default_encoding.empty());
- if (is_web_ui) {
+ if (ChildProcessSecurityPolicy::GetInstance()->HasWebUIBindings(
+ rvh->process()->id())) {
web_prefs.loads_images_automatically = true;
web_prefs.javascript_enabled = true;
}
web_prefs.is_online = !net::NetworkChangeNotifier::IsOffline();
+ ExtensionProcessManager* extension_process_manager =
+ profile->GetExtensionProcessManager();
+ if (extension_process_manager) {
+ const Extension* extension =
+ extension_process_manager->GetExtensionForSiteInstance(
+ rvh->site_instance()->id());
+ extension_webkit_preferences::SetPreferences(&web_prefs, extension);
+ }
+
return web_prefs;
}
diff --git a/chrome/browser/tab_contents/render_view_host_delegate_helper.h b/chrome/browser/tab_contents/render_view_host_delegate_helper.h
index 6b178d4..0ebc16a 100644
--- a/chrome/browser/tab_contents/render_view_host_delegate_helper.h
+++ b/chrome/browser/tab_contents/render_view_host_delegate_helper.h
@@ -125,8 +125,7 @@ class RenderViewHostDelegateViewHelper : public content::NotificationObserver {
// RenderViewHostDelegate methods.
class RenderViewHostDelegateHelper {
public:
- static WebPreferences GetWebkitPrefs(content::BrowserContext* browser_context,
- bool is_web_ui);
+ static WebPreferences GetWebkitPrefs(RenderViewHost* rvh);
static void UpdateInspectorSetting(content::BrowserContext* browser_context,
const std::string& key,
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index ec8ed64..403699d 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -1197,6 +1197,8 @@
'browser/extensions/extension_web_socket_proxy_private_api.h',
'browser/extensions/extension_web_ui.cc',
'browser/extensions/extension_web_ui.h',
+ 'browser/extensions/extension_webkit_preferences.cc',
+ 'browser/extensions/extension_webkit_preferences.h',
'browser/extensions/extension_webnavigation_api.cc',
'browser/extensions/extension_webnavigation_api.h',
'browser/extensions/extension_webnavigation_api_constants.cc',
diff --git a/content/browser/mock_content_browser_client.cc b/content/browser/mock_content_browser_client.cc
index bc88faf..a2e9e32 100644
--- a/content/browser/mock_content_browser_client.cc
+++ b/content/browser/mock_content_browser_client.cc
@@ -247,9 +247,7 @@ bool MockContentBrowserClient::IsFastShutdownPossible() {
return true;
}
-WebPreferences MockContentBrowserClient::GetWebkitPrefs(
- content::BrowserContext* browser_context,
- bool is_web_ui) {
+WebPreferences MockContentBrowserClient::GetWebkitPrefs(RenderViewHost* rvh) {
return WebPreferences();
}
diff --git a/content/browser/mock_content_browser_client.h b/content/browser/mock_content_browser_client.h
index 0742691..8152308 100644
--- a/content/browser/mock_content_browser_client.h
+++ b/content/browser/mock_content_browser_client.h
@@ -120,9 +120,7 @@ class MockContentBrowserClient : public ContentBrowserClient {
virtual speech_input::SpeechInputManager* GetSpeechInputManager() OVERRIDE;
virtual AccessTokenStore* CreateAccessTokenStore() OVERRIDE;
virtual bool IsFastShutdownPossible() OVERRIDE;
- virtual WebPreferences GetWebkitPrefs(
- content::BrowserContext* browser_context,
- bool is_web_ui) OVERRIDE;
+ virtual WebPreferences GetWebkitPrefs(RenderViewHost* rvh) OVERRIDE;
virtual void UpdateInspectorSetting(RenderViewHost* rvh,
const std::string& key,
const std::string& value) OVERRIDE;
diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc
index 0067d09..6962016 100644
--- a/content/browser/tab_contents/tab_contents.cc
+++ b/content/browser/tab_contents/tab_contents.cc
@@ -1800,7 +1800,7 @@ void TabContents::RunBeforeUnloadConfirm(const RenderViewHost* rvh,
WebPreferences TabContents::GetWebkitPrefs() {
WebPreferences web_prefs =
content::GetContentClient()->browser()->GetWebkitPrefs(
- render_view_host()->process()->browser_context(), false);
+ render_view_host());
// Force accelerated compositing and 2d canvas off for chrome:, about: and
// chrome-devtools: pages (unless it's specifically allowed).
@@ -2006,4 +2006,3 @@ bool TabContents::GotResponseToLockMouseRequest(bool allowed) {
return render_view_host() ?
render_view_host()->GotResponseToLockMouseRequest(allowed) : false;
}
-
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index e56f587..4d4f1ad 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -297,8 +297,7 @@ class ContentBrowserClient {
virtual bool IsFastShutdownPossible() = 0;
// Returns the WebKit preferences that are used by the renderer.
- virtual WebPreferences GetWebkitPrefs(BrowserContext* browser_context,
- bool is_web_ui) = 0;
+ virtual WebPreferences GetWebkitPrefs(RenderViewHost* render_view_host) = 0;
// Inspector setting was changed and should be persisted.
virtual void UpdateInspectorSetting(RenderViewHost* rvh,
diff --git a/content/shell/shell_content_browser_client.cc b/content/shell/shell_content_browser_client.cc
index 0176c2b..2b22709 100644
--- a/content/shell/shell_content_browser_client.cc
+++ b/content/shell/shell_content_browser_client.cc
@@ -261,9 +261,7 @@ bool ShellContentBrowserClient::IsFastShutdownPossible() {
return true;
}
-WebPreferences ShellContentBrowserClient::GetWebkitPrefs(
- content::BrowserContext* browser_context,
- bool is_web_ui) {
+WebPreferences ShellContentBrowserClient::GetWebkitPrefs(RenderViewHost* rvh) {
return WebPreferences();
}
diff --git a/content/shell/shell_content_browser_client.h b/content/shell/shell_content_browser_client.h
index c444952..886dc00 100644
--- a/content/shell/shell_content_browser_client.h
+++ b/content/shell/shell_content_browser_client.h
@@ -133,9 +133,7 @@ class ShellContentBrowserClient : public ContentBrowserClient
virtual speech_input::SpeechInputManager* GetSpeechInputManager() OVERRIDE;
virtual AccessTokenStore* CreateAccessTokenStore() OVERRIDE;
virtual bool IsFastShutdownPossible() OVERRIDE;
- virtual WebPreferences GetWebkitPrefs(
- content::BrowserContext* browser_context,
- bool is_web_ui) OVERRIDE;
+ virtual WebPreferences GetWebkitPrefs(RenderViewHost* rvh) OVERRIDE;
virtual void UpdateInspectorSetting(RenderViewHost* rvh,
const std::string& key,
const std::string& value) OVERRIDE;