diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-29 21:48:37 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-29 21:48:37 +0000 |
commit | 5092c285dc334a75dc2e4b1d1075199d80f7ea20 (patch) | |
tree | 0044f9a9ace1c31fd8fddd580f62413e63444e75 | |
parent | 791be42c278b6d5818775834c15819b9b4d1117f (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | chrome/browser/chrome_content_browser_client.h | 4 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_host.cc | 18 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_webkit_preferences.cc | 27 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_webkit_preferences.h | 17 | ||||
-rw-r--r-- | chrome/browser/notifications/balloon_host.cc | 3 | ||||
-rw-r--r-- | chrome/browser/tab_contents/background_contents.cc | 9 | ||||
-rw-r--r-- | chrome/browser/tab_contents/render_view_host_delegate_helper.cc | 20 | ||||
-rw-r--r-- | chrome/browser/tab_contents/render_view_host_delegate_helper.h | 3 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 | ||||
-rw-r--r-- | content/browser/mock_content_browser_client.cc | 4 | ||||
-rw-r--r-- | content/browser/mock_content_browser_client.h | 4 | ||||
-rw-r--r-- | content/browser/tab_contents/tab_contents.cc | 3 | ||||
-rw-r--r-- | content/public/browser/content_browser_client.h | 3 | ||||
-rw-r--r-- | content/shell/shell_content_browser_client.cc | 4 | ||||
-rw-r--r-- | content/shell/shell_content_browser_client.h | 4 |
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; |