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