From c599e303fa4e79e925c982b89b38b938098da5ad Mon Sep 17 00:00:00 2001 From: bridiver Date: Fri, 5 Aug 2016 02:05:00 -0700 Subject: [PATCH] pass web preference defaults to content settings auditors: @bbondy @diracdeltas --- .../atom_browser_client_extensions_part.cc | 6 ++++++ .../atom_browser_client_extensions_part.h | 5 +++++ atom/common/api/api_messages.h | 2 ++ atom/renderer/content_settings_manager.cc | 21 +++++++++++++++++-- atom/renderer/content_settings_manager.h | 4 ++++ brave/browser/brave_content_browser_client.cc | 3 +++ 6 files changed, 39 insertions(+), 2 deletions(-) diff --git a/atom/browser/extensions/atom_browser_client_extensions_part.cc b/atom/browser/extensions/atom_browser_client_extensions_part.cc index 747b3cd53..049d1e826 100644 --- a/atom/browser/extensions/atom_browser_client_extensions_part.cc +++ b/atom/browser/extensions/atom_browser_client_extensions_part.cc @@ -18,6 +18,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_url_handler.h" #include "content/public/browser/render_process_host.h" +#include "content/public/browser/render_view_host.h" #include "content/public/browser/site_instance.h" #include "extensions/browser/extension_message_filter.h" #include "extensions/browser/extension_registry.h" @@ -195,6 +196,11 @@ void AtomBrowserClientExtensionsPart::RegisterProfilePrefs( extension_l10n_util::CurrentLocaleOrDefault()); } +void AtomBrowserClientExtensionsPart::OverrideWebkitPrefs( + content::RenderViewHost* host, content::WebPreferences* prefs) { + host->Send(new AtomMsg_UpdateWebKitPrefs(*prefs)); +} + void AtomBrowserClientExtensionsPart::RenderProcessWillLaunch( content::RenderProcessHost* host) { int id = host->GetID(); diff --git a/atom/browser/extensions/atom_browser_client_extensions_part.h b/atom/browser/extensions/atom_browser_client_extensions_part.h index 481306026..82c29cade 100644 --- a/atom/browser/extensions/atom_browser_client_extensions_part.h +++ b/atom/browser/extensions/atom_browser_client_extensions_part.h @@ -24,6 +24,8 @@ class BrowserURLHandler; class ResourceContext; class SiteInstance; class RenderProcessHost; +class RenderViewHost; +struct WebPreferences; } namespace extensions { @@ -53,6 +55,9 @@ class AtomBrowserClientExtensionsPart { static void SetApplicationLocale(std::string); + void OverrideWebkitPrefs(content::RenderViewHost* host, + content::WebPreferences* prefs); + // // Helper function to call InfoMap::SetSigninProcess(). // static void SetSigninProcess(content::SiteInstance* site_instance); void RenderProcessWillLaunch(content::RenderProcessHost* host); diff --git a/atom/common/api/api_messages.h b/atom/common/api/api_messages.h index b84907bcb..5ad3a5840 100644 --- a/atom/common/api/api_messages.h +++ b/atom/common/api/api_messages.h @@ -45,3 +45,5 @@ IPC_MESSAGE_CONTROL1(AtomMsg_UpdatePreferences, base::ListValue) // Update renderer content settings IPC_MESSAGE_CONTROL1(AtomMsg_UpdateContentSettings, base::DictionaryValue) +// Update renderer content settings +IPC_MESSAGE_CONTROL1(AtomMsg_UpdateWebKitPrefs, content::WebPreferences) diff --git a/atom/renderer/content_settings_manager.cc b/atom/renderer/content_settings_manager.cc index e12a74386..455c9d5ee 100644 --- a/atom/renderer/content_settings_manager.cc +++ b/atom/renderer/content_settings_manager.cc @@ -37,11 +37,17 @@ bool ContentSettingsManager::OnControlMessageReceived( bool handled = true; IPC_BEGIN_MESSAGE_MAP(ContentSettingsManager, message) IPC_MESSAGE_HANDLER(AtomMsg_UpdateContentSettings, OnUpdateContentSettings) + IPC_MESSAGE_HANDLER(AtomMsg_UpdateWebKitPrefs, OnUpdateWebKitPrefs) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } +void ContentSettingsManager::OnUpdateWebKitPrefs( + const content::WebPreferences& web_preferences) { + web_preferences_ = content::WebPreferences(web_preferences); +} + void ContentSettingsManager::OnUpdateContentSettings( const base::DictionaryValue& content_settings) { content_settings_ = content_settings.CreateDeepCopy(); @@ -66,11 +72,22 @@ ContentSetting ContentSettingsManager::GetSetting( GURL secondary_url, std::string content_type, bool incognito) { + bool default_value = true; + if (content_type == "cookies") + default_value = web_preferences_.cookie_enabled; + else if (content_type == "images") + default_value = web_preferences_.images_enabled; + else if (content_type == "javascript") + default_value = web_preferences_.javascript_enabled; + else if (content_type == "displayInsecureContent") + default_value = web_preferences_.allow_displaying_insecure_content; + else if (content_type == "runInsecureContent") + default_value = web_preferences_.allow_running_insecure_content; + return GetContentSettingFromRules(primary_url, secondary_url, content_type, - content_type != "runInsecureContent" - ? true : false); + default_value); } std::vector ContentSettingsManager::GetContentTypes() { diff --git a/atom/renderer/content_settings_manager.h b/atom/renderer/content_settings_manager.h index 56f9e3d85..6ddd46425 100644 --- a/atom/renderer/content_settings_manager.h +++ b/atom/renderer/content_settings_manager.h @@ -11,6 +11,7 @@ #include "atom/renderer/content_settings_observer.h" #include "base/values.h" #include "components/content_settings/core/common/content_settings.h" +#include "content/public/common/web_preferences.h" #include "content/public/renderer/render_thread_observer.h" #include "atom/common/native_mate_converters/gurl_converter.h" @@ -76,11 +77,14 @@ class ContentSettingsManager : public content::RenderThreadObserver { // content::RenderThreadObserver: bool OnControlMessageReceived(const IPC::Message& message) override; + void OnUpdateWebKitPrefs( + const content::WebPreferences& web_preferences); void OnUpdateContentSettings( const base::DictionaryValue& content_settings); ContentSettingsObserverList observers_; + content::WebPreferences web_preferences_; std::unique_ptr content_settings_; DISALLOW_COPY_AND_ASSIGN(ContentSettingsManager); diff --git a/brave/browser/brave_content_browser_client.cc b/brave/browser/brave_content_browser_client.cc index ae19eb871..6d7e0dcb6 100644 --- a/brave/browser/brave_content_browser_client.cc +++ b/brave/browser/brave_content_browser_client.cc @@ -138,6 +138,9 @@ void BraveContentBrowserClient::OverrideWebkitPrefs( // Custom preferences of guest page. auto web_contents = content::WebContents::FromRenderViewHost(host); atom::WebContentsPreferences::OverrideWebkitPrefs(web_contents, prefs); + #if defined(ENABLE_EXTENSIONS) + extensions_part_->OverrideWebkitPrefs(host, prefs); + #endif }