OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_web_ui.h" | 5 #include "chrome/browser/extensions/extension_web_ui.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <utility> | 10 #include <utility> |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 // Iterates over |list| and: | 59 // Iterates over |list| and: |
60 // - Converts any entries of the form <entry> to | 60 // - Converts any entries of the form <entry> to |
61 // { 'entry': <entry>, 'active': true }. | 61 // { 'entry': <entry>, 'active': true }. |
62 // - Removes any duplicate entries. | 62 // - Removes any duplicate entries. |
63 // We do the conversion because we previously stored these values as strings | 63 // We do the conversion because we previously stored these values as strings |
64 // rather than objects. | 64 // rather than objects. |
65 // TODO(devlin): Remove the conversion once everyone's updated. | 65 // TODO(devlin): Remove the conversion once everyone's updated. |
66 void InitializeOverridesList(base::ListValue* list) { | 66 void InitializeOverridesList(base::ListValue* list) { |
67 base::ListValue migrated; | 67 base::ListValue migrated; |
68 std::set<std::string> seen_entries; | 68 std::set<std::string> seen_entries; |
69 for (const auto& val : *list) { | 69 for (auto& val : *list) { |
70 std::unique_ptr<base::DictionaryValue> new_dict( | 70 std::unique_ptr<base::DictionaryValue> new_dict( |
71 new base::DictionaryValue()); | 71 new base::DictionaryValue()); |
72 std::string entry_name; | 72 std::string entry_name; |
73 base::DictionaryValue* existing_dict = nullptr; | 73 base::DictionaryValue* existing_dict = nullptr; |
74 if (val->GetAsDictionary(&existing_dict)) { | 74 if (val.GetAsDictionary(&existing_dict)) { |
75 bool success = existing_dict->GetString(kEntry, &entry_name); | 75 bool success = existing_dict->GetString(kEntry, &entry_name); |
76 if (!success) // See comment about CHECK(success) in ForEachOverrideList. | 76 if (!success) // See comment about CHECK(success) in ForEachOverrideList. |
77 continue; | 77 continue; |
78 new_dict->Swap(existing_dict); | 78 new_dict->Swap(existing_dict); |
79 } else if (val->GetAsString(&entry_name)) { | 79 } else if (val.GetAsString(&entry_name)) { |
80 new_dict->SetString(kEntry, entry_name); | 80 new_dict->SetString(kEntry, entry_name); |
81 new_dict->SetBoolean(kActive, true); | 81 new_dict->SetBoolean(kActive, true); |
82 } else { | 82 } else { |
83 NOTREACHED(); | 83 NOTREACHED(); |
84 continue; | 84 continue; |
85 } | 85 } |
86 | 86 |
87 if (seen_entries.count(entry_name) == 0) { | 87 if (seen_entries.count(entry_name) == 0) { |
88 seen_entries.insert(entry_name); | 88 seen_entries.insert(entry_name); |
89 migrated.Append(std::move(new_dict)); | 89 migrated.Append(std::move(new_dict)); |
90 } | 90 } |
91 } | 91 } |
92 | 92 |
93 list->Swap(&migrated); | 93 list->Swap(&migrated); |
94 } | 94 } |
95 | 95 |
96 // Adds |override| to |list|, or, if there's already an entry for the override, | 96 // Adds |override| to |list|, or, if there's already an entry for the override, |
97 // marks it as active. | 97 // marks it as active. |
98 void AddOverridesToList(base::ListValue* list, | 98 void AddOverridesToList(base::ListValue* list, |
99 const std::string& override) { | 99 const std::string& override) { |
100 for (const auto& val : *list) { | 100 for (auto& val : *list) { |
101 base::DictionaryValue* dict = nullptr; | 101 base::DictionaryValue* dict = nullptr; |
102 std::string entry; | 102 std::string entry; |
103 if (!val->GetAsDictionary(&dict) || !dict->GetString(kEntry, &entry)) { | 103 if (!val.GetAsDictionary(&dict) || !dict->GetString(kEntry, &entry)) { |
104 NOTREACHED(); | 104 NOTREACHED(); |
105 continue; | 105 continue; |
106 } | 106 } |
107 if (entry == override) { | 107 if (entry == override) { |
108 dict->SetBoolean(kActive, true); | 108 dict->SetBoolean(kActive, true); |
109 return; // All done! | 109 return; // All done! |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 auto dict = base::MakeUnique<base::DictionaryValue>(); | 113 auto dict = base::MakeUnique<base::DictionaryValue>(); |
114 dict->SetString(kEntry, override); | 114 dict->SetString(kEntry, override); |
115 dict->SetBoolean(kActive, true); | 115 dict->SetBoolean(kActive, true); |
116 // Add the entry to the front of the list. | 116 // Add the entry to the front of the list. |
117 list->Insert(0, std::move(dict)); | 117 list->Insert(0, std::move(dict)); |
118 } | 118 } |
119 | 119 |
120 // Validates that each entry in |list| contains a valid url and points to an | 120 // Validates that each entry in |list| contains a valid url and points to an |
121 // extension contained in |all_extensions| (and, if not, removes it). | 121 // extension contained in |all_extensions| (and, if not, removes it). |
122 void ValidateOverridesList(const extensions::ExtensionSet* all_extensions, | 122 void ValidateOverridesList(const extensions::ExtensionSet* all_extensions, |
123 base::ListValue* list) { | 123 base::ListValue* list) { |
124 base::ListValue migrated; | 124 base::ListValue migrated; |
125 for (const auto& val : *list) { | 125 for (auto& val : *list) { |
126 base::DictionaryValue* dict = nullptr; | 126 base::DictionaryValue* dict = nullptr; |
127 std::string entry; | 127 std::string entry; |
128 if (!val->GetAsDictionary(&dict) || !dict->GetString(kEntry, &entry)) { | 128 if (!val.GetAsDictionary(&dict) || !dict->GetString(kEntry, &entry)) { |
129 NOTREACHED(); | 129 NOTREACHED(); |
130 continue; | 130 continue; |
131 } | 131 } |
132 std::unique_ptr<base::DictionaryValue> new_dict( | 132 std::unique_ptr<base::DictionaryValue> new_dict( |
133 new base::DictionaryValue()); | 133 new base::DictionaryValue()); |
134 new_dict->Swap(dict); | 134 new_dict->Swap(dict); |
135 GURL override_url(entry); | 135 GURL override_url(entry); |
136 if (!override_url.is_valid()) | 136 if (!override_url.is_valid()) |
137 continue; | 137 continue; |
138 | 138 |
(...skipping 29 matching lines...) Expand all Loading... |
168 enum UpdateBehavior { | 168 enum UpdateBehavior { |
169 UPDATE_DEACTIVATE, // Mark 'active' as false. | 169 UPDATE_DEACTIVATE, // Mark 'active' as false. |
170 UPDATE_REMOVE, // Remove the entry from the list. | 170 UPDATE_REMOVE, // Remove the entry from the list. |
171 }; | 171 }; |
172 | 172 |
173 // Updates the entry (if any) for |override_url| in |overrides_list| according | 173 // Updates the entry (if any) for |override_url| in |overrides_list| according |
174 // to |behavior|. Returns true if anything changed. | 174 // to |behavior|. Returns true if anything changed. |
175 bool UpdateOverridesList(base::ListValue* overrides_list, | 175 bool UpdateOverridesList(base::ListValue* overrides_list, |
176 const std::string& override_url, | 176 const std::string& override_url, |
177 UpdateBehavior behavior) { | 177 UpdateBehavior behavior) { |
178 base::ListValue::iterator iter = | 178 base::ListValue::iterator iter = std::find_if( |
179 std::find_if(overrides_list->begin(), overrides_list->end(), | 179 overrides_list->begin(), overrides_list->end(), |
180 [&override_url](const std::unique_ptr<base::Value>& value) { | 180 [&override_url](const base::Value& value) { |
181 std::string entry; | 181 std::string entry; |
182 const base::DictionaryValue* dict = nullptr; | 182 const base::DictionaryValue* dict = nullptr; |
183 return value->GetAsDictionary(&dict) && | 183 return value.GetAsDictionary(&dict) && |
184 dict->GetString(kEntry, &entry) && | 184 dict->GetString(kEntry, &entry) && entry == override_url; |
185 entry == override_url; | 185 }); |
186 }); | |
187 if (iter != overrides_list->end()) { | 186 if (iter != overrides_list->end()) { |
188 switch (behavior) { | 187 switch (behavior) { |
189 case UPDATE_DEACTIVATE: { | 188 case UPDATE_DEACTIVATE: { |
190 base::DictionaryValue* dict = nullptr; | 189 base::DictionaryValue* dict = nullptr; |
191 bool success = (*iter)->GetAsDictionary(&dict); | 190 bool success = iter->GetAsDictionary(&dict); |
192 // See comment about CHECK(success) in ForEachOverrideList. | 191 // See comment about CHECK(success) in ForEachOverrideList. |
193 if (success) { | 192 if (success) { |
194 dict->SetBoolean(kActive, false); | 193 dict->SetBoolean(kActive, false); |
195 break; | 194 break; |
196 } | 195 } |
197 // Else fall through and erase the broken pref. | 196 // Else fall through and erase the broken pref. |
198 } | 197 } |
199 case UPDATE_REMOVE: | 198 case UPDATE_REMOVE: |
200 overrides_list->Erase(iter, nullptr); | 199 overrides_list->Erase(iter, nullptr); |
201 break; | 200 break; |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 // chrome://bookmarks/#1 for display in the omnibox. | 418 // chrome://bookmarks/#1 for display in the omnibox. |
420 for (base::DictionaryValue::Iterator dict_iter(*overrides); | 419 for (base::DictionaryValue::Iterator dict_iter(*overrides); |
421 !dict_iter.IsAtEnd(); dict_iter.Advance()) { | 420 !dict_iter.IsAtEnd(); dict_iter.Advance()) { |
422 const base::ListValue* url_list = nullptr; | 421 const base::ListValue* url_list = nullptr; |
423 if (!dict_iter.value().GetAsList(&url_list)) | 422 if (!dict_iter.value().GetAsList(&url_list)) |
424 continue; | 423 continue; |
425 | 424 |
426 for (base::ListValue::const_iterator list_iter = url_list->begin(); | 425 for (base::ListValue::const_iterator list_iter = url_list->begin(); |
427 list_iter != url_list->end(); ++list_iter) { | 426 list_iter != url_list->end(); ++list_iter) { |
428 const base::DictionaryValue* dict = nullptr; | 427 const base::DictionaryValue* dict = nullptr; |
429 if (!(*list_iter)->GetAsDictionary(&dict)) | 428 if (!list_iter->GetAsDictionary(&dict)) |
430 continue; | 429 continue; |
431 std::string override; | 430 std::string override; |
432 if (!dict->GetString(kEntry, &override)) | 431 if (!dict->GetString(kEntry, &override)) |
433 continue; | 432 continue; |
434 if (base::StartsWith(url->spec(), override, | 433 if (base::StartsWith(url->spec(), override, |
435 base::CompareCase::SENSITIVE)) { | 434 base::CompareCase::SENSITIVE)) { |
436 GURL original_url(content::kChromeUIScheme + std::string("://") + | 435 GURL original_url(content::kChromeUIScheme + std::string("://") + |
437 dict_iter.key() + | 436 dict_iter.key() + |
438 url->spec().substr(override.length())); | 437 url->spec().substr(override.length())); |
439 *url = original_url; | 438 *url = original_url; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 extensions::ImageLoader::ImageRepresentation::ALWAYS_RESIZE, | 524 extensions::ImageLoader::ImageRepresentation::ALWAYS_RESIZE, |
526 gfx::Size(pixel_size, pixel_size), | 525 gfx::Size(pixel_size, pixel_size), |
527 resource_scale_factor)); | 526 resource_scale_factor)); |
528 } | 527 } |
529 | 528 |
530 // LoadImagesAsync actually can run callback synchronously. We want to force | 529 // LoadImagesAsync actually can run callback synchronously. We want to force |
531 // async. | 530 // async. |
532 extensions::ImageLoader::Get(profile)->LoadImagesAsync( | 531 extensions::ImageLoader::Get(profile)->LoadImagesAsync( |
533 extension, info_list, base::Bind(&RunFaviconCallbackAsync, callback)); | 532 extension, info_list, base::Bind(&RunFaviconCallbackAsync, callback)); |
534 } | 533 } |
OLD | NEW |