OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/extension_content_settings_store.h" | 5 #include "chrome/browser/extensions/extension_content_settings_store.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stl_util-inl.h" | 10 #include "base/stl_util-inl.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "chrome/browser/extensions/extension_content_settings_api_constants.h" | 12 #include "chrome/browser/extensions/extension_content_settings_api_constants.h" |
13 #include "chrome/browser/extensions/extension_content_settings_helpers.h" | 13 #include "chrome/browser/extensions/extension_content_settings_helpers.h" |
14 #include "content/browser/browser_thread.h" | 14 #include "content/browser/browser_thread.h" |
15 | 15 |
16 namespace helpers = extension_content_settings_helpers; | 16 namespace helpers = extension_content_settings_helpers; |
17 namespace keys = extension_content_settings_api_constants; | 17 namespace keys = extension_content_settings_api_constants; |
18 | 18 |
19 using content_settings::ResourceIdentifier; | 19 using content_settings::ResourceIdentifier; |
20 | 20 |
21 struct ExtensionContentSettingsStore::ExtensionEntry { | 21 struct ExtensionContentSettingsStore::ExtensionEntry { |
22 // Installation time of the extension. | 22 // Installation time of the extension. |
23 base::Time install_time; | 23 base::Time install_time; |
24 // Whether extension is enabled in the profile. | 24 // Whether extension is enabled in the profile. |
25 bool enabled; | 25 bool enabled; |
26 // Content settings. | 26 // Content settings. |
27 ContentSettingSpecList settings; | 27 ContentSettingSpecList settings; |
28 // Incognito content settings. | 28 // Persistent incognito content settings. |
29 ContentSettingSpecList incognito_settings; | 29 ContentSettingSpecList incognito_persistent_settings; |
30 // Session-only incognito content settings. | |
31 ContentSettingSpecList incognito_session_only_settings; | |
30 }; | 32 }; |
31 | 33 |
32 ExtensionContentSettingsStore::ExtensionContentSettingsStore() { | 34 ExtensionContentSettingsStore::ExtensionContentSettingsStore() { |
33 DCHECK(OnCorrectThread()); | 35 DCHECK(OnCorrectThread()); |
34 } | 36 } |
35 | 37 |
36 ExtensionContentSettingsStore::~ExtensionContentSettingsStore() { | 38 ExtensionContentSettingsStore::~ExtensionContentSettingsStore() { |
37 DCHECK(OnCorrectThread()); | 39 DCHECK(OnCorrectThread()); |
38 NotifyOfDestruction(); | 40 NotifyOfDestruction(); |
39 STLDeleteValues(&entries_); | 41 STLDeleteValues(&entries_); |
40 } | 42 } |
41 | 43 |
42 void ExtensionContentSettingsStore::SetExtensionContentSetting( | 44 void ExtensionContentSettingsStore::SetExtensionContentSetting( |
43 const std::string& ext_id, | 45 const std::string& ext_id, |
44 const ContentSettingsPattern& embedded_pattern, | 46 const ContentSettingsPattern& embedded_pattern, |
45 const ContentSettingsPattern& top_level_pattern, | 47 const ContentSettingsPattern& top_level_pattern, |
46 ContentSettingsType type, | 48 ContentSettingsType type, |
47 const content_settings::ResourceIdentifier& identifier, | 49 const content_settings::ResourceIdentifier& identifier, |
48 ContentSetting setting, | 50 ContentSetting setting, |
49 bool incognito) { | 51 extension_prefs_scope::Scope scope) { |
50 { | 52 { |
51 base::AutoLock lock(lock_); | 53 base::AutoLock lock(lock_); |
52 ContentSettingSpecList* setting_spec_list = | 54 ContentSettingSpecList* setting_spec_list = |
53 GetContentSettingSpecList(ext_id, incognito); | 55 GetContentSettingSpecList(ext_id, scope); |
54 | 56 |
55 // Find |ContentSettingSpec|. | 57 // Find |ContentSettingSpec|. |
56 ContentSettingSpecList::iterator setting_spec = setting_spec_list->begin(); | 58 ContentSettingSpecList::iterator setting_spec = setting_spec_list->begin(); |
57 while (setting_spec != setting_spec_list->end()) { | 59 while (setting_spec != setting_spec_list->end()) { |
58 if (setting_spec->embedded_pattern == embedded_pattern && | 60 if (setting_spec->embedded_pattern == embedded_pattern && |
59 setting_spec->top_level_pattern == top_level_pattern && | 61 setting_spec->top_level_pattern == top_level_pattern && |
60 setting_spec->content_type == type && | 62 setting_spec->content_type == type && |
61 setting_spec->resource_identifier == identifier) { | 63 setting_spec->resource_identifier == identifier) { |
62 break; | 64 break; |
63 } | 65 } |
(...skipping 14 matching lines...) Expand all Loading... | |
78 setting_spec->setting = setting; | 80 setting_spec->setting = setting; |
79 } else { | 81 } else { |
80 setting_spec_list->erase(setting_spec); | 82 setting_spec_list->erase(setting_spec); |
81 } | 83 } |
82 } | 84 } |
83 | 85 |
84 // Send notification that content settings changed. | 86 // Send notification that content settings changed. |
85 // TODO(markusheintz): Notifications should only be sent if the set content | 87 // TODO(markusheintz): Notifications should only be sent if the set content |
86 // setting is effective and not hidden by another setting of another | 88 // setting is effective and not hidden by another setting of another |
87 // extension installed more recently. | 89 // extension installed more recently. |
88 NotifyOfContentSettingChanged(ext_id, incognito); | 90 NotifyOfContentSettingChanged(ext_id, |
91 scope != extension_prefs_scope::kRegular); | |
89 } | 92 } |
90 | 93 |
91 void ExtensionContentSettingsStore::RegisterExtension( | 94 void ExtensionContentSettingsStore::RegisterExtension( |
92 const std::string& ext_id, | 95 const std::string& ext_id, |
93 const base::Time& install_time, | 96 const base::Time& install_time, |
94 bool is_enabled) { | 97 bool is_enabled) { |
95 base::AutoLock lock(lock_); | 98 base::AutoLock lock(lock_); |
96 ExtensionEntryMap::iterator i = entries_.find(ext_id); | 99 ExtensionEntryMap::iterator i = entries_.find(ext_id); |
97 if (i != entries_.end()) | 100 if (i != entries_.end()) |
98 delete i->second; | 101 delete i->second; |
99 | 102 |
100 entries_[ext_id] = new ExtensionEntry; | 103 entries_[ext_id] = new ExtensionEntry; |
101 entries_[ext_id]->install_time = install_time; | 104 entries_[ext_id]->install_time = install_time; |
102 entries_[ext_id]->enabled = is_enabled; | 105 entries_[ext_id]->enabled = is_enabled; |
103 } | 106 } |
104 | 107 |
105 void ExtensionContentSettingsStore::UnregisterExtension( | 108 void ExtensionContentSettingsStore::UnregisterExtension( |
106 const std::string& ext_id) { | 109 const std::string& ext_id) { |
107 bool notify = false; | 110 bool notify = false; |
108 bool notify_incognito = false; | 111 bool notify_incognito = false; |
109 { | 112 { |
110 base::AutoLock lock(lock_); | 113 base::AutoLock lock(lock_); |
111 ExtensionEntryMap::iterator i = entries_.find(ext_id); | 114 ExtensionEntryMap::iterator i = entries_.find(ext_id); |
112 if (i == entries_.end()) | 115 if (i == entries_.end()) |
113 return; | 116 return; |
114 notify = !i->second->settings.empty(); | 117 notify = !i->second->settings.empty(); |
115 notify_incognito = !i->second->incognito_settings.empty(); | 118 notify_incognito = !i->second->incognito_persistent_settings.empty() || |
119 !i->second->incognito_session_only_settings.empty(); | |
116 | 120 |
117 delete i->second; | 121 delete i->second; |
118 entries_.erase(i); | 122 entries_.erase(i); |
119 } | 123 } |
120 if (notify) | 124 if (notify) |
121 NotifyOfContentSettingChanged(ext_id, false); | 125 NotifyOfContentSettingChanged(ext_id, false); |
122 if (notify_incognito) | 126 if (notify_incognito) |
123 NotifyOfContentSettingChanged(ext_id, true); | 127 NotifyOfContentSettingChanged(ext_id, true); |
124 } | 128 } |
125 | 129 |
126 void ExtensionContentSettingsStore::SetExtensionState( | 130 void ExtensionContentSettingsStore::SetExtensionState( |
127 const std::string& ext_id, bool is_enabled) { | 131 const std::string& ext_id, bool is_enabled) { |
128 bool notify = false; | 132 bool notify = false; |
129 bool notify_incognito = false; | 133 bool notify_incognito = false; |
130 { | 134 { |
131 base::AutoLock lock(lock_); | 135 base::AutoLock lock(lock_); |
132 ExtensionEntryMap::const_iterator i = entries_.find(ext_id); | 136 ExtensionEntryMap::const_iterator i = entries_.find(ext_id); |
133 if (i == entries_.end()) | 137 if (i == entries_.end()) |
134 return; | 138 return; |
135 notify = !i->second->settings.empty(); | 139 notify = !i->second->settings.empty(); |
136 notify_incognito = !i->second->incognito_settings.empty(); | 140 notify_incognito = !i->second->incognito_persistent_settings.empty() || |
141 !i->second->incognito_session_only_settings.empty(); | |
137 | 142 |
138 i->second->enabled = is_enabled; | 143 i->second->enabled = is_enabled; |
139 } | 144 } |
140 if (notify) | 145 if (notify) |
141 NotifyOfContentSettingChanged(ext_id, false); | 146 NotifyOfContentSettingChanged(ext_id, false); |
142 if (notify_incognito) | 147 if (notify_incognito) |
143 NotifyOfContentSettingChanged(ext_id, true); | 148 NotifyOfContentSettingChanged(ext_id, true); |
144 } | 149 } |
145 | 150 |
146 ExtensionContentSettingsStore::ContentSettingSpecList* | 151 ExtensionContentSettingsStore::ContentSettingSpecList* |
147 ExtensionContentSettingsStore::GetContentSettingSpecList( | 152 ExtensionContentSettingsStore::GetContentSettingSpecList( |
148 const std::string& ext_id, | 153 const std::string& ext_id, |
149 bool incognito) { | 154 extension_prefs_scope::Scope scope) { |
150 ExtensionEntryMap::const_iterator i = entries_.find(ext_id); | 155 ExtensionEntryMap::const_iterator i = entries_.find(ext_id); |
151 DCHECK(i != entries_.end()); | 156 DCHECK(i != entries_.end()); |
152 return incognito ? &(i->second->incognito_settings) | 157 switch (scope) { |
153 : &(i->second->settings); | 158 case extension_prefs_scope::kRegular: |
159 return &(i->second->settings); | |
160 case extension_prefs_scope::kIncognitoPersistent: | |
161 return &(i->second->incognito_persistent_settings); | |
162 case extension_prefs_scope::kIncognitoSessionOnly: | |
163 return &(i->second->incognito_session_only_settings); | |
164 } | |
165 NOTREACHED(); | |
166 return NULL; | |
154 } | 167 } |
155 | 168 |
156 const ExtensionContentSettingsStore::ContentSettingSpecList* | 169 const ExtensionContentSettingsStore::ContentSettingSpecList* |
157 ExtensionContentSettingsStore::GetContentSettingSpecList( | 170 ExtensionContentSettingsStore::GetContentSettingSpecList( |
158 const std::string& ext_id, | 171 const std::string& ext_id, |
159 bool incognito) const { | 172 extension_prefs_scope::Scope scope) const { |
160 ExtensionEntryMap::const_iterator i = entries_.find(ext_id); | 173 ExtensionEntryMap::const_iterator i = entries_.find(ext_id); |
161 DCHECK(i != entries_.end()); | 174 DCHECK(i != entries_.end()); |
162 return incognito ? &(i->second->incognito_settings) | 175 switch (scope) { |
163 : &(i->second->settings); | 176 case extension_prefs_scope::kRegular: |
177 return &(i->second->settings); | |
178 case extension_prefs_scope::kIncognitoPersistent: | |
179 return &(i->second->incognito_persistent_settings); | |
180 case extension_prefs_scope::kIncognitoSessionOnly: | |
181 return &(i->second->incognito_session_only_settings); | |
182 } | |
183 NOTREACHED(); | |
184 return NULL; | |
164 } | 185 } |
165 | 186 |
166 | |
167 ContentSetting ExtensionContentSettingsStore::GetContentSettingFromSpecList( | 187 ContentSetting ExtensionContentSettingsStore::GetContentSettingFromSpecList( |
168 const GURL& embedded_url, | 188 const GURL& embedded_url, |
169 const GURL& top_level_url, | 189 const GURL& top_level_url, |
170 ContentSettingsType type, | 190 ContentSettingsType type, |
171 const content_settings::ResourceIdentifier& identifier, | 191 const content_settings::ResourceIdentifier& identifier, |
172 const ContentSettingSpecList& setting_spec_list) const { | 192 const ContentSettingSpecList& setting_spec_list) const { |
173 ContentSettingSpecList::const_iterator winner_spec = setting_spec_list.end(); | 193 ContentSettingSpecList::const_iterator winner_spec = setting_spec_list.end(); |
174 | 194 |
175 for (ContentSettingSpecList::const_iterator spec = setting_spec_list.begin(); | 195 for (ContentSettingSpecList::const_iterator spec = setting_spec_list.begin(); |
176 spec != setting_spec_list.end(); ++spec) { | 196 spec != setting_spec_list.end(); ++spec) { |
177 if (!spec->embedded_pattern.Matches(embedded_url) || | 197 if (!spec->embedded_pattern.Matches(embedded_url) || |
178 !spec->top_level_pattern.Matches(top_level_url) || | 198 !spec->top_level_pattern.Matches(top_level_url) || |
179 spec->content_type != type || | 199 spec->content_type != type || |
180 spec->resource_identifier != identifier) { | 200 spec->resource_identifier != identifier) { |
181 continue; | 201 continue; |
182 } | 202 } |
183 | 203 |
184 // TODO(markusheintz): Compare top-level patterns as well? | 204 // TODO(markusheintz): Compare embedded patterns as well? |
185 if (winner_spec == setting_spec_list.end() || | 205 if (winner_spec == setting_spec_list.end() || |
186 spec->embedded_pattern.Compare(winner_spec->embedded_pattern) == | 206 winner_spec->top_level_pattern.Compare(spec->top_level_pattern) == |
187 ContentSettingsPattern::SUCCESSOR) { | 207 ContentSettingsPattern::SUCCESSOR) { |
188 winner_spec = spec; | 208 winner_spec = spec; |
189 } | 209 } |
190 } | 210 } |
191 | 211 |
192 return (winner_spec != setting_spec_list.end()) ? winner_spec->setting | 212 return (winner_spec != setting_spec_list.end()) ? winner_spec->setting |
193 : CONTENT_SETTING_DEFAULT; | 213 : CONTENT_SETTING_DEFAULT; |
194 } | 214 } |
195 | 215 |
196 ContentSetting ExtensionContentSettingsStore::GetEffectiveContentSetting( | 216 ContentSetting ExtensionContentSettingsStore::GetEffectiveContentSetting( |
(...skipping 12 matching lines...) Expand all Loading... | |
209 const base::Time& install_time = i->second->install_time; | 229 const base::Time& install_time = i->second->install_time; |
210 const bool enabled = i->second->enabled; | 230 const bool enabled = i->second->enabled; |
211 | 231 |
212 if (!enabled) | 232 if (!enabled) |
213 continue; | 233 continue; |
214 if (install_time < winners_install_time) | 234 if (install_time < winners_install_time) |
215 continue; | 235 continue; |
216 | 236 |
217 ContentSetting setting = CONTENT_SETTING_DEFAULT; | 237 ContentSetting setting = CONTENT_SETTING_DEFAULT; |
218 if (incognito) { | 238 if (incognito) { |
219 // Get incognito setting | 239 // Try session-only incognito setting first. |
220 setting = GetContentSettingFromSpecList(embedded_url, top_level_url, type, | 240 setting = GetContentSettingFromSpecList( |
221 identifier, | 241 embedded_url, top_level_url, type, identifier, |
222 i->second->incognito_settings); | 242 i->second->incognito_session_only_settings); |
243 if (setting == CONTENT_SETTING_DEFAULT) { | |
244 // Next, persistent incognito setting. | |
245 setting = GetContentSettingFromSpecList( | |
246 embedded_url, top_level_url, type, identifier, | |
247 i->second->incognito_persistent_settings); | |
248 } | |
223 } | 249 } |
224 if (setting == CONTENT_SETTING_DEFAULT) { | 250 if (setting == CONTENT_SETTING_DEFAULT) { |
225 // Get non incognito setting | 251 // Then, non-incognito setting. |
226 setting = GetContentSettingFromSpecList(embedded_url, top_level_url, type, | 252 setting = GetContentSettingFromSpecList(embedded_url, top_level_url, type, |
227 identifier, i->second->settings); | 253 identifier, i->second->settings); |
228 } | 254 } |
229 | 255 |
230 if (setting != CONTENT_SETTING_DEFAULT) { | 256 if (setting != CONTENT_SETTING_DEFAULT) { |
231 winners_install_time = install_time; | 257 winners_install_time = install_time; |
232 winner_setting = setting; | 258 winner_setting = setting; |
233 } | 259 } |
234 } | 260 } |
235 | 261 |
236 return winner_setting; | 262 return winner_setting; |
237 } | 263 } |
238 | 264 |
265 void ExtensionContentSettingsStore::ClearContentSettingsForExtension( | |
266 const std::string& ext_id, | |
267 extension_prefs_scope::Scope scope) { | |
268 bool notify = false; | |
269 { | |
270 base::AutoLock lock(lock_); | |
271 ContentSettingSpecList* setting_spec_list = | |
272 GetContentSettingSpecList(ext_id, scope); | |
273 notify = !setting_spec_list->empty(); | |
274 setting_spec_list->clear(); | |
275 } | |
276 if (notify) { | |
277 NotifyOfContentSettingChanged(ext_id, | |
278 scope != extension_prefs_scope::kRegular); | |
279 } | |
280 } | |
281 | |
282 // static | |
283 void ExtensionContentSettingsStore::AddRules( | |
284 ContentSettingsType type, | |
285 const content_settings::ResourceIdentifier& identifier, | |
286 content_settings::ProviderInterface::Rules* rules, | |
287 const ContentSettingSpecList* setting_spec_list) { | |
288 ContentSettingSpecList::const_iterator it; | |
289 for (it = setting_spec_list->begin(); it != setting_spec_list->end(); ++it) { | |
290 if (it->content_type == type && it->resource_identifier == identifier) { | |
291 rules->push_back(content_settings::ProviderInterface::Rule( | |
292 it->embedded_pattern, it->top_level_pattern, it->setting)); | |
293 } | |
294 } | |
295 } | |
296 | |
239 void ExtensionContentSettingsStore::GetContentSettingsForContentType( | 297 void ExtensionContentSettingsStore::GetContentSettingsForContentType( |
240 ContentSettingsType type, | 298 ContentSettingsType type, |
241 const content_settings::ResourceIdentifier& identifier, | 299 const content_settings::ResourceIdentifier& identifier, |
242 bool incognito, | 300 bool incognito, |
243 content_settings::ProviderInterface::Rules* rules) const { | 301 content_settings::ProviderInterface::Rules* rules) const { |
244 base::AutoLock lock(lock_); | 302 base::AutoLock lock(lock_); |
245 ExtensionEntryMap::const_iterator ext_it; | 303 ExtensionEntryMap::const_iterator ext_it; |
246 for (ext_it = entries_.begin(); ext_it != entries_.end(); ++ext_it) { | 304 for (ext_it = entries_.begin(); ext_it != entries_.end(); ++ext_it) { |
247 const ContentSettingSpecList* setting_spec_list = | 305 if (incognito) { |
248 GetContentSettingSpecList(ext_it->first, incognito); | 306 AddRules(type, identifier, rules, |
249 ContentSettingSpecList::const_iterator it; | 307 GetContentSettingSpecList( |
250 for (it = setting_spec_list->begin(); it != setting_spec_list->end(); | 308 ext_it->first, |
251 ++it) { | 309 extension_prefs_scope::kIncognitoSessionOnly)); |
252 if (it->content_type == type && it->resource_identifier == identifier) { | 310 AddRules(type, identifier, rules, |
253 rules->push_back(content_settings::ProviderInterface::Rule( | 311 GetContentSettingSpecList( |
254 it->embedded_pattern, it->top_level_pattern, it->setting)); | 312 ext_it->first, |
255 } | 313 extension_prefs_scope::kIncognitoPersistent)); |
battre
2011/06/03 18:48:36
This can create duplicated entires in |rules|. Is
Bernhard Bauer
2011/06/03 20:34:28
The entries are going to be sorted (and un-duped)
| |
314 } else { | |
315 AddRules(type, identifier, rules, | |
316 GetContentSettingSpecList( | |
317 ext_it->first, | |
318 extension_prefs_scope::kRegular)); | |
256 } | 319 } |
257 } | 320 } |
258 } | 321 } |
259 | 322 |
260 ListValue* ExtensionContentSettingsStore::GetSettingsForExtension( | 323 ListValue* ExtensionContentSettingsStore::GetSettingsForExtension( |
261 const std::string& extension_id) const { | 324 const std::string& extension_id, |
325 extension_prefs_scope::Scope scope) const { | |
262 base::AutoLock lock(lock_); | 326 base::AutoLock lock(lock_); |
263 ListValue* settings = new ListValue(); | 327 ListValue* settings = new ListValue(); |
264 const ContentSettingSpecList* setting_spec_list = | 328 const ContentSettingSpecList* setting_spec_list = |
265 GetContentSettingSpecList(extension_id, false); | 329 GetContentSettingSpecList(extension_id, scope); |
266 ContentSettingSpecList::const_iterator it; | 330 ContentSettingSpecList::const_iterator it; |
267 for (it = setting_spec_list->begin(); it != setting_spec_list->end(); ++it) { | 331 for (it = setting_spec_list->begin(); it != setting_spec_list->end(); ++it) { |
268 DictionaryValue* setting_dict = new DictionaryValue(); | 332 DictionaryValue* setting_dict = new DictionaryValue(); |
269 setting_dict->SetString(keys::kEmbeddedPatternKey, | 333 setting_dict->SetString(keys::kEmbeddedPatternKey, |
270 it->embedded_pattern.ToString()); | 334 it->embedded_pattern.ToString()); |
271 setting_dict->SetString(keys::kTopLevelPatternKey, | 335 setting_dict->SetString(keys::kTopLevelPatternKey, |
272 it->top_level_pattern.ToString()); | 336 it->top_level_pattern.ToString()); |
273 setting_dict->SetString( | 337 setting_dict->SetString( |
274 keys::kContentSettingsTypeKey, | 338 keys::kContentSettingsTypeKey, |
275 helpers::ContentSettingsTypeToString(it->content_type)); | 339 helpers::ContentSettingsTypeToString(it->content_type)); |
276 setting_dict->SetString(keys::kResourceIdentifierKey, | 340 setting_dict->SetString(keys::kResourceIdentifierKey, |
277 it->resource_identifier); | 341 it->resource_identifier); |
278 setting_dict->SetString(keys::kContentSettingKey, | 342 setting_dict->SetString(keys::kContentSettingKey, |
279 helpers::ContentSettingToString(it->setting)); | 343 helpers::ContentSettingToString(it->setting)); |
280 settings->Append(setting_dict); | 344 settings->Append(setting_dict); |
281 } | 345 } |
282 return settings; | 346 return settings; |
283 } | 347 } |
284 | 348 |
285 void ExtensionContentSettingsStore::SetExtensionContentSettingsFromList( | 349 void ExtensionContentSettingsStore::SetExtensionContentSettingsFromList( |
286 const std::string& extension_id, | 350 const std::string& extension_id, |
287 const ListValue* list) { | 351 const ListValue* list, |
352 extension_prefs_scope::Scope scope) { | |
288 for (ListValue::const_iterator it = list->begin(); it != list->end(); ++it) { | 353 for (ListValue::const_iterator it = list->begin(); it != list->end(); ++it) { |
289 if ((*it)->GetType() != Value::TYPE_DICTIONARY) { | 354 if ((*it)->GetType() != Value::TYPE_DICTIONARY) { |
290 NOTREACHED(); | 355 NOTREACHED(); |
291 continue; | 356 continue; |
292 } | 357 } |
293 DictionaryValue* dict = static_cast<DictionaryValue*>(*it); | 358 DictionaryValue* dict = static_cast<DictionaryValue*>(*it); |
294 std::string pattern_str; | 359 std::string pattern_str; |
295 dict->GetString(keys::kTopLevelPatternKey, &pattern_str); | 360 dict->GetString(keys::kTopLevelPatternKey, &pattern_str); |
296 ContentSettingsPattern pattern = | 361 ContentSettingsPattern pattern = |
297 ContentSettingsPattern::FromString(pattern_str); | 362 ContentSettingsPattern::FromString(pattern_str); |
(...skipping 20 matching lines...) Expand all Loading... | |
318 bool result = | 383 bool result = |
319 helpers::StringToContentSetting(content_setting_string, &setting); | 384 helpers::StringToContentSetting(content_setting_string, &setting); |
320 DCHECK(result); | 385 DCHECK(result); |
321 | 386 |
322 SetExtensionContentSetting(extension_id, | 387 SetExtensionContentSetting(extension_id, |
323 pattern, | 388 pattern, |
324 embedded_pattern, | 389 embedded_pattern, |
325 content_settings_type, | 390 content_settings_type, |
326 resource_identifier, | 391 resource_identifier, |
327 setting, | 392 setting, |
328 false); | 393 scope); |
329 } | 394 } |
330 } | 395 } |
331 | 396 |
332 void ExtensionContentSettingsStore::AddObserver(Observer* observer) { | 397 void ExtensionContentSettingsStore::AddObserver(Observer* observer) { |
333 DCHECK(OnCorrectThread()); | 398 DCHECK(OnCorrectThread()); |
334 observers_.AddObserver(observer); | 399 observers_.AddObserver(observer); |
335 } | 400 } |
336 | 401 |
337 void ExtensionContentSettingsStore::RemoveObserver(Observer* observer) { | 402 void ExtensionContentSettingsStore::RemoveObserver(Observer* observer) { |
338 DCHECK(OnCorrectThread()); | 403 DCHECK(OnCorrectThread()); |
(...skipping 25 matching lines...) Expand all Loading... | |
364 ExtensionContentSettingsStore::Observer, | 429 ExtensionContentSettingsStore::Observer, |
365 observers_, | 430 observers_, |
366 OnContentSettingChanged(extension_id, incognito)); | 431 OnContentSettingChanged(extension_id, incognito)); |
367 } | 432 } |
368 | 433 |
369 bool ExtensionContentSettingsStore::OnCorrectThread() { | 434 bool ExtensionContentSettingsStore::OnCorrectThread() { |
370 // If there is no UI thread, we're most likely in a unit test. | 435 // If there is no UI thread, we're most likely in a unit test. |
371 return !BrowserThread::IsWellKnownThread(BrowserThread::UI) || | 436 return !BrowserThread::IsWellKnownThread(BrowserThread::UI) || |
372 BrowserThread::CurrentlyOn(BrowserThread::UI); | 437 BrowserThread::CurrentlyOn(BrowserThread::UI); |
373 } | 438 } |
OLD | NEW |