1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be 3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file. 4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/content_settings/content_settings_base_provider.h" 7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/command_line.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/logging.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/chrome_switches.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "googleurl/src/gurl.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/base/net_util.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace { 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// True if a given content settings type requires additional resource 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// identifiers. 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenconst bool kRequiresResourceIdentifier[CONTENT_SETTINGS_NUM_TYPES] = { 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, // CONTENT_SETTINGS_TYPE_COOKIES 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, // CONTENT_SETTINGS_TYPE_IMAGES 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, // CONTENT_SETTINGS_TYPE_JAVASCRIPT 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen true, // CONTENT_SETTINGS_TYPE_PLUGINS 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, // CONTENT_SETTINGS_TYPE_POPUPS 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, // Not used for Geolocation 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen false, // Not used for Notifications 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // namespace 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace content_settings { 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 32dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenExtendedContentSettings::ExtendedContentSettings() {} 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 34dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenExtendedContentSettings::ExtendedContentSettings( 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ExtendedContentSettings& rhs) 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : content_settings(rhs.content_settings), 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen content_settings_for_resources(rhs.content_settings_for_resources) { 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 40dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenExtendedContentSettings::~ExtendedContentSettings() {} 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenBaseProvider::BaseProvider(bool is_incognito) 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : is_incognito_(is_incognito) { 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 46dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenBaseProvider::~BaseProvider() {} 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool BaseProvider::RequiresResourceIdentifier( 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsType content_type) const { 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (CommandLine::ForCurrentProcess()->HasSwitch( 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableResourceContentSettings)) { 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return kRequiresResourceIdentifier[content_type]; 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return false; 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool BaseProvider::AllDefault( 59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ExtendedContentSettings& settings) const { 60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (size_t i = 0; i < arraysize(settings.content_settings.settings); ++i) { 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (settings.content_settings.settings[i] != CONTENT_SETTING_DEFAULT) 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return false; 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return settings.content_settings_for_resources.empty(); 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 67dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenContentSetting BaseProvider::GetContentSetting( 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& requesting_url, 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& embedding_url, 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsType content_type, 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ResourceIdentifier& resource_identifier) const { 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Support for embedding_patterns is not implemented yet. 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK(requesting_url == embedding_url); 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (!RequiresResourceIdentifier(content_type) || 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen (RequiresResourceIdentifier(content_type) && resource_identifier.empty())) 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return GetNonDefaultContentSettings(requesting_url).settings[content_type]; 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Resolve content settings with resource identifier. 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // 1. Check for pattern that exactly match the url/host 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // 1.1 In the content-settings-map 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 1.2 In the incognito content-settings-map 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // 3. Shorten the url subdomain by subdomain and try to find a pattern in 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // 3.1 OTR content-settings-map 85dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // 3.2 content-settings-map 86dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::AutoLock auto_lock(lock_); 87dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string host(net::GetHostOrSpecFromURL(requesting_url)); 88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsTypeResourceIdentifierPair 89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen requested_setting(content_type, resource_identifier); 90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 91dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Check for exact matches first. 92dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen HostContentSettings::const_iterator i(host_content_settings_.find(host)); 93dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (i != host_content_settings_.end() && 94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.find(requested_setting) != 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.end()) { 96dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return i->second.content_settings_for_resources.find( 97dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen requested_setting)->second; 98dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 99dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If this map is not for an incognito profile, these searches will never 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // match. The additional incognito exceptions always overwrite the 102dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // regular ones. 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen i = incognito_settings_.find(host); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (i != incognito_settings_.end() && 105dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.find(requested_setting) != 106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.end()) { 107dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return i->second.content_settings_for_resources.find( 108dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen requested_setting)->second; 109dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 110dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 111dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Match patterns starting with the most concrete pattern match. 112dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (std::string key = 113dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string(ContentSettingsPattern::kDomainWildcard) + host; ; ) { 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen HostContentSettings::const_iterator i(incognito_settings_.find(key)); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (i != incognito_settings_.end() && 116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.find(requested_setting) != 117dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.end()) { 118dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return i->second.content_settings_for_resources.find( 119dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen requested_setting)->second; 120dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 121dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i = host_content_settings_.find(key); 123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (i != host_content_settings_.end() && 124dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.find(requested_setting) != 125dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.end()) { 126dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return i->second.content_settings_for_resources.find( 127dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen requested_setting)->second; 128dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 129dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 130dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const size_t next_dot = 131dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen key.find('.', ContentSettingsPattern::kDomainWildcardLength); 132dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (next_dot == std::string::npos) 133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen key.erase(ContentSettingsPattern::kDomainWildcardLength, 135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen next_dot - ContentSettingsPattern::kDomainWildcardLength + 1); 136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return CONTENT_SETTING_DEFAULT; 139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid BaseProvider::GetAllContentSettingsRules( 142dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsType content_type, 143dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ResourceIdentifier& resource_identifier, 144dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Rules* content_setting_rules) const { 145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DCHECK(content_setting_rules); 146dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen content_setting_rules->clear(); 147dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 148dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const HostContentSettings* map_to_return = 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen is_incognito_ ? &incognito_settings_ : &host_content_settings_; 150dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsTypeResourceIdentifierPair requested_setting( 151dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen content_type, resource_identifier); 152dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 153dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::AutoLock auto_lock(lock_); 154dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (HostContentSettings::const_iterator i(map_to_return->begin()); 155dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i != map_to_return->end(); ++i) { 156dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSetting setting; 157dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (RequiresResourceIdentifier(content_type)) { 158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (i->second.content_settings_for_resources.find(requested_setting) != 159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i->second.content_settings_for_resources.end()) { 160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen setting = i->second.content_settings_for_resources.find( 161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen requested_setting)->second; 162dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 163dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen setting = CONTENT_SETTING_DEFAULT; 164dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 165dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } else { 166dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen setting = i->second.content_settings.settings[content_type]; 167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 168dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (setting != CONTENT_SETTING_DEFAULT) { 169dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Use of push_back() relies on the map iterator traversing in order of 170dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // ascending keys. 171dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen content_setting_rules->push_back(Rule(ContentSettingsPattern(i->first), 172dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsPattern(i->first), 173dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen setting)); 174dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 176dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 177dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 178dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenContentSettings BaseProvider::GetNonDefaultContentSettings( 179dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& url) const { 180dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::AutoLock auto_lock(lock_); 181dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 182dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string host(net::GetHostOrSpecFromURL(url)); 183dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettings output; 184dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) 185dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen output.settings[j] = CONTENT_SETTING_DEFAULT; 186dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 187dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Check for exact matches first. 188dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen HostContentSettings::const_iterator i(host_content_settings_.find(host)); 189dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (i != host_content_settings_.end()) 190dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen output = i->second.content_settings; 191dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If this map is not for an incognito profile, these searches will never 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // match. The additional incognito exceptions always overwrite the 194dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // regular ones. 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen i = incognito_settings_.find(host); 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (i != incognito_settings_.end()) { 197dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) 198dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (i->second.content_settings.settings[j] != CONTENT_SETTING_DEFAULT) 199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen output.settings[j] = i->second.content_settings.settings[j]; 200dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Match patterns starting with the most concrete pattern match. 203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (std::string key = 204dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string(ContentSettingsPattern::kDomainWildcard) + host; ; ) { 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen HostContentSettings::const_iterator i(incognito_settings_.find(key)); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (i != incognito_settings_.end()) { 207dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) { 208dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (output.settings[j] == CONTENT_SETTING_DEFAULT) 209dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen output.settings[j] = i->second.content_settings.settings[j]; 210dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 211dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 212dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen i = host_content_settings_.find(key); 213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (i != host_content_settings_.end()) { 214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen for (int j = 0; j < CONTENT_SETTINGS_NUM_TYPES; ++j) { 215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (output.settings[j] == CONTENT_SETTING_DEFAULT) 216dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen output.settings[j] = i->second.content_settings.settings[j]; 217dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 218dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 219dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const size_t next_dot = 220dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen key.find('.', ContentSettingsPattern::kDomainWildcardLength); 221dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (next_dot == std::string::npos) 222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen break; 223dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen key.erase(ContentSettingsPattern::kDomainWildcardLength, 224dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen next_dot - ContentSettingsPattern::kDomainWildcardLength + 1); 225dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 226dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 227dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return output; 228dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 229dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 230dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid BaseProvider::UpdateContentSettingsMap( 231dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ContentSettingsPattern& requesting_pattern, 232dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ContentSettingsPattern& embedding_pattern, 233dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSettingsType content_type, 234dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const ResourceIdentifier& resource_identifier, 235dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSetting content_setting) { 236dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string pattern_str(requesting_pattern.CanonicalizePattern()); 237dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen HostContentSettings* content_settings_map = host_content_settings(); 238dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ExtendedContentSettings& extended_settings = 239dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen (*content_settings_map)[pattern_str]; 240dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen extended_settings.content_settings.settings[content_type] = content_setting; 241dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 242dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 243dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// static 244dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenContentSetting BaseProvider::ClickToPlayFixup(ContentSettingsType content_type, 245dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ContentSetting setting) { 246dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen if (setting == CONTENT_SETTING_ASK && 247dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen content_type == CONTENT_SETTINGS_TYPE_PLUGINS && 248dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen !CommandLine::ForCurrentProcess()->HasSwitch( 249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen switches::kEnableClickToPlay)) { 250dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return CONTENT_SETTING_BLOCK; 251dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen } 252dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return setting; 253dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 254dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} // namespace content_settings 256