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
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 9be88fca..032bfce1 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -891,10 +891,8 @@
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 @@
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 85fb48ae..717816c8 100644
--- a/chrome/browser/extensions/extension_host.cc
+++ b/chrome/browser/extensions/extension_host.cc
@@ -526,24 +526,8 @@
}
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..4be4be7f
--- /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 897c29c9..ca63c90c 100644
--- a/chrome/browser/notifications/balloon_host.cc
+++ b/chrome/browser/notifications/balloon_host.cc
@@ -66,8 +66,7 @@
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 @@
}
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..6b2fa7126 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 @@
// 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 @@
}
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 6b178d4e..0ebc16a7 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 @@
// 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',