From 39d357e3248f80abea0159765ff39554affb40db Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 4 Jan 2017 14:17:57 +0100 Subject: BASELINE: Update Chromium to 55.0.2883.105 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit And updates ninja to 1.7.2 Change-Id: I20d43c737f82764d857ada9a55586901b18b9243 Reviewed-by: Michael BrĂ¼ning --- chromium/components/content_settings/DEPS | 3 - chromium/components/content_settings/content/DEPS | 4 - .../content_settings/content/common/BUILD.gn | 19 -- .../content_settings/content/common/DEPS | 3 - .../content_settings/content/common/OWNERS | 2 - .../common/content_settings_message_generator.cc | 39 ---- .../common/content_settings_message_generator.h | 7 - .../content/common/content_settings_messages.h | 96 ---------- .../content_settings/core/browser/BUILD.gn | 11 +- .../browser/content_settings_binary_value_map.cc | 18 +- .../browser/content_settings_binary_value_map.h | 1 + .../core/browser/content_settings_client.h | 70 -------- .../browser/content_settings_default_provider.cc | 57 ++---- .../browser/content_settings_default_provider.h | 5 +- .../core/browser/content_settings_info.cc | 2 +- ...content_settings_origin_identifier_value_map.cc | 22 ++- .../content_settings_origin_identifier_value_map.h | 1 + .../browser/content_settings_policy_provider.cc | 9 +- .../core/browser/content_settings_pref.h | 1 + .../core/browser/content_settings_pref_provider.cc | 32 +--- .../core/browser/content_settings_pref_provider.h | 5 +- .../core/browser/content_settings_provider.h | 1 + .../core/browser/content_settings_registry.cc | 40 ++--- .../browser/content_settings_registry_unittest.cc | 2 +- .../core/browser/content_settings_rule.cc | 18 +- .../core/browser/content_settings_rule.h | 7 - .../core/browser/content_settings_usages_state.cc | 12 +- .../core/browser/content_settings_usages_state.h | 4 - .../core/browser/content_settings_utils.cc | 2 +- .../core/browser/host_content_settings_map.cc | 198 ++++++++++++++++++--- .../core/browser/host_content_settings_map.h | 30 +++- .../core/browser/local_shared_objects_counter.h | 28 --- .../core/browser/plugins_field_trial.cc | 23 --- .../core/browser/plugins_field_trial.h | 28 --- .../core/browser/website_settings_info.h | 6 +- .../core/browser/website_settings_registry.cc | 26 ++- .../browser/website_settings_registry_unittest.cc | 14 +- .../core/common/content_settings.cc | 6 +- .../core/common/content_settings_pattern.cc | 61 ++++++- .../core/common/content_settings_pattern.h | 12 ++ .../common/content_settings_pattern_unittest.cc | 96 ++++++++++ .../core/common/content_settings_types.h | 3 +- .../content_settings/core/common/pref_names.cc | 6 + .../content_settings/core/common/pref_names.h | 1 + 44 files changed, 487 insertions(+), 544 deletions(-) delete mode 100644 chromium/components/content_settings/content/DEPS delete mode 100644 chromium/components/content_settings/content/common/BUILD.gn delete mode 100644 chromium/components/content_settings/content/common/DEPS delete mode 100644 chromium/components/content_settings/content/common/OWNERS delete mode 100644 chromium/components/content_settings/content/common/content_settings_message_generator.cc delete mode 100644 chromium/components/content_settings/content/common/content_settings_message_generator.h delete mode 100644 chromium/components/content_settings/content/common/content_settings_messages.h delete mode 100644 chromium/components/content_settings/core/browser/content_settings_client.h delete mode 100644 chromium/components/content_settings/core/browser/local_shared_objects_counter.h delete mode 100644 chromium/components/content_settings/core/browser/plugins_field_trial.cc delete mode 100644 chromium/components/content_settings/core/browser/plugins_field_trial.h (limited to 'chromium/components/content_settings') diff --git a/chromium/components/content_settings/DEPS b/chromium/components/content_settings/DEPS index 3a4400fde88..eac076192dc 100644 --- a/chromium/components/content_settings/DEPS +++ b/chromium/components/content_settings/DEPS @@ -1,6 +1,3 @@ include_rules = [ - # Content settings is a layered component; subdirectories must explicitly - # introduce the ability to use the content layer as appropriate. - "-components/content_settings/content", "+components/prefs", ] diff --git a/chromium/components/content_settings/content/DEPS b/chromium/components/content_settings/content/DEPS deleted file mode 100644 index 09645ae41e7..00000000000 --- a/chromium/components/content_settings/content/DEPS +++ /dev/null @@ -1,4 +0,0 @@ -include_rules = [ - "+components/content_settings/content/common", - "+ipc", -] diff --git a/chromium/components/content_settings/content/common/BUILD.gn b/chromium/components/content_settings/content/common/BUILD.gn deleted file mode 100644 index 5da2f62693b..00000000000 --- a/chromium/components/content_settings/content/common/BUILD.gn +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2014 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. - -source_set("common") { - sources = [ - "content_settings_message_generator.cc", - "content_settings_message_generator.h", - "content_settings_messages.h", - ] - - deps = [ - "//base", - "//components/content_settings/core/common", - "//content/public/common", - "//ipc", - "//url", - ] -} diff --git a/chromium/components/content_settings/content/common/DEPS b/chromium/components/content_settings/content/common/DEPS deleted file mode 100644 index d5923ee96cb..00000000000 --- a/chromium/components/content_settings/content/common/DEPS +++ /dev/null @@ -1,3 +0,0 @@ -include_rules = [ - "+content/public/common", -] diff --git a/chromium/components/content_settings/content/common/OWNERS b/chromium/components/content_settings/content/common/OWNERS deleted file mode 100644 index 42444bcd16d..00000000000 --- a/chromium/components/content_settings/content/common/OWNERS +++ /dev/null @@ -1,2 +0,0 @@ -per-file *_messages*.h=set noparent -per-file *_messages*.h=file://ipc/SECURITY_OWNERS diff --git a/chromium/components/content_settings/content/common/content_settings_message_generator.cc b/chromium/components/content_settings/content/common/content_settings_message_generator.cc deleted file mode 100644 index 0156c49723b..00000000000 --- a/chromium/components/content_settings/content/common/content_settings_message_generator.cc +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2014 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. - -// Get basic type definitions. -#define IPC_MESSAGE_IMPL -#include "components/content_settings/content/common/content_settings_message_generator.h" - -// Generate constructors. -#include "ipc/struct_constructor_macros.h" -#include "components/content_settings/content/common/content_settings_message_generator.h" - -// Generate destructors. -#include "ipc/struct_destructor_macros.h" -#include "components/content_settings/content/common/content_settings_message_generator.h" - -// Generate param traits size methods. -#include "ipc/param_traits_size_macros.h" -namespace IPC { -#include "components/content_settings/content/common/content_settings_message_generator.h" -} // namespace IPC - -// Generate param traits write methods. -#include "ipc/param_traits_write_macros.h" -namespace IPC { -#include "components/content_settings/content/common/content_settings_message_generator.h" -} // namespace IPC - -// Generate param traits read methods. -#include "ipc/param_traits_read_macros.h" -namespace IPC { -#include "components/content_settings/content/common/content_settings_message_generator.h" -} // namespace IPC - -// Generate param traits log methods. -#include "ipc/param_traits_log_macros.h" -namespace IPC { -#include "components/content_settings/content/common/content_settings_message_generator.h" -} // namespace IPC diff --git a/chromium/components/content_settings/content/common/content_settings_message_generator.h b/chromium/components/content_settings/content/common/content_settings_message_generator.h deleted file mode 100644 index 322fbaecaa9..00000000000 --- a/chromium/components/content_settings/content/common/content_settings_message_generator.h +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2014 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. - -// Multiply-included file, hence no include guard. - -#include "components/content_settings/content/common/content_settings_messages.h" diff --git a/chromium/components/content_settings/content/common/content_settings_messages.h b/chromium/components/content_settings/content/common/content_settings_messages.h deleted file mode 100644 index 6d969472da6..00000000000 --- a/chromium/components/content_settings/content/common/content_settings_messages.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2014 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. - -// Multiply-included file, no traditional include guard. -#include "base/strings/string16.h" -#include "components/content_settings/core/common/content_settings_types.h" -#include "ipc/ipc_message_macros.h" -#include "url/gurl.h" -#include "url/ipc/url_param_traits.h" - -#define IPC_MESSAGE_START ContentSettingsMsgStart - -IPC_ENUM_TRAITS_MAX_VALUE(ContentSettingsType, - CONTENT_SETTINGS_NUM_TYPES_DO_NOT_USE - 1) - -//----------------------------------------------------------------------------- -// These are messages sent from the browser to the renderer process. - -// Sent in response to FrameHostMsg_DidBlockDisplayingInsecureContent. -IPC_MESSAGE_ROUTED1(ChromeViewMsg_SetAllowDisplayingInsecureContent, - bool /* allowed */) - -// Sent in response to FrameHostMsg_DidBlockRunningInsecureContent. -IPC_MESSAGE_ROUTED1(ChromeViewMsg_SetAllowRunningInsecureContent, - bool /* allowed */) - -IPC_MESSAGE_ROUTED0(ChromeViewMsg_ReloadFrame) - -// Tells the renderer whether or not a file system access has been allowed. -IPC_MESSAGE_ROUTED2(ChromeViewMsg_RequestFileSystemAccessAsyncResponse, - int /* request_id */, - bool /* allowed */) - -// Tells the render frame to load all blocked plugins with the given identifier. -IPC_MESSAGE_ROUTED1(ChromeViewMsg_LoadBlockedPlugins, - std::string /* identifier */) - -// JavaScript related messages ----------------------------------------------- - -// Tells the frame it is displaying an interstitial page. -IPC_MESSAGE_ROUTED0(ChromeViewMsg_SetAsInterstitial) - -//----------------------------------------------------------------------------- -// These are messages sent from the renderer to the browser process. - -// Tells the browser that content in the current page was blocked due to the -// user's content settings. -IPC_MESSAGE_ROUTED2(ChromeViewHostMsg_ContentBlocked, - ContentSettingsType /* type of blocked content */, - base::string16 /* details on blocked content */) - -// Sent by the renderer process to check whether access to web databases is -// granted by content settings. -IPC_SYNC_MESSAGE_CONTROL5_1(ChromeViewHostMsg_AllowDatabase, - int /* render_frame_id */, - GURL /* origin_url */, - GURL /* top origin url */, - base::string16 /* database name */, - base::string16 /* database display name */, - bool /* allowed */) - -// Sent by the renderer process to check whether access to DOM Storage is -// granted by content settings. -IPC_SYNC_MESSAGE_CONTROL4_1(ChromeViewHostMsg_AllowDOMStorage, - int /* render_frame_id */, - GURL /* origin_url */, - GURL /* top origin url */, - bool /* if true local storage, otherwise session */, - bool /* allowed */) - -// Sent by the renderer process when a keygen element is rendered onto the -// current page. -IPC_MESSAGE_ROUTED1(ChromeViewHostMsg_DidUseKeygen, - GURL /* origin_url */) - -// Sent by the renderer process to check whether access to FileSystem is -// granted by content settings. -IPC_MESSAGE_CONTROL4(ChromeViewHostMsg_RequestFileSystemAccessAsync, - int /* render_frame_id */, - int /* request_id */, - GURL /* origin_url */, - GURL /* top origin url */) - -// Sent by the renderer process to check whether access to Indexed DBis -// granted by content settings. -IPC_SYNC_MESSAGE_CONTROL4_1(ChromeViewHostMsg_AllowIndexedDB, - int /* render_frame_id */, - GURL /* origin_url */, - GURL /* top origin url */, - base::string16 /* database name */, - bool /* allowed */) - -// Sent when the renderer was prevented from displaying insecure content in -// a secure page by a security policy. The page may appear incomplete. -IPC_MESSAGE_ROUTED0(ChromeViewHostMsg_DidBlockDisplayingInsecureContent) diff --git a/chromium/components/content_settings/core/browser/BUILD.gn b/chromium/components/content_settings/core/browser/BUILD.gn index 12e50f4f42a..536cd3d7288 100644 --- a/chromium/components/content_settings/core/browser/BUILD.gn +++ b/chromium/components/content_settings/core/browser/BUILD.gn @@ -4,11 +4,10 @@ import("//build/config/features.gni") -source_set("browser") { +static_library("browser") { sources = [ "content_settings_binary_value_map.cc", "content_settings_binary_value_map.h", - "content_settings_client.h", "content_settings_default_provider.cc", "content_settings_default_provider.h", "content_settings_details.cc", @@ -39,20 +38,12 @@ source_set("browser") { "cookie_settings.h", "host_content_settings_map.cc", "host_content_settings_map.h", - "local_shared_objects_counter.h", "website_settings_info.cc", "website_settings_info.h", "website_settings_registry.cc", "website_settings_registry.h", ] - if (enable_plugins) { - sources += [ - "plugins_field_trial.cc", - "plugins_field_trial.h", - ] - } - deps = [ "//base", "//components/content_settings/core/common", diff --git a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc b/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc index cd030bd65dd..ddfb7326c12 100644 --- a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc +++ b/chromium/components/content_settings/core/browser/content_settings_binary_value_map.cc @@ -16,14 +16,13 @@ namespace { class RuleIteratorBinary : public RuleIterator { public: - explicit RuleIteratorBinary(bool is_enabled, - std::unique_ptr auto_lock) + RuleIteratorBinary(bool is_enabled, std::unique_ptr auto_lock) : is_done_(is_enabled), auto_lock_(std::move(auto_lock)) {} bool HasNext() const override { return !is_done_; } Rule Next() override { - DCHECK(!is_done_); + DCHECK(HasNext()); is_done_ = true; return Rule(ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), @@ -45,11 +44,10 @@ std::unique_ptr BinaryValueMap::GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, std::unique_ptr auto_lock) const { - if (resource_identifier.empty()) { - return std::unique_ptr(new RuleIteratorBinary( - IsContentSettingEnabled(content_type), std::move(auto_lock))); - } - return std::unique_ptr(new EmptyRuleIterator()); + if (!resource_identifier.empty()) + return nullptr; + return std::unique_ptr(new RuleIteratorBinary( + IsContentSettingEnabled(content_type), std::move(auto_lock))); } void BinaryValueMap::SetContentSettingDisabled(ContentSettingsType content_type, @@ -60,9 +58,7 @@ void BinaryValueMap::SetContentSettingDisabled(ContentSettingsType content_type, bool BinaryValueMap::IsContentSettingEnabled( ContentSettingsType content_type) const { auto it = is_enabled_.find(content_type); - if (it == is_enabled_.end()) - return true; - return it->second; + return it == is_enabled_.end() || it->second; } } // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.h b/chromium/components/content_settings/core/browser/content_settings_binary_value_map.h index 2fba9126371..dbce8982bc1 100644 --- a/chromium/components/content_settings/core/browser/content_settings_binary_value_map.h +++ b/chromium/components/content_settings/core/browser/content_settings_binary_value_map.h @@ -26,6 +26,7 @@ class BinaryValueMap { BinaryValueMap(); ~BinaryValueMap(); + // Returns nullptr to indicate the RuleIterator is empty. std::unique_ptr GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, diff --git a/chromium/components/content_settings/core/browser/content_settings_client.h b/chromium/components/content_settings/core/browser/content_settings_client.h deleted file mode 100644 index 2ba347c6d45..00000000000 --- a/chromium/components/content_settings/core/browser/content_settings_client.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014 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 COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_CLIENT_H_ -#define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_CLIENT_H_ - -#include - -#include "base/macros.h" -#include "base/strings/string16.h" -#include "net/cookies/canonical_cookie.h" - -class GURL; -class LocalSharedObjectsCounter; - -namespace net { -class CookieOptions; -} - -namespace content_settings { - -// An abstraction of operations that depend on the embedder (e.g. Chrome). -class ContentSettingsClient { - public: - enum AccessType { BLOCKED, ALLOWED }; - - ContentSettingsClient() {} - virtual ~ContentSettingsClient() {} - - // Methods to notify the client about access to local shared objects. - virtual void OnCookiesRead(const GURL& url, - const GURL& first_party_url, - const net::CookieList& cookie_list, - bool blocked_by_policy) = 0; - - virtual void OnCookieChanged(const GURL& url, - const GURL& first_party_url, - const std::string& cookie_line, - const net::CookieOptions& options, - bool blocked_by_policy) = 0; - - virtual void OnFileSystemAccessed(const GURL& url, - bool blocked_by_policy) = 0; - - virtual void OnIndexedDBAccessed(const GURL& url, - const base::string16& description, - bool blocked_by_policy) = 0; - - virtual void OnLocalStorageAccessed(const GURL& url, - bool local, - bool blocked_by_policy) = 0; - - virtual void OnWebDatabaseAccessed(const GURL& url, - const base::string16& name, - const base::string16& display_name, - bool blocked_by_policy) = 0; - - // Returns the |LocalSharedObjectsCounter| instances corresponding to all - // allowed (or blocked, depending on |type|) local shared objects. - virtual const LocalSharedObjectsCounter& local_shared_objects( - AccessType type) const = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(ContentSettingsClient); -}; - -} // namespace content_settings - -#endif // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_CLIENT_H_ diff --git a/chromium/components/content_settings/core/browser/content_settings_default_provider.cc b/chromium/components/content_settings/core/browser/content_settings_default_provider.cc index 1d4af86fdca..f1ca103e3b6 100644 --- a/chromium/components/content_settings/core/browser/content_settings_default_provider.cc +++ b/chromium/components/content_settings/core/browser/content_settings_default_provider.cc @@ -9,7 +9,6 @@ #include "base/auto_reset.h" #include "base/bind.h" -#include "base/command_line.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "components/content_settings/core/browser/content_settings_rule.h" @@ -29,15 +28,6 @@ namespace content_settings { namespace { -// Obsolete prefs to be removed from the pref file. -// TODO(msramek): Remove this cleanup code after two releases (i.e. in M50). -const char kObsoleteMetroSwitchToDesktopSetting[] = - "profile.default_content_setting_values.metro_switch_to_desktop"; - -// TODO(msramek): Remove this cleanup code after two releases (i.e. in M51). -const char kObsoleteMediaStreamSetting[] = - "profile.default_content_setting_values.media_stream"; - ContentSetting GetDefaultValue(const WebsiteSettingsInfo* info) { const base::Value* initial_default = info->initial_default_value(); if (!initial_default) @@ -65,10 +55,10 @@ class DefaultRuleIterator : public RuleIterator { value_.reset(value->DeepCopy()); } - bool HasNext() const override { return value_.get() != NULL; } + bool HasNext() const override { return !!value_; } Rule Next() override { - DCHECK(value_.get()); + DCHECK(HasNext()); return Rule(ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), value_.release()); @@ -91,17 +81,6 @@ void DefaultProvider::RegisterProfilePrefs( GetDefaultValue(info), info->GetPrefRegistrationFlags()); } - - // Obsolete prefs ------------------------------------------------------- - - // The removed content settings type METRO_SWITCH_TO_DESKTOP. - registry->RegisterIntegerPref( - kObsoleteMetroSwitchToDesktopSetting, - 0, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - - // The removed content settings type MEDIASTREAM. - registry->RegisterIntegerPref(kObsoleteMediaStreamSetting, 0); } DefaultProvider::DefaultProvider(PrefService* prefs, bool incognito) @@ -110,9 +89,6 @@ DefaultProvider::DefaultProvider(PrefService* prefs, bool incognito) updating_preferences_(false) { DCHECK(prefs_); - // Remove the obsolete preferences from the pref file. - DiscardObsoletePreferences(); - // Read global defaults. ReadDefaultSettings(); @@ -177,11 +153,6 @@ DefaultProvider::DefaultProvider(PrefService* prefs, bool incognito) IntToContentSetting(prefs_->GetInteger( GetPrefName(CONTENT_SETTINGS_TYPE_MIDI_SYSEX))), CONTENT_SETTING_NUM_SETTINGS); - UMA_HISTOGRAM_ENUMERATION( - "ContentSettings.DefaultPushMessagingSetting", - IntToContentSetting(prefs_->GetInteger( - GetPrefName(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING))), - CONTENT_SETTING_NUM_SETTINGS); UMA_HISTOGRAM_ENUMERATION( "ContentSettings.DefaultKeygenSetting", IntToContentSetting(prefs_->GetInteger( @@ -261,17 +232,18 @@ std::unique_ptr DefaultProvider::GetRuleIterator( bool incognito) const { // The default provider never has incognito-specific settings. if (incognito) - return std::unique_ptr(new EmptyRuleIterator()); + return nullptr; base::AutoLock lock(lock_); - if (resource_identifier.empty()) { - auto it(default_settings_.find(content_type)); - if (it != default_settings_.end()) - return std::unique_ptr( - new DefaultRuleIterator(it->second.get())); + if (!resource_identifier.empty()) + return nullptr; + + auto it = default_settings_.find(content_type); + if (it == default_settings_.end()) { NOTREACHED(); + return nullptr; } - return std::unique_ptr(new EmptyRuleIterator()); + return base::MakeUnique(it->second.get()); } void DefaultProvider::ClearAllContentSettingsRules( @@ -300,8 +272,8 @@ void DefaultProvider::ReadDefaultSettings() { bool DefaultProvider::IsValueEmptyOrDefault(ContentSettingsType content_type, base::Value* value) { - if (!value) return true; - return ValueToContentSetting(value) == GetDefaultValue(content_type); + return !value || + ValueToContentSetting(value) == GetDefaultValue(content_type); } void DefaultProvider::ChangeSetting(ContentSettingsType content_type, @@ -372,9 +344,4 @@ std::unique_ptr DefaultProvider::ReadFromPref( return ContentSettingToValue(IntToContentSetting(int_value)); } -void DefaultProvider::DiscardObsoletePreferences() { - prefs_->ClearPref(kObsoleteMetroSwitchToDesktopSetting); - prefs_->ClearPref(kObsoleteMediaStreamSetting); -} - } // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/content_settings_default_provider.h b/chromium/components/content_settings/core/browser/content_settings_default_provider.h index 5691a188ce4..f4f234695ca 100644 --- a/chromium/components/content_settings/core/browser/content_settings_default_provider.h +++ b/chromium/components/content_settings/core/browser/content_settings_default_provider.h @@ -72,16 +72,13 @@ class DefaultProvider : public ObservableProvider { // Called on prefs change. void OnPreferenceChanged(const std::string& pref_name); - // Clean up the obsolete preferences from the user's profile. - void DiscardObsoletePreferences(); - // Copies of the pref data, so that we can read it on the IO thread. std::map> default_settings_; PrefService* prefs_; // Whether this settings map is for an Incognito session. - bool is_incognito_; + const bool is_incognito_; // Used around accesses to the |default_settings_| object to guarantee // thread safety. diff --git a/chromium/components/content_settings/core/browser/content_settings_info.cc b/chromium/components/content_settings/core/browser/content_settings_info.cc index 62e5c685c4f..c111944e286 100644 --- a/chromium/components/content_settings/core/browser/content_settings_info.cc +++ b/chromium/components/content_settings/core/browser/content_settings_info.cc @@ -21,7 +21,7 @@ ContentSettingsInfo::ContentSettingsInfo( ContentSettingsInfo::~ContentSettingsInfo() {} bool ContentSettingsInfo::IsSettingValid(ContentSetting setting) const { - return ContainsKey(valid_settings_, setting); + return base::ContainsKey(valid_settings_, setting); } } // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc b/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc index 42bc2512b5f..3f6133b67a8 100644 --- a/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc +++ b/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.cc @@ -37,7 +37,7 @@ class RuleIteratorImpl : public RuleIterator { bool HasNext() const override { return (current_rule_ != rule_end_); } Rule Next() override { - DCHECK(current_rule_ != rule_end_); + DCHECK(HasNext()); DCHECK(current_rule_->second.get()); Rule to_return(current_rule_->first.primary_pattern, current_rule_->first.secondary_pattern, @@ -97,16 +97,15 @@ std::unique_ptr OriginIdentifierValueMap::GetRuleIterator( auto_lock.reset(new base::AutoLock(*lock)); EntryMap::const_iterator it = entries_.find(key); if (it == entries_.end()) - return std::unique_ptr(new EmptyRuleIterator()); + return nullptr; return std::unique_ptr(new RuleIteratorImpl( it->second.begin(), it->second.end(), auto_lock.release())); } size_t OriginIdentifierValueMap::size() const { size_t size = 0; - EntryMap::const_iterator it; - for (it = entries_.begin(); it != entries_.end(); ++it) - size += it->second.size(); + for (const auto& entry : entries_) + size += entry.second.size(); return size; } @@ -122,19 +121,18 @@ base::Value* OriginIdentifierValueMap::GetValue( EntryMapKey key(content_type, resource_identifier); EntryMap::const_iterator it = entries_.find(key); if (it == entries_.end()) - return NULL; + return nullptr; // Iterate the entries in until a match is found. Since the rules are stored // in the order of decreasing precedence, the most specific match is found // first. - Rules::const_iterator entry; - for (entry = it->second.begin(); entry != it->second.end(); ++entry) { - if (entry->first.primary_pattern.Matches(primary_url) && - entry->first.secondary_pattern.Matches(secondary_url)) { - return entry->second.get(); + for (const auto& entry : it->second) { + if (entry.first.primary_pattern.Matches(primary_url) && + entry.first.secondary_pattern.Matches(secondary_url)) { + return entry.second.get(); } } - return NULL; + return nullptr; } void OriginIdentifierValueMap::SetValue( diff --git a/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h b/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h index 62c984c59de..1ac2fe56bed 100644 --- a/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h +++ b/chromium/components/content_settings/core/browser/content_settings_origin_identifier_value_map.h @@ -74,6 +74,7 @@ class OriginIdentifierValueMap { // |OriginIdentifierValueMap| (also |GetRuleIterator|) before the iterator // has been destroyed. If |lock| is non-NULL, the returned |RuleIterator| // locks it and releases it when it is destroyed. + // Returns nullptr to indicate the RuleIterator is empty. std::unique_ptr GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, diff --git a/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc b/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc index 3e1245b9ad4..78a12a27a91 100644 --- a/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc +++ b/chromium/components/content_settings/core/browser/content_settings_policy_provider.cc @@ -9,6 +9,7 @@ #include #include "base/bind.h" +#include "base/feature_list.h" #include "base/json/json_reader.h" #include "base/macros.h" #include "base/values.h" @@ -354,8 +355,14 @@ void PolicyProvider::UpdateManagedDefaultSetting( DCHECK(!prefs_->HasPrefPath(entry.pref_name) || prefs_->IsManagedPreference(entry.pref_name)); base::AutoLock auto_lock(lock_); - int setting = prefs_->GetInteger(entry.pref_name); + // TODO(wfh): Remove once HDB is enabled by default. + if (entry.pref_name == prefs::kManagedDefaultPluginsSetting) { + static constexpr base::Feature kIgnoreDefaultPluginsSetting = { + "IgnoreDefaultPluginsSetting", base::FEATURE_DISABLED_BY_DEFAULT}; + if (base::FeatureList::IsEnabled(kIgnoreDefaultPluginsSetting)) + setting = CONTENT_SETTING_DEFAULT; + } if (setting == CONTENT_SETTING_DEFAULT) { value_map_.DeleteValue(ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), diff --git a/chromium/components/content_settings/core/browser/content_settings_pref.h b/chromium/components/content_settings/core/browser/content_settings_pref.h index 1a600d6c156..aa2ab178e3d 100644 --- a/chromium/components/content_settings/core/browser/content_settings_pref.h +++ b/chromium/components/content_settings/core/browser/content_settings_pref.h @@ -51,6 +51,7 @@ class ContentSettingsPref { NotifyObserversCallback notify_callback); ~ContentSettingsPref(); + // Returns nullptr to indicate the RuleIterator is empty. std::unique_ptr GetRuleIterator( const ResourceIdentifier& resource_identifier, bool incognito) const; diff --git a/chromium/components/content_settings/core/browser/content_settings_pref_provider.cc b/chromium/components/content_settings/core/browser/content_settings_pref_provider.cc index c544e186aa2..8d451633e2c 100644 --- a/chromium/components/content_settings/core/browser/content_settings_pref_provider.cc +++ b/chromium/components/content_settings/core/browser/content_settings_pref_provider.cc @@ -15,7 +15,6 @@ #include "base/bind.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" -#include "base/strings/string_split.h" #include "base/time/clock.h" #include "base/time/default_clock.h" #include "components/content_settings/core/browser/content_settings_pref.h" @@ -32,18 +31,6 @@ #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" -namespace { - -// Obsolete prefs. -// TODO(msramek): Remove the cleanup code after two releases (i.e. in M50). -const char kObsoleteMetroSwitchToDesktopExceptions[] = - "profile.content_settings.exceptions.metro_switch_to_desktop"; - -const char kObsoleteMediaStreamExceptions[] = - "profile.content_settings.exceptions.media_stream"; - -} // namespace - namespace content_settings { // //////////////////////////////////////////////////////////////////////////// @@ -63,14 +50,6 @@ void PrefProvider::RegisterProfilePrefs( registry->RegisterDictionaryPref(info->pref_name(), info->GetPrefRegistrationFlags()); } - - // Obsolete prefs ---------------------------------------------------------- - - registry->RegisterDictionaryPref( - kObsoleteMetroSwitchToDesktopExceptions, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - - registry->RegisterDictionaryPref(kObsoleteMediaStreamExceptions); } PrefProvider::PrefProvider(PrefService* prefs, bool incognito) @@ -95,10 +74,10 @@ PrefProvider::PrefProvider(PrefService* prefs, bool incognito) for (const WebsiteSettingsInfo* info : *website_settings) { content_settings_prefs_.insert(std::make_pair( info->type(), - base::WrapUnique(new ContentSettingsPref( + base::MakeUnique( info->type(), prefs_, &pref_change_registrar_, info->pref_name(), is_incognito_, - base::Bind(&PrefProvider::Notify, base::Unretained(this)))))); + base::Bind(&PrefProvider::Notify, base::Unretained(this))))); } if (!is_incognito_) { @@ -109,8 +88,6 @@ PrefProvider::PrefProvider(PrefService* prefs, bool incognito) UMA_HISTOGRAM_COUNTS("ContentSettings.NumberOfExceptions", num_exceptions); } - - DiscardObsoletePreferences(); } PrefProvider::~PrefProvider() { @@ -210,9 +187,4 @@ void PrefProvider::Notify( resource_identifier); } -void PrefProvider::DiscardObsoletePreferences() { - prefs_->ClearPref(kObsoleteMetroSwitchToDesktopExceptions); - prefs_->ClearPref(kObsoleteMediaStreamExceptions); -} - } // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/content_settings_pref_provider.h b/chromium/components/content_settings/core/browser/content_settings_pref_provider.h index fd7bb42635f..65be16d049f 100644 --- a/chromium/components/content_settings/core/browser/content_settings_pref_provider.h +++ b/chromium/components/content_settings/core/browser/content_settings_pref_provider.h @@ -80,16 +80,13 @@ class PrefProvider : public ObservableProvider { ContentSettingsType content_type, const std::string& resource_identifier); - // Clean up the obsolete preferences from the user's profile. - void DiscardObsoletePreferences(); - // Weak; owned by the Profile and reset in ShutdownOnUIThread. PrefService* prefs_; // Can be set for testing. std::unique_ptr clock_; - bool is_incognito_; + const bool is_incognito_; PrefChangeRegistrar pref_change_registrar_; diff --git a/chromium/components/content_settings/core/browser/content_settings_provider.h b/chromium/components/content_settings/core/browser/content_settings_provider.h index 8c1852e5ece..057ed81ba7e 100644 --- a/chromium/components/content_settings/core/browser/content_settings_provider.h +++ b/chromium/components/content_settings/core/browser/content_settings_provider.h @@ -32,6 +32,7 @@ class ProviderInterface { // mode. It is not allowed to call other |ProviderInterface| functions // (including |GetRuleIterator|) for the same provider until the // |RuleIterator| is destroyed. + // Returns nullptr to indicate the RuleIterator is empty. virtual std::unique_ptr GetRuleIterator( ContentSettingsType content_type, const ResourceIdentifier& resource_identifier, diff --git a/chromium/components/content_settings/core/browser/content_settings_registry.cc b/chromium/components/content_settings/core/browser/content_settings_registry.cc index 240243d1961..6f71249d2be 100644 --- a/chromium/components/content_settings/core/browser/content_settings_registry.cc +++ b/chromium/components/content_settings/core/browser/content_settings_registry.cc @@ -132,7 +132,7 @@ void ContentSettingsRegistry::Init() { WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, kExtensionScheme), ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -141,7 +141,7 @@ void ContentSettingsRegistry::Init() { WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, kExtensionScheme), ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP | WebsiteSettingsRegistry::PLATFORM_ANDROID, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -153,7 +153,7 @@ void ContentSettingsRegistry::Init() { ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK, CONTENT_SETTING_DETECT_IMPORTANT_CONTENT), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -162,7 +162,7 @@ void ContentSettingsRegistry::Init() { WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme, kExtensionScheme), ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::ALL_PLATFORMS, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -202,7 +202,7 @@ void ContentSettingsRegistry::Init() { WhitelistedSchemes(kChromeUIScheme, kChromeDevToolsScheme), ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -241,7 +241,7 @@ void ContentSettingsRegistry::Init() { kExtensionScheme), ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, CONTENT_SETTING_ASK), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP | WebsiteSettingsRegistry::PLATFORM_ANDROID, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -255,16 +255,6 @@ void ContentSettingsRegistry::Init() { WebsiteSettingsRegistry::PLATFORM_ANDROID, ContentSettingsInfo::INHERIT_IN_INCOGNITO); - Register(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, "push-messaging", - CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, - WhitelistedSchemes(), - ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, - CONTENT_SETTING_ASK), - WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE, - WebsiteSettingsRegistry::DESKTOP | - WebsiteSettingsRegistry::PLATFORM_ANDROID, - ContentSettingsInfo::INHERIT_IN_INCOGNITO_EXCEPT_ALLOW); - Register(CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, "protected-media-identifier", CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(), @@ -316,14 +306,14 @@ void ContentSettingsRegistry::Init() { Register(CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, "protocol-handler", CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(), ValidSettings(), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IN_INCOGNITO); Register(CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, "mixed-script", CONTENT_SETTING_DEFAULT, WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(), ValidSettings(), - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP, ContentSettingsInfo::INHERIT_IN_INCOGNITO); @@ -349,9 +339,9 @@ void ContentSettingsRegistry::Register( ContentSettingsInfo::IncognitoBehavior incognito_behavior) { // Ensure that nothing has been registered yet for the given type. DCHECK(!website_settings_registry_->Get(type)); - DCHECK(incognito_behavior - != ContentSettingsInfo::INHERIT_IN_INCOGNITO_EXCEPT_ALLOW - || ContainsKey(valid_settings, CONTENT_SETTING_ASK)) + DCHECK(incognito_behavior != + ContentSettingsInfo::INHERIT_IN_INCOGNITO_EXCEPT_ALLOW || + base::ContainsKey(valid_settings, CONTENT_SETTING_ASK)) << "If INHERIT_IN_INCOGNITO_EXCEPT_ALLOW is set, ASK must be listed as a " "valid setting."; std::unique_ptr default_value( @@ -367,10 +357,10 @@ void ContentSettingsRegistry::Register( if (!website_settings_info) return; - DCHECK(!ContainsKey(content_settings_info_, type)); - content_settings_info_[type] = base::WrapUnique( - new ContentSettingsInfo(website_settings_info, whitelisted_schemes, - valid_settings, incognito_behavior)); + DCHECK(!base::ContainsKey(content_settings_info_, type)); + content_settings_info_[type] = base::MakeUnique( + website_settings_info, whitelisted_schemes, valid_settings, + incognito_behavior); } } // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc b/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc index 7b8d66203ce..bf595c44e03 100644 --- a/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc +++ b/chromium/components/content_settings/core/browser/content_settings_registry_unittest.cc @@ -86,7 +86,7 @@ TEST_F(ContentSettingsRegistryTest, Properties) { ASSERT_TRUE( website_settings_info->initial_default_value()->GetAsInteger(&setting)); EXPECT_EQ(CONTENT_SETTING_ALLOW, setting); -#if defined(OS_IOS) +#if defined(OS_ANDROID) || defined(OS_IOS) EXPECT_EQ(PrefRegistry::NO_REGISTRATION_FLAGS, website_settings_info->GetPrefRegistrationFlags()); #else diff --git a/chromium/components/content_settings/core/browser/content_settings_rule.cc b/chromium/components/content_settings/core/browser/content_settings_rule.cc index 540231337ee..13d6a0aeed9 100644 --- a/chromium/components/content_settings/core/browser/content_settings_rule.cc +++ b/chromium/components/content_settings/core/browser/content_settings_rule.cc @@ -2,9 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/logging.h" #include "components/content_settings/core/browser/content_settings_rule.h" +#include + +#include "base/logging.h" + namespace content_settings { Rule::Rule() {} @@ -25,17 +28,6 @@ Rule::~Rule() {} RuleIterator::~RuleIterator() {} -EmptyRuleIterator::~EmptyRuleIterator() {} - -bool EmptyRuleIterator::HasNext() const { - return false; -} - -Rule EmptyRuleIterator::Next() { - NOTREACHED(); - return Rule(); -} - ConcatenationIterator::ConcatenationIterator( std::vector> iterators, base::AutoLock* auto_lock) @@ -52,7 +44,7 @@ ConcatenationIterator::ConcatenationIterator( ConcatenationIterator::~ConcatenationIterator() {} bool ConcatenationIterator::HasNext() const { - return (!iterators_.empty()); + return !iterators_.empty(); } Rule ConcatenationIterator::Next() { diff --git a/chromium/components/content_settings/core/browser/content_settings_rule.h b/chromium/components/content_settings/core/browser/content_settings_rule.h index af7b450a8f9..8c24e60ccaf 100644 --- a/chromium/components/content_settings/core/browser/content_settings_rule.h +++ b/chromium/components/content_settings/core/browser/content_settings_rule.h @@ -39,13 +39,6 @@ class RuleIterator { virtual Rule Next() = 0; }; -class EmptyRuleIterator : public RuleIterator { - public: - ~EmptyRuleIterator() override; - bool HasNext() const override; - Rule Next() override; -}; - class ConcatenationIterator : public RuleIterator { public: // ConcatenationIterator takes ownership of the pointers in the |iterators| diff --git a/chromium/components/content_settings/core/browser/content_settings_usages_state.cc b/chromium/components/content_settings/core/browser/content_settings_usages_state.cc index b0486a90758..0619ff3ffc6 100644 --- a/chromium/components/content_settings/core/browser/content_settings_usages_state.cc +++ b/chromium/components/content_settings/core/browser/content_settings_usages_state.cc @@ -10,12 +10,6 @@ #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/url_formatter/url_formatter.h" -ContentSettingsUsagesState::CommittedDetails::CommittedDetails() - : current_url_valid(false) { -} - -ContentSettingsUsagesState::CommittedDetails::~CommittedDetails() {} - ContentSettingsUsagesState::ContentSettingsUsagesState( HostContentSettingsMap* host_content_settings_map, ContentSettingsType type) @@ -33,12 +27,10 @@ void ContentSettingsUsagesState::OnPermissionSet( } void ContentSettingsUsagesState::DidNavigate(const CommittedDetails& details) { - if (details.current_url_valid) - embedder_url_ = details.current_url; + embedder_url_ = details.current_url; if (state_map_.empty()) return; - if (!details.current_url_valid || - details.previous_url.GetOrigin() != details.current_url.GetOrigin()) { + if (details.previous_url.GetOrigin() != details.current_url.GetOrigin()) { state_map_.clear(); return; } diff --git a/chromium/components/content_settings/core/browser/content_settings_usages_state.h b/chromium/components/content_settings/core/browser/content_settings_usages_state.h index 770483eed6d..f00e1702ee1 100644 --- a/chromium/components/content_settings/core/browser/content_settings_usages_state.h +++ b/chromium/components/content_settings/core/browser/content_settings_usages_state.h @@ -22,10 +22,6 @@ class ContentSettingsUsagesState { public: // Information about navigation. struct CommittedDetails { - CommittedDetails(); - ~CommittedDetails(); - - bool current_url_valid; GURL current_url; GURL previous_url; }; diff --git a/chromium/components/content_settings/core/browser/content_settings_utils.cc b/chromium/components/content_settings/core/browser/content_settings_utils.cc index c58163250c1..ed0a256f0ae 100644 --- a/chromium/components/content_settings/core/browser/content_settings_utils.cc +++ b/chromium/components/content_settings/core/browser/content_settings_utils.cc @@ -128,7 +128,7 @@ std::unique_ptr ContentSettingToValue(ContentSetting setting) { setting >= CONTENT_SETTING_NUM_SETTINGS) { return nullptr; } - return base::WrapUnique(new base::FundamentalValue(setting)); + return base::MakeUnique(setting); } void GetRendererContentSettingRules(const HostContentSettingsMap* map, diff --git a/chromium/components/content_settings/core/browser/host_content_settings_map.cc b/chromium/components/content_settings/core/browser/host_content_settings_map.cc index f5a47a8b15b..0e3f49fea1b 100644 --- a/chromium/components/content_settings/core/browser/host_content_settings_map.cc +++ b/chromium/components/content_settings/core/browser/host_content_settings_map.cc @@ -11,7 +11,7 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/memory/ptr_util.h" -#include "base/metrics/histogram.h" +#include "base/metrics/histogram_macros.h" #include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -58,6 +58,23 @@ const ProviderNamesSourceMapEntry kProviderNamesSourceMap[] = { {"default", content_settings::SETTING_SOURCE_USER}, }; +// Enum describing the status of domain to origin migration of content settings. +// Migration will be done twice: once upon construction of the +// HostContentSettingsMap (before syncing any content settings) and once after +// sync has finished. We always migrate before sync to ensure that settings will +// get migrated even if a user doesn't have sync enabled. We migrate after sync +// to ensure that any sync'd settings will be migrated. Once these events have +// occurred, we won't perform migration again. +enum DomainToOriginMigrationStatus { + // Haven't been migrated at all. + NOT_MIGRATED, + // Have done migration in the constructor of HostContentSettingsMap. + MIGRATED_BEFORE_SYNC, + // Have done migration both in HostContentSettingsMap construction and and + // after sync is finished. No migration will happen after this point. + MIGRATED_AFTER_SYNC, +}; + static_assert( arraysize(kProviderNamesSourceMap) == HostContentSettingsMap::NUM_PROVIDER_TYPES, @@ -118,11 +135,11 @@ content_settings::PatternPair GetPatternsFromScopingType( content_settings::PatternPair patterns; switch (scoping_type) { - case WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE: case WebsiteSettingsInfo::REQUESTING_DOMAIN_ONLY_SCOPE: patterns.first = ContentSettingsPattern::FromURL(primary_url); patterns.second = ContentSettingsPattern::Wildcard(); break; + case WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE: case WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE: patterns.first = ContentSettingsPattern::FromURLNoWildcard(primary_url); patterns.second = ContentSettingsPattern::Wildcard(); @@ -147,7 +164,8 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, used_from_thread_id_(base::PlatformThread::CurrentId()), #endif prefs_(prefs), - is_off_the_record_(is_incognito_profile || is_guest_profile) { + is_off_the_record_(is_incognito_profile || is_guest_profile), + weak_ptr_factory_(this) { DCHECK(!(is_incognito_profile && is_guest_profile)); content_settings::PolicyProvider* policy_provider = @@ -172,7 +190,7 @@ HostContentSettingsMap::HostContentSettingsMap(PrefService* prefs, content_settings_providers_[DEFAULT_PROVIDER] = default_provider; MigrateKeygenSettings(); - + MigrateDomainScopedSettings(false); RecordExceptionMetrics(); } @@ -183,6 +201,8 @@ void HostContentSettingsMap::RegisterProfilePrefs( content_settings::ContentSettingsRegistry::GetInstance(); registry->RegisterIntegerPref(prefs::kContentSettingsWindowLastTabIndex, 0); + registry->RegisterIntegerPref(prefs::kDomainToOriginMigrationStatus, + NOT_MIGRATED); // Register the prefs for the content settings providers. content_settings::DefaultProvider::RegisterProfilePrefs(registry); @@ -214,12 +234,14 @@ ContentSetting HostContentSettingsMap::GetDefaultContentSettingFromProvider( std::unique_ptr rule_iterator( provider->GetRuleIterator(content_type, std::string(), false)); - ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard(); - while (rule_iterator->HasNext()) { - content_settings::Rule rule = rule_iterator->Next(); - if (rule.primary_pattern == wildcard && - rule.secondary_pattern == wildcard) { - return content_settings::ValueToContentSetting(rule.value.get()); + if (rule_iterator) { + ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard(); + while (rule_iterator->HasNext()) { + content_settings::Rule rule = rule_iterator->Next(); + if (rule.primary_pattern == wildcard && + rule.secondary_pattern == wildcard) { + return content_settings::ValueToContentSetting(rule.value.get()); + } } } return CONTENT_SETTING_DEFAULT; @@ -497,6 +519,93 @@ void HostContentSettingsMap::MigrateKeygenSettings() { } } +void HostContentSettingsMap::MigrateDomainScopedSettings(bool after_sync) { + DomainToOriginMigrationStatus status = + static_cast( + prefs_->GetInteger(prefs::kDomainToOriginMigrationStatus)); + if (status == MIGRATED_AFTER_SYNC) + return; + if (status == MIGRATED_BEFORE_SYNC && !after_sync) + return; + DCHECK(status != NOT_MIGRATED || !after_sync); + + const ContentSettingsType kDomainScopedTypes[] = { + CONTENT_SETTINGS_TYPE_IMAGES, + CONTENT_SETTINGS_TYPE_PLUGINS, + CONTENT_SETTINGS_TYPE_JAVASCRIPT, + CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, + CONTENT_SETTINGS_TYPE_POPUPS}; + for (const ContentSettingsType& type : kDomainScopedTypes) { + if (!content_settings::ContentSettingsRegistry::GetInstance()->Get(type)) + continue; + ContentSettingsForOneType settings; + GetSettingsForOneType(type, std::string(), &settings); + + for (const ContentSettingPatternSource& setting_entry : settings) { + // Migrate user preference settings only. + if (setting_entry.source != "preference") + continue; + // Migrate ALLOW settings only. + if (setting_entry.setting != CONTENT_SETTING_ALLOW) + continue; + // Skip default settings. + if (setting_entry.primary_pattern == ContentSettingsPattern::Wildcard()) + continue; + + if (setting_entry.secondary_pattern != + ContentSettingsPattern::Wildcard()) { + NOTREACHED(); + continue; + } + + ContentSettingsPattern origin_pattern; + if (!ContentSettingsPattern::MigrateFromDomainToOrigin( + setting_entry.primary_pattern, &origin_pattern)) { + continue; + } + + if (!origin_pattern.IsValid()) + continue; + + GURL origin(origin_pattern.ToString()); + DCHECK(origin.is_valid()); + + // Ensure that the current resolved content setting for this origin is + // allowed. Otherwise we may be overriding some narrower setting which is + // set to block. + ContentSetting origin_setting = + GetContentSetting(origin, origin, type, std::string()); + + // Remove the domain scoped pattern. If |origin_setting| is not + // CONTENT_SETTING_ALLOW it implies there is some narrower pattern in + // effect, so it's still safe to remove the domain-scoped pattern. + SetContentSettingCustomScope(setting_entry.primary_pattern, + setting_entry.secondary_pattern, type, + std::string(), CONTENT_SETTING_DEFAULT); + + // If the current resolved content setting is allowed it's safe to set the + // origin-scoped pattern. + if (origin_setting == CONTENT_SETTING_ALLOW) + SetContentSettingCustomScope( + ContentSettingsPattern::FromURLNoWildcard(origin), + ContentSettingsPattern::Wildcard(), type, std::string(), + CONTENT_SETTING_ALLOW); + } + } + + if (status == NOT_MIGRATED) { + prefs_->SetInteger(prefs::kDomainToOriginMigrationStatus, + MIGRATED_BEFORE_SYNC); + } else if (status == MIGRATED_BEFORE_SYNC) { + prefs_->SetInteger(prefs::kDomainToOriginMigrationStatus, + MIGRATED_AFTER_SYNC); + } +} + +base::WeakPtr HostContentSettingsMap::GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); +} + void HostContentSettingsMap::RecordExceptionMetrics() { for (const content_settings::WebsiteSettingsInfo* info : *content_settings::WebsiteSettingsRegistry::GetInstance()) { @@ -514,10 +623,28 @@ void HostContentSettingsMap::RecordExceptionMetrics() { continue; } - UMA_HISTOGRAM_ENUMERATION("ContentSettings.ExceptionScheme", - setting_entry.primary_pattern.GetScheme(), + ContentSettingsPattern::SchemeType scheme = + setting_entry.primary_pattern.GetScheme(); + UMA_HISTOGRAM_ENUMERATION("ContentSettings.ExceptionScheme", scheme, ContentSettingsPattern::SCHEME_MAX); + if (scheme == ContentSettingsPattern::SCHEME_FILE) { + UMA_HISTOGRAM_BOOLEAN("ContentSettings.ExceptionSchemeFile.HasPath", + setting_entry.primary_pattern.HasPath()); + size_t num_values; + int histogram_value = + ContentSettingTypeToHistogramValue(content_type, &num_values); + if (setting_entry.primary_pattern.HasPath()) { + UMA_HISTOGRAM_ENUMERATION( + "ContentSettings.ExceptionSchemeFile.Type.WithPath", + histogram_value, num_values); + } else { + UMA_HISTOGRAM_ENUMERATION( + "ContentSettings.ExceptionSchemeFile.Type.WithoutPath", + histogram_value, num_values); + } + } + if (setting_entry.source == "preference") ++num_exceptions; } @@ -620,6 +747,28 @@ void HostContentSettingsMap::ClearSettingsForOneType( FlushLossyWebsiteSettings(); } +void HostContentSettingsMap::ClearSettingsForOneTypeWithPredicate( + ContentSettingsType content_type, + const base::Callback& + pattern_predicate) { + if (pattern_predicate.is_null()) { + ClearSettingsForOneType(content_type); + return; + } + + ContentSettingsForOneType settings; + GetSettingsForOneType(content_type, std::string(), &settings); + for (const ContentSettingPatternSource& setting : settings) { + if (pattern_predicate.Run(setting.primary_pattern, + setting.secondary_pattern)) { + SetWebsiteSettingCustomScope(setting.primary_pattern, + setting.secondary_pattern, content_type, + std::string(), nullptr); + } + } +} + // TODO(raymes): Remove this function. Consider making it a property of // ContentSettingsInfo or removing it altogether (it's unclear whether we should // be restricting allowed default values at this layer). @@ -664,7 +813,7 @@ void HostContentSettingsMap::OnContentSettingChanged( HostContentSettingsMap::~HostContentSettingsMap() { DCHECK(!prefs_); - STLDeleteValues(&content_settings_providers_); + base::STLDeleteValues(&content_settings_providers_); } void HostContentSettingsMap::ShutdownOnUIThread() { @@ -687,6 +836,9 @@ void HostContentSettingsMap::AddSettingsForOneType( bool incognito) const { std::unique_ptr rule_iterator( provider->GetRuleIterator(content_type, resource_identifier, incognito)); + if (!rule_iterator) + return; + while (rule_iterator->HasNext()) { const content_settings::Rule& rule = rule_iterator->Next(); ContentSetting setting_value = CONTENT_SETTING_DEFAULT; @@ -851,15 +1003,17 @@ HostContentSettingsMap::GetContentSettingValueAndPatterns( const GURL& secondary_url, ContentSettingsPattern* primary_pattern, ContentSettingsPattern* secondary_pattern) { - while (rule_iterator->HasNext()) { - const content_settings::Rule& rule = rule_iterator->Next(); - if (rule.primary_pattern.Matches(primary_url) && - rule.secondary_pattern.Matches(secondary_url)) { - if (primary_pattern) - *primary_pattern = rule.primary_pattern; - if (secondary_pattern) - *secondary_pattern = rule.secondary_pattern; - return base::WrapUnique(rule.value.get()->DeepCopy()); + if (rule_iterator) { + while (rule_iterator->HasNext()) { + const content_settings::Rule& rule = rule_iterator->Next(); + if (rule.primary_pattern.Matches(primary_url) && + rule.secondary_pattern.Matches(secondary_url)) { + if (primary_pattern) + *primary_pattern = rule.primary_pattern; + if (secondary_pattern) + *secondary_pattern = rule.secondary_pattern; + return base::WrapUnique(rule.value.get()->DeepCopy()); + } } } return std::unique_ptr(); diff --git a/chromium/components/content_settings/core/browser/host_content_settings_map.h b/chromium/components/content_settings/core/browser/host_content_settings_map.h index 2a958d33b87..29af9c7c669 100644 --- a/chromium/components/content_settings/core/browser/host_content_settings_map.h +++ b/chromium/components/content_settings/core/browser/host_content_settings_map.h @@ -210,6 +210,14 @@ class HostContentSettingsMap : public content_settings::Observer, // This should only be called on the UI thread. void ClearSettingsForOneType(ContentSettingsType content_type); + // If |pattern_predicate| is null, this method is equivalent to the above. + // Otherwise, it only deletes exceptions matched by |pattern_predicate|. + void ClearSettingsForOneTypeWithPredicate( + ContentSettingsType content_type, + const base::Callback& pattern_predicate); + static bool IsDefaultSettingAllowedForType(ContentSetting setting, ContentSettingsType content_type); @@ -278,9 +286,27 @@ class HostContentSettingsMap : public content_settings::Observer, // Passes ownership of |clock|. void SetPrefClockForTesting(std::unique_ptr clock); + // Migrate old domain scoped ALLOW settings to be origin scoped for + // ContentSettingsTypes which are domain scoped. Only narrow down ALLOW + // domain settings to origins so that this will not cause privacy/security + // issues. + // + // |after_sync| will be false when called upon construction of this object and + // true when called by the sync layer after sync is completed. + // TODO(lshang): https://crbug.com/621398 Remove this when clients have + // migrated (~M56). + void MigrateDomainScopedSettings(bool after_sync); + + base::WeakPtr GetWeakPtr(); + private: friend class base::RefCountedThreadSafe; - friend class HostContentSettingsMapTest_MigrateKeygenSettings_Test; + + FRIEND_TEST_ALL_PREFIXES(HostContentSettingsMapTest, + DomainToOriginMigrationStatus); + FRIEND_TEST_ALL_PREFIXES(HostContentSettingsMapTest, + MigrateDomainScopedSettings); + FRIEND_TEST_ALL_PREFIXES(HostContentSettingsMapTest, MigrateKeygenSettings); friend class content_settings::TestUtils; @@ -387,6 +413,8 @@ class HostContentSettingsMap : public content_settings::Observer, base::ObserverList observers_; + base::WeakPtrFactory weak_ptr_factory_; + DISALLOW_COPY_AND_ASSIGN(HostContentSettingsMap); }; diff --git a/chromium/components/content_settings/core/browser/local_shared_objects_counter.h b/chromium/components/content_settings/core/browser/local_shared_objects_counter.h deleted file mode 100644 index 800b5e39e44..00000000000 --- a/chromium/components/content_settings/core/browser/local_shared_objects_counter.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2014 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 COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_LOCAL_SHARED_OBJECTS_COUNTER_H_ -#define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_LOCAL_SHARED_OBJECTS_COUNTER_H_ - -#include - -#include "base/macros.h" - -class GURL; - -// An interface to retrieve counts of browser data objects. -class LocalSharedObjectsCounter { - public: - LocalSharedObjectsCounter() {} - virtual ~LocalSharedObjectsCounter() {} - - virtual size_t GetObjectCount() const = 0; - - virtual size_t GetObjectCountForDomain(const GURL& url) const = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(LocalSharedObjectsCounter); -}; - -#endif // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_LOCAL_SHARED_OBJECTS_COUNTER_H_ diff --git a/chromium/components/content_settings/core/browser/plugins_field_trial.cc b/chromium/components/content_settings/core/browser/plugins_field_trial.cc deleted file mode 100644 index 874002ddbe1..00000000000 --- a/chromium/components/content_settings/core/browser/plugins_field_trial.cc +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2015 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 "components/content_settings/core/browser/plugins_field_trial.h" - -namespace content_settings { - -// static -ContentSetting PluginsFieldTrial::EffectiveContentSetting( - ContentSettingsType type, - ContentSetting setting) { - if (type != CONTENT_SETTINGS_TYPE_PLUGINS) - return setting; - - // For Plugins, ASK is obsolete. Show as BLOCK to reflect actual behavior. - if (setting == ContentSetting::CONTENT_SETTING_ASK) - return ContentSetting::CONTENT_SETTING_BLOCK; - - return setting; -} - -} // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/plugins_field_trial.h b/chromium/components/content_settings/core/browser/plugins_field_trial.h deleted file mode 100644 index f486ee09d7a..00000000000 --- a/chromium/components/content_settings/core/browser/plugins_field_trial.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2015 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 COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_H_ -#define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_H_ - -#include "base/macros.h" -#include "components/content_settings/core/common/content_settings.h" -#include "components/content_settings/core/common/content_settings_types.h" - -namespace content_settings { - -// This class manages the Plugins field trials. -class PluginsFieldTrial { - public: - // Returns the effective content setting for plugins. Passes non-plugin - // content settings through without modification. - static ContentSetting EffectiveContentSetting(ContentSettingsType type, - ContentSetting setting); - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(PluginsFieldTrial); -}; - -} // namespace content_settings - -#endif // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_H_ diff --git a/chromium/components/content_settings/core/browser/website_settings_info.h b/chromium/components/content_settings/core/browser/website_settings_info.h index 762e32e828c..1f8176ad7b3 100644 --- a/chromium/components/content_settings/core/browser/website_settings_info.h +++ b/chromium/components/content_settings/core/browser/website_settings_info.h @@ -27,13 +27,13 @@ class WebsiteSettingsInfo { enum LossyStatus { LOSSY, NOT_LOSSY }; enum ScopingType { - // Settings scoped to the domain of the main frame only. - TOP_LEVEL_DOMAIN_ONLY_SCOPE, - // Settings scoped to the domain of the requesting frame only. This should // not generally be used. REQUESTING_DOMAIN_ONLY_SCOPE, + // Settings scoped to the origin of the main frame only. + TOP_LEVEL_ORIGIN_ONLY_SCOPE, + // Settings scoped to the origin of the requesting frame only. REQUESTING_ORIGIN_ONLY_SCOPE, diff --git a/chromium/components/content_settings/core/browser/website_settings_registry.cc b/chromium/components/content_settings/core/browser/website_settings_registry.cc index 553a0c72dd4..7fd4f40ab21 100644 --- a/chromium/components/content_settings/core/browser/website_settings_registry.cc +++ b/chromium/components/content_settings/core/browser/website_settings_registry.cc @@ -77,13 +77,16 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Register( #elif defined(OS_ANDROID) if (!(platform & PLATFORM_ANDROID)) return nullptr; + // Don't sync settings to mobile platforms. The UI is different to desktop and + // doesn't allow the settings to be managed in the same way. See + // crbug.com/642184. + sync_status = WebsiteSettingsInfo::UNSYNCABLE; #elif defined(OS_IOS) if (!(platform & PLATFORM_IOS)) return nullptr; - // Only default settings for Cookies and Popups are used in iOS. Exceptions - // and all the other content setting types are not used in iOS currently. So - // make content settings unsyncable on iOS for now. - // TODO(lshang): address this once we have proper content settings on iOS. + // Don't sync settings to mobile platforms. The UI is different to desktop and + // doesn't allow the settings to be managed in the same way. See + // crbug.com/642184. sync_status = WebsiteSettingsInfo::UNSYNCABLE; #else #error "Unsupported platform" @@ -116,7 +119,7 @@ void WebsiteSettingsRegistry::Init() { Register(CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, "auto-select-certificate", nullptr, WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::NOT_LOSSY, - WebsiteSettingsInfo::REQUESTING_DOMAIN_ONLY_SCOPE, ALL_PLATFORMS, + WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE, ALL_PLATFORMS, WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); Register(CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS, "ssl-cert-decisions", nullptr, WebsiteSettingsInfo::UNSYNCABLE, @@ -126,7 +129,7 @@ void WebsiteSettingsRegistry::Init() { WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); Register(CONTENT_SETTINGS_TYPE_APP_BANNER, "app-banner", nullptr, WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::LOSSY, - WebsiteSettingsInfo::REQUESTING_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE, DESKTOP | PLATFORM_ANDROID, WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); Register(CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, "site-engagement", nullptr, @@ -139,6 +142,17 @@ void WebsiteSettingsRegistry::Init() { WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE, DESKTOP | PLATFORM_ANDROID, WebsiteSettingsInfo::DONT_INHERIT_IN_INCOGNITO); + Register(CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, + "prompt-no-decision-count", nullptr, WebsiteSettingsInfo::UNSYNCABLE, + WebsiteSettingsInfo::NOT_LOSSY, + WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE, + DESKTOP | PLATFORM_ANDROID, + WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); + Register(CONTENT_SETTINGS_TYPE_IMPORTANT_SITE_INFO, "important-site-info", + nullptr, WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::LOSSY, + WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE, + DESKTOP | PLATFORM_ANDROID, + WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); } } // namespace content_settings diff --git a/chromium/components/content_settings/core/browser/website_settings_registry_unittest.cc b/chromium/components/content_settings/core/browser/website_settings_registry_unittest.cc index 223d810774f..aeb0a803c97 100644 --- a/chromium/components/content_settings/core/browser/website_settings_registry_unittest.cc +++ b/chromium/components/content_settings/core/browser/website_settings_registry_unittest.cc @@ -50,7 +50,7 @@ TEST_F(WebsiteSettingsRegistryTest, GetByName) { registry()->Register(static_cast(10), "test", nullptr, WebsiteSettingsInfo::UNSYNCABLE, WebsiteSettingsInfo::LOSSY, - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::ALL_PLATFORMS, WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); info = registry()->GetByName("test"); @@ -88,10 +88,10 @@ TEST_F(WebsiteSettingsRegistryTest, Properties) { // Register a new setting. registry()->Register(static_cast(10), "test", - base::WrapUnique(new base::FundamentalValue(999)), + base::MakeUnique(999), WebsiteSettingsInfo::SYNCABLE, WebsiteSettingsInfo::LOSSY, - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::ALL_PLATFORMS, WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); info = registry()->Get(static_cast(10)); @@ -102,14 +102,14 @@ TEST_F(WebsiteSettingsRegistryTest, Properties) { int setting; ASSERT_TRUE(info->initial_default_value()->GetAsInteger(&setting)); EXPECT_EQ(999, setting); -#if defined(OS_IOS) +#if defined(OS_ANDROID) || defined(OS_IOS) EXPECT_EQ(PrefRegistry::LOSSY_PREF, info->GetPrefRegistrationFlags()); #else EXPECT_EQ(PrefRegistry::LOSSY_PREF | user_prefs::PrefRegistrySyncable::SYNCABLE_PREF, info->GetPrefRegistrationFlags()); #endif - EXPECT_EQ(WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + EXPECT_EQ(WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, info->scoping_type()); EXPECT_EQ(WebsiteSettingsInfo::INHERIT_IN_INCOGNITO, info->incognito_behavior()); @@ -117,10 +117,10 @@ TEST_F(WebsiteSettingsRegistryTest, Properties) { TEST_F(WebsiteSettingsRegistryTest, Iteration) { registry()->Register(static_cast(10), "test", - base::WrapUnique(new base::FundamentalValue(999)), + base::MakeUnique(999), WebsiteSettingsInfo::SYNCABLE, WebsiteSettingsInfo::LOSSY, - WebsiteSettingsInfo::TOP_LEVEL_DOMAIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::ALL_PLATFORMS, WebsiteSettingsInfo::INHERIT_IN_INCOGNITO); diff --git a/chromium/components/content_settings/core/common/content_settings.cc b/chromium/components/content_settings/core/common/content_settings.cc index e7a8dea8fb8..3a245e0133f 100644 --- a/chromium/components/content_settings/core/common/content_settings.cc +++ b/chromium/components/content_settings/core/common/content_settings.cc @@ -41,7 +41,7 @@ ContentSettingsType kHistogramOrder[] = { CONTENT_SETTINGS_TYPE_PPAPI_BROKER, CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, CONTENT_SETTINGS_TYPE_MIDI_SYSEX, - CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, + CONTENT_SETTINGS_TYPE_DEFAULT, // PUSH_MESSAGING (removed). CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS, CONTENT_SETTINGS_TYPE_DEFAULT, // METRO_SWITCH_TO_DESKTOP (deprecated). #if defined(OS_ANDROID) || defined(OS_CHROMEOS) @@ -56,6 +56,8 @@ ContentSettingsType kHistogramOrder[] = { CONTENT_SETTINGS_TYPE_BLUETOOTH_GUARD, CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC, CONTENT_SETTINGS_TYPE_AUTOPLAY, + CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, + CONTENT_SETTINGS_TYPE_IMPORTANT_SITE_INFO, }; int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting, @@ -70,7 +72,7 @@ int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting, } } - DCHECK(ContainsKey(kMap, content_setting)); + DCHECK(base::ContainsKey(kMap, content_setting)); *num_values = arraysize(kHistogramOrder); return kMap[content_setting]; } diff --git a/chromium/components/content_settings/core/common/content_settings_pattern.cc b/chromium/components/content_settings/core/common/content_settings_pattern.cc index 6eeab8bc9a9..c86044ef639 100644 --- a/chromium/components/content_settings/core/common/content_settings_pattern.cc +++ b/chromium/components/content_settings/core/common/content_settings_pattern.cc @@ -42,7 +42,7 @@ std::string GetDefaultPort(const std::string& scheme) { return std::string(); } -// Returns true if |sub_domain| is a sub domain or equls |domain|. E.g. +// Returns true if |sub_domain| is a sub domain or equals |domain|. E.g. // "mail.google.com" is a sub domain of "google.com" but "evilhost.com" is not a // subdomain of "host.com". bool IsSubDomainOrEqual(const std::string& sub_domain, @@ -451,6 +451,60 @@ ContentSettingsPattern ContentSettingsPattern::FromString( return builder->Build(); } +// static +bool ContentSettingsPattern::MigrateFromDomainToOrigin( + const ContentSettingsPattern& domain_pattern, + ContentSettingsPattern* origin_pattern) { + DCHECK(origin_pattern); + + // Generated patterns with ::FromURL (which we want to migrate) must either + // have a scheme wildcard or be https. + if (domain_pattern.parts_.scheme != url::kHttpsScheme && + !domain_pattern.parts_.is_scheme_wildcard) { + return false; + } + + // Generated patterns using ::FromURL with the HTTPs scheme can not have a + // port wildcard. + if (domain_pattern.parts_.is_port_wildcard && + domain_pattern.parts_.scheme == url::kHttpsScheme) { + return false; + } + + // Patterns generated with ::FromURL will always have a domain wildcard. Those + // generated with ::FromURLNoWildcard don't. + if (!domain_pattern.parts_.has_domain_wildcard) + return false; + + // Generated patterns with ::FromURL will always have a host. + if (domain_pattern.parts_.host.empty()) + return false; + + std::unique_ptr builder( + ContentSettingsPattern::CreateBuilder(false)); + + if (domain_pattern.parts_.is_scheme_wildcard) + builder->WithScheme(url::kHttpScheme); + else + builder->WithScheme(domain_pattern.parts_.scheme); + + builder->WithHost(domain_pattern.parts_.host); + + if (domain_pattern.parts_.is_port_wildcard) { + if (domain_pattern.parts_.scheme == url::kHttpsScheme) { + builder->WithPort(GetDefaultPort(url::kHttpsScheme)); + } else { + builder->WithPort(GetDefaultPort(url::kHttpScheme)); + } + } else { + builder->WithPort(domain_pattern.parts_.port); + } + + *origin_pattern = builder->Build(); + + return true; +} + // static void ContentSettingsPattern::SetNonWildcardDomainNonPortScheme( const char* scheme) { @@ -560,6 +614,11 @@ ContentSettingsPattern::SchemeType ContentSettingsPattern::GetScheme() const { return SCHEME_OTHER; } +bool ContentSettingsPattern::HasPath() const { + DCHECK_EQ(GetScheme(), SCHEME_FILE); + return !parts_.is_path_wildcard && !parts_.path.empty(); +} + ContentSettingsPattern::Relation ContentSettingsPattern::Compare( const ContentSettingsPattern& other) const { // Two invalid patterns are identical in the way they behave. They don't match diff --git a/chromium/components/content_settings/core/common/content_settings_pattern.h b/chromium/components/content_settings/core/common/content_settings_pattern.h index d0c59db530e..f0432f59930 100644 --- a/chromium/components/content_settings/core/common/content_settings_pattern.h +++ b/chromium/components/content_settings/core/common/content_settings_pattern.h @@ -142,6 +142,7 @@ class ContentSettingsPattern { // Returns a pattern that matches the scheme and host of this URL, as well as // all subdomains and ports. + // TODO(lshang): Remove this when crbug.com/604612 is done. static ContentSettingsPattern FromURL(const GURL& url); // Returns a pattern that matches exactly this URL. @@ -158,6 +159,13 @@ class ContentSettingsPattern { // - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip) static ContentSettingsPattern FromString(const std::string& pattern_spec); + // Migrate domain scoped settings generated using FromURL() to be origin + // scoped. Return false if domain_pattern is not generated using FromURL(). + // TODO(lshang): Remove this when migration is done. https://crbug.com/604612 + static bool MigrateFromDomainToOrigin( + const ContentSettingsPattern& domain_pattern, + ContentSettingsPattern* origin_pattern); + // Sets the scheme that doesn't support domain wildcard and port. // Needs to be called by the embedder before using ContentSettingsPattern. // |scheme| can't be NULL, and the pointed string must remain alive until the @@ -186,6 +194,10 @@ class ContentSettingsPattern { // Returns scheme type of pattern. ContentSettingsPattern::SchemeType GetScheme() const; + // True if this pattern has a non-empty path. Can only be used for patterns + // with file: schemes. + bool HasPath() const; + // Compares the pattern with a given |other| pattern and returns the // |Relation| of the two patterns. Relation Compare(const ContentSettingsPattern& other) const; diff --git a/chromium/components/content_settings/core/common/content_settings_pattern_unittest.cc b/chromium/components/content_settings/core/common/content_settings_pattern_unittest.cc index c8280b8fcfa..c2480858445 100644 --- a/chromium/components/content_settings/core/common/content_settings_pattern_unittest.cc +++ b/chromium/components/content_settings/core/common/content_settings_pattern_unittest.cc @@ -721,6 +721,95 @@ TEST(ContentSettingsPatternTest, CanonicalizePattern_Legacy) { EXPECT_STREQ("", Pattern("\xC4\x87ira.*").ToString().c_str()); } +TEST(ContentSettingsPatternTest, MigrateFromDomainToOrigin) { + ContentSettingsPattern origin_pattern; + // Http scheme patterns. + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("http://[*.]example.com"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("http://[*.]example.com:80"), + &origin_pattern)); + + // Https patterns with port wildcard. + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("https://www.google.com"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("https://[*.]google.com"), + &origin_pattern)); + + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("www.google.com"), &origin_pattern)); + + // Patterns with no domain wildcard. + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("*://www.google.com:8080"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("www.example.com:8080"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("www.google.com/*"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("google"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("https://www.google.com:443"), + &origin_pattern)); + + // Patterns with empty host. + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("*"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("[*.]"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("http://*"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("http://*:8080"), &origin_pattern)); + + // Other schemes and IP address patterns won't be migrated. + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("192.168.0.1"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("https://127.0.0.1"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("http://[::1]"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("[::1]"), &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("file:///foo/bar.html"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString( + "filesystem:http://www.google.com/temporary/"), + &origin_pattern)); + EXPECT_FALSE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString( + "chrome-extension://peoadpeiejnhkmpaakpnompolbglelel/"), + &origin_pattern)); + + // These are pattern styles which might be generated using FromURL(). + EXPECT_TRUE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("[*.]example.com"), &origin_pattern)); + EXPECT_EQ("http://example.com:80", origin_pattern.ToString()); + + EXPECT_TRUE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("[*.]google.com:80"), + &origin_pattern)); + EXPECT_EQ("http://google.com:80", origin_pattern.ToString()); + + EXPECT_TRUE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("[*.]example.com:123"), + &origin_pattern)); + EXPECT_EQ("http://example.com:123", origin_pattern.ToString()); + + EXPECT_TRUE(ContentSettingsPattern::MigrateFromDomainToOrigin( + ContentSettingsPattern::FromString("https://[*.]google.com:443"), + &origin_pattern)); + EXPECT_EQ("https://google.com:443", origin_pattern.ToString()); +} + TEST(ContentSettingsPatternTest, Schemes) { EXPECT_EQ(ContentSettingsPattern::SCHEME_HTTP, Pattern("http://www.example.com").GetScheme()); @@ -738,3 +827,10 @@ TEST(ContentSettingsPatternTest, Schemes) { EXPECT_EQ(ContentSettingsPattern::SCHEME_OTHER, Pattern("filesystem:http://www.google.com/temporary/").GetScheme()); } + +TEST(ContentSettingsPatternTest, FileSchemeHasPath) { + EXPECT_FALSE(Pattern("file:///*").HasPath()); + EXPECT_TRUE(Pattern("file:///foo").HasPath()); + EXPECT_TRUE(Pattern("file:///foo/bar/").HasPath()); + EXPECT_TRUE(Pattern("file:///foo/bar/test.html").HasPath()); +} \ No newline at end of file diff --git a/chromium/components/content_settings/core/common/content_settings_types.h b/chromium/components/content_settings/core/common/content_settings_types.h index dc8cf6f5b82..724297e4c32 100644 --- a/chromium/components/content_settings/core/common/content_settings_types.h +++ b/chromium/components/content_settings/core/common/content_settings_types.h @@ -35,7 +35,6 @@ enum ContentSettingsType { CONTENT_SETTINGS_TYPE_PPAPI_BROKER, CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, CONTENT_SETTINGS_TYPE_MIDI_SYSEX, - CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS, CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER, CONTENT_SETTINGS_TYPE_APP_BANNER, @@ -46,6 +45,8 @@ enum ContentSettingsType { CONTENT_SETTINGS_TYPE_KEYGEN, CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC, CONTENT_SETTINGS_TYPE_AUTOPLAY, + CONTENT_SETTINGS_TYPE_PROMPT_NO_DECISION_COUNT, + CONTENT_SETTINGS_TYPE_IMPORTANT_SITE_INFO, // WARNING: This enum is going to be removed soon. Do not depend on NUM_TYPES. CONTENT_SETTINGS_NUM_TYPES_DO_NOT_USE, diff --git a/chromium/components/content_settings/core/common/pref_names.cc b/chromium/components/content_settings/core/common/pref_names.cc index ebcf7f0608e..36a7e628b32 100644 --- a/chromium/components/content_settings/core/common/pref_names.cc +++ b/chromium/components/content_settings/core/common/pref_names.cc @@ -18,6 +18,12 @@ const char kContentSettingsVersion[] = "profile.content_settings.pref_version"; const char kContentSettingsWindowLastTabIndex[] = "content_settings_window.last_tab_index"; +// Integer that indicates the status of migrating domain scoped settings to +// origin scoped settings. +// TODO(lshang): Remove this when all migration is done. See crbug.com/621398. +const char kDomainToOriginMigrationStatus[] = + "profile.content_settings.domain_to_origin_migration_status"; + // Preferences that are exclusively used to store managed values for default // content settings. const char kManagedDefaultCookiesSetting[] = diff --git a/chromium/components/content_settings/core/common/pref_names.h b/chromium/components/content_settings/core/common/pref_names.h index aa1af1cf226..9ddbd4c882d 100644 --- a/chromium/components/content_settings/core/common/pref_names.h +++ b/chromium/components/content_settings/core/common/pref_names.h @@ -16,6 +16,7 @@ namespace prefs { extern const char kBlockThirdPartyCookies[]; extern const char kContentSettingsVersion[]; extern const char kContentSettingsWindowLastTabIndex[]; +extern const char kDomainToOriginMigrationStatus[]; extern const char kManagedDefaultCookiesSetting[]; extern const char kManagedDefaultImagesSetting[]; -- cgit v1.2.1