| 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 |