content_settings_utils.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
17f8f3f7f6400291d30531c88a98511f9fc626b4cChad Rosier// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// Use of this source code is governed by a BSD-style license that can be 3d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// found in the LICENSE file. 4d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 5d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include "chrome/browser/content_settings/content_settings_utils.h" 6d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 7d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include <vector> 8d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 9d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include "base/command_line.h" 1022fee2dff4c43b551aefa44a96ca74fcade6bfacEvan Cheng#include "base/logging.h" 110ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach#include "base/memory/scoped_ptr.h" 12d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include "base/memory/scoped_vector.h" 13d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include "base/strings/string_split.h" 14d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include "base/values.h" 15e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#include "chrome/browser/content_settings/host_content_settings_map.h" 16e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng#include "chrome/common/chrome_switches.h" 17d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#include "components/content_settings/core/browser/content_settings_provider.h" 181f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "components/content_settings/core/browser/content_settings_rule.h" 19fbf3b4a07690751f72302757058ab0298dfb832eJim Grosbach#include "components/content_settings/core/common/content_settings_pattern.h" 20fbf3b4a07690751f72302757058ab0298dfb832eJim Grosbach#include "url/gurl.h" 2199405df044f2c584242e711cc9023ec90356da82Bruno Cardoso Lopes 22d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnernamespace { 23d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 24d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner// The names of the ContentSettingsType values, for use with dictionary prefs. 25d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnerconst char* kTypeNames[] = { 26d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "cookies", 270ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach "images", 28e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng "javascript", 2906801722a43c697eff0acee905de6b50257ce19bJim Grosbach "plugins", 30d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "popups", 3106801722a43c697eff0acee905de6b50257ce19bJim Grosbach "geolocation", 3206801722a43c697eff0acee905de6b50257ce19bJim Grosbach "notifications", 33d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "auto-select-certificate", 340ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach "fullscreen", 35d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "mouselock", 36e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng "mixed-script", 37d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "media-stream", 38d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "media-stream-mic", 39d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "media-stream-camera", 40d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "register-protocol-handler", 41d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "ppapi-broker", 42d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "multiple-automatic-downloads", 435196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer "midi-sysex", 445196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer "push-messaging", 455196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer "ssl-cert-decisions", 465196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer#if defined(OS_WIN) 475196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer "metro-switch-to-desktop", 485196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer#elif defined(OS_ANDROID) || defined(OS_CHROMEOS) 495196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer "protected-media-identifier", 505196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer#endif 515196c12e9fdec9ef3c63d96cb529c1c1cb732773Benjamin Kramer#if defined(OS_ANDROID) 52d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner "app-banner", 53d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner#endif 54e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng}; 55d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris LattnerCOMPILE_ASSERT(arraysize(kTypeNames) == CONTENT_SETTINGS_NUM_TYPES, 56d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner type_names_incorrect_size); 57e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 58d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnerconst char kPatternSeparator[] = ","; 590ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach 60cb778a8634454c70d88955b3732f330a6cbe5b07Chris Lattner} // namespace 61cb778a8634454c70d88955b3732f330a6cbe5b07Chris Lattner 62cb778a8634454c70d88955b3732f330a6cbe5b07Chris Lattnernamespace content_settings { 6339bdc5526f9bb4985c5ea7711e603bb44707ed42Craig Topper 640ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbachstd::string GetTypeName(ContentSettingsType type) { 65e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return std::string(kTypeNames[type]); 6639bdc5526f9bb4985c5ea7711e603bb44707ed42Craig Topper} 6739bdc5526f9bb4985c5ea7711e603bb44707ed42Craig Topper 6839bdc5526f9bb4985c5ea7711e603bb44707ed42Craig Topperbool GetTypeFromName(const std::string& name, 6939bdc5526f9bb4985c5ea7711e603bb44707ed42Craig Topper ContentSettingsType* return_setting) { 700ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach for (size_t type = 0; type < CONTENT_SETTINGS_NUM_TYPES; ++type) { 71d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (name.compare(kTypeNames[type]) == 0) { 72d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner *return_setting = static_cast<ContentSettingsType>(type); 7339bdc5526f9bb4985c5ea7711e603bb44707ed42Craig Topper return true; 74d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 750ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach } 76d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return false; 77d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 787e0d22cbf7b41e93279f574c9b3c557cdf517dcbJim Grosbach 790ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbachstd::string ContentSettingToString(ContentSetting setting) { 80d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner switch (setting) { 81d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner case CONTENT_SETTING_ALLOW: 82e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return "allow"; 830ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach case CONTENT_SETTING_ASK: 84d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return "ask"; 85d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner case CONTENT_SETTING_BLOCK: 86e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return "block"; 87d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner case CONTENT_SETTING_SESSION_ONLY: 88d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return "session"; 890ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach case CONTENT_SETTING_DEFAULT: 90d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return "default"; 91d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner case CONTENT_SETTING_NUM_SETTINGS: 92d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner NOTREACHED(); 93d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 94e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 95e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return std::string(); 96e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng} 97e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 98e837dead3c8dc3445ef6a0e2322179c57e264a13Evan ChengContentSetting ContentSettingFromString(const std::string& name) { 99d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (name == "allow") 100d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return CONTENT_SETTING_ALLOW; 101d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (name == "ask") 102c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen return CONTENT_SETTING_ASK; 103d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (name == "block") 104d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return CONTENT_SETTING_BLOCK; 105d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (name == "session") 106d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return CONTENT_SETTING_SESSION_ONLY; 107d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 108d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner NOTREACHED() << name << " is not a recognized content setting."; 10973739d0bf19af3944aff6afaea2c4eda61061652Bill Wendling return CONTENT_SETTING_DEFAULT; 110c4af4638dfdab0dc3b6257276cfad2ee45053060Evan Cheng} 1110f040a258ff6a2372fc232212b5e4189e8e7185dEvan Cheng 112f2c64ef519b38a4328809b27b4a3a8e0c26e9709Jakob Stoklund Olesenstd::string CreatePatternString( 113d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner const ContentSettingsPattern& item_pattern, 11415511cf1660cfd6bb8b8e8fca2db9450f50430eeDan Gohman const ContentSettingsPattern& top_level_frame_pattern) { 115dcc8b4f5d3f62ae84aae100638085dedeee91588Chris Lattner return item_pattern.ToString() 116d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner + std::string(kPatternSeparator) 117c4af4638dfdab0dc3b6257276cfad2ee45053060Evan Cheng + top_level_frame_pattern.ToString(); 118c4af4638dfdab0dc3b6257276cfad2ee45053060Evan Cheng} 119a22edc82cab86be4cb8876da1e6e78f82bb47a3eChris Lattner 120d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris LattnerPatternPair ParsePatternString(const std::string& pattern_str) { 121d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner std::vector<std::string> pattern_str_list; 122533297b58da8c74bec65551e1aface9801fc2259Dan Gohman base::SplitString(pattern_str, kPatternSeparator[0], &pattern_str_list); 12337fefc20d3a1e3934a377567d54a141f67752227Evan Cheng 1248370d38adee63b3a4d87bfe81be4aacc55fe7cdaBill Wendling // If the |pattern_str| is an empty string then the |pattern_string_list| 125799d697bf8d45ec404d0d105fc788ea5cf81c841Evan Cheng // contains a single empty string. In this case the empty string will be 126799d697bf8d45ec404d0d105fc788ea5cf81c841Evan Cheng // removed to signal an invalid |pattern_str|. Invalid pattern strings are 127799d697bf8d45ec404d0d105fc788ea5cf81c841Evan Cheng // handle by the "if"-statment below. So the order of the if statements here 128d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner // must be preserved. 129d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (pattern_str_list.size() == 1) { 130d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (pattern_str_list[0].empty()) { 131e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng pattern_str_list.pop_back(); 132e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } else { 133e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng pattern_str_list.push_back("*"); 134e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 135e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 136e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng 137d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (pattern_str_list.size() > 2 || 138b89be6150a8ea38fdaa2a242f6442e2d73326dabEvan Cheng pattern_str_list.size() == 0) { 139d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return PatternPair(ContentSettingsPattern(), 140b89be6150a8ea38fdaa2a242f6442e2d73326dabEvan Cheng ContentSettingsPattern()); 141d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 14216884415db751c75f2133bd04921393c792b1158Owen Anderson 143b89be6150a8ea38fdaa2a242f6442e2d73326dabEvan Cheng PatternPair pattern_pair; 14499405df044f2c584242e711cc9023ec90356da82Bruno Cardoso Lopes pattern_pair.first = 145fac259814923d091942b230e7bd002a8d1130bc3Craig Topper ContentSettingsPattern::FromString(pattern_str_list[0]); 146fac259814923d091942b230e7bd002a8d1130bc3Craig Topper pattern_pair.second = 147e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng ContentSettingsPattern::FromString(pattern_str_list[1]); 148d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return pattern_pair; 14946367768f75c860d64874067800711120fdbfc22Jim Grosbach} 150d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 151d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris LattnerContentSetting ValueToContentSetting(const base::Value* value) { 152e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng ContentSetting setting = CONTENT_SETTING_DEFAULT; 153d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner bool valid = ParseContentSettingValue(value, &setting); 154d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner DCHECK(valid); 155d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return setting; 156d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 157d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 158d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnerbool ParseContentSettingValue(const base::Value* value, 159d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner ContentSetting* setting) { 160d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (!value) { 16146367768f75c860d64874067800711120fdbfc22Jim Grosbach *setting = CONTENT_SETTING_DEFAULT; 162d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return true; 163d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 164d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner int int_value = -1; 1650ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach if (!value->GetAsInteger(&int_value)) 16646367768f75c860d64874067800711120fdbfc22Jim Grosbach return false; 167d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner *setting = IntToContentSetting(int_value); 168d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return *setting != CONTENT_SETTING_DEFAULT; 169d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 170d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 171d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnerbase::Value* GetContentSettingValueAndPatterns( 172d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner const ProviderInterface* provider, 173d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner const GURL& primary_url, 1740ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach const GURL& secondary_url, 17546367768f75c860d64874067800711120fdbfc22Jim Grosbach ContentSettingsType content_type, 1760ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach const std::string& resource_identifier, 177b5544940c17720f51a74fea9fba33f26fafe4819Dan Gohman bool include_incognito, 178b5544940c17720f51a74fea9fba33f26fafe4819Dan Gohman ContentSettingsPattern* primary_pattern, 179d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner ContentSettingsPattern* secondary_pattern) { 180d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (include_incognito) { 181d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner // Check incognito-only specific settings. It's essential that the 1820ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach // |RuleIterator| gets out of scope before we get a rule iterator for the 18346367768f75c860d64874067800711120fdbfc22Jim Grosbach // normal mode. 1845a96b3dad2f634c9081c8b2b6c2575441dc5a2bdEvan Cheng scoped_ptr<RuleIterator> incognito_rule_iterator( 1857c2a4a30e0e16762c75adacebd05ec9fcbccf16bEvan Cheng provider->GetRuleIterator(content_type, resource_identifier, true)); 18646367768f75c860d64874067800711120fdbfc22Jim Grosbach base::Value* value = GetContentSettingValueAndPatterns( 187d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner incognito_rule_iterator.get(), primary_url, secondary_url, 188d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner primary_pattern, secondary_pattern); 189d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (value) 190d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return value; 191e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng } 192d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner // No settings from the incognito; use the normal mode. 1930ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach scoped_ptr<RuleIterator> rule_iterator( 19446367768f75c860d64874067800711120fdbfc22Jim Grosbach provider->GetRuleIterator(content_type, resource_identifier, false)); 195d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return GetContentSettingValueAndPatterns( 196d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner rule_iterator.get(), primary_url, secondary_url, 197e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng primary_pattern, secondary_pattern); 198d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 1990ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach 20046367768f75c860d64874067800711120fdbfc22Jim Grosbachbase::Value* GetContentSettingValueAndPatterns( 201c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen RuleIterator* rule_iterator, 202c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen const GURL& primary_url, 203c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen const GURL& secondary_url, 204c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen ContentSettingsPattern* primary_pattern, 205c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen ContentSettingsPattern* secondary_pattern) { 206c291e2f5780c3a8470113a2a58c1fa680cd54b20Jakob Stoklund Olesen while (rule_iterator->HasNext()) { 20746367768f75c860d64874067800711120fdbfc22Jim Grosbach const Rule& rule = rule_iterator->Next(); 208d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (rule.primary_pattern.Matches(primary_url) && 209e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng rule.secondary_pattern.Matches(secondary_url)) { 210d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner if (primary_pattern) 2110ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach *primary_pattern = rule.primary_pattern; 21246367768f75c860d64874067800711120fdbfc22Jim Grosbach if (secondary_pattern) 213d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner *secondary_pattern = rule.secondary_pattern; 214e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng return rule.value.get()->DeepCopy(); 215d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner } 2160ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach } 21746367768f75c860d64874067800711120fdbfc22Jim Grosbach return NULL; 218d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 219d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 220d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnerbase::Value* GetContentSettingValue(const ProviderInterface* provider, 221e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng const GURL& primary_url, 222d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner const GURL& secondary_url, 2230ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach ContentSettingsType content_type, 22446367768f75c860d64874067800711120fdbfc22Jim Grosbach const std::string& resource_identifier, 225d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner bool include_incognito) { 226d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return GetContentSettingValueAndPatterns(provider, primary_url, secondary_url, 227d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner content_type, resource_identifier, 228d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner include_incognito, NULL, NULL); 229d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 230d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 231e837dead3c8dc3445ef6a0e2322179c57e264a13Evan ChengContentSetting GetContentSetting(const ProviderInterface* provider, 232d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner const GURL& primary_url, 2330ba45d4fb3e11d8085b01008e31477bece20d01dJim Grosbach const GURL& secondary_url, 23446367768f75c860d64874067800711120fdbfc22Jim Grosbach ContentSettingsType content_type, 235d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner const std::string& resource_identifier, 236d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner bool include_incognito) { 237d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner scoped_ptr<base::Value> value( 238d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner GetContentSettingValue(provider, primary_url, secondary_url, 239e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng content_type, resource_identifier, 240d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner include_incognito)); 241d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner return ValueToContentSetting(value.get()); 24246367768f75c860d64874067800711120fdbfc22Jim Grosbach} 243d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 244d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattnervoid GetRendererContentSettingRules(const HostContentSettingsMap* map, 245e837dead3c8dc3445ef6a0e2322179c57e264a13Evan Cheng RendererContentSettingRules* rules) { 246d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner map->GetSettingsForOneType( 24773739d0bf19af3944aff6afaea2c4eda61061652Bill Wendling CONTENT_SETTINGS_TYPE_IMAGES, std::string(), &(rules->image_rules)); 24846367768f75c860d64874067800711120fdbfc22Jim Grosbach map->GetSettingsForOneType( 249d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string(), &(rules->script_rules)); 250d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} 251d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner 252d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner} // namespace content_settings 253d3f99e2bbf5e62261c8948127aacfe9a7d3b2456Chris Lattner