Chromium Code Reviews| Index: chrome/browser/extensions/extension_toolbar_model.cc |
| diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc |
| index 7c9d5bfdd08beba10b31aa2edef74cecebfb399d..bc008d785162cfb619cdcb249b781ba3f95b77f5 100644 |
| --- a/chrome/browser/extensions/extension_toolbar_model.cc |
| +++ b/chrome/browser/extensions/extension_toolbar_model.cc |
| @@ -387,28 +387,43 @@ void ExtensionToolbarModel::Populate(const ExtensionIdList& positions, |
| unsorted.push_back(make_scoped_refptr(extension)); |
| } |
| - // Erase current icons. |
| - for (size_t i = 0; i < toolbar_items_.size(); i++) { |
| + size_t items_count = toolbar_items_.size(); |
| + for (size_t i = 0; i < items_count; i++) { |
| + const Extension* extension = toolbar_items_.back(); |
| + toolbar_items_.pop_back(); |
|
Finnur
2014/05/23 16:30:44
By popping the extension here (before calling Brow
Devlin
2014/05/23 17:18:26
Good comment. Such a good comment, it should prob
|
| FOR_EACH_OBSERVER( |
| - Observer, observers_, BrowserActionRemoved(toolbar_items_[i].get())); |
| + Observer, observers_, BrowserActionRemoved(extension)); |
| } |
| - toolbar_items_.clear(); |
| + DCHECK(toolbar_items_.empty()); |
| // Merge the lists. |
| toolbar_items_.reserve(sorted.size() + unsorted.size()); |
| + |
| + int count = 0; |
|
Devlin
2014/05/23 17:18:26
I wonder if this is worth keeping, even. Isn't co
|
| for (ExtensionList::const_iterator iter = sorted.begin(); |
| - iter != sorted.end(); ++iter) { |
| + iter != sorted.end(); ++iter) { |
|
Devlin
2014/05/23 17:18:26
nit: I think the "four-space line continuation" ru
|
| // It's possible for the extension order to contain items that aren't |
| // actually loaded on this machine. For example, when extension sync is on, |
| // we sync the extension order as-is but double-check with the user before |
| // syncing NPAPI-containing extensions, so if one of those is not actually |
| // synced, we'll get a NULL in the list. This sort of case can also happen |
| // if some error prevents an extension from loading. |
| - if (iter->get() != NULL) |
| + if (iter->get() != NULL) { |
| + toolbar_items_.push_back(*iter); |
| + FOR_EACH_OBSERVER( |
| + Observer, observers_, BrowserActionAdded(*iter, count)); |
| + count++; |
|
Devlin
2014/05/23 17:18:26
nit: ++count in chromium, unless there's a specifi
|
| + } |
| + } |
| + for (ExtensionList::const_iterator iter = unsorted.begin(); |
| + iter != unsorted.end(); ++iter) { |
| + if (iter->get() != NULL) { |
| toolbar_items_.push_back(*iter); |
| + FOR_EACH_OBSERVER( |
| + Observer, observers_, BrowserActionAdded(*iter, count)); |
| + count++; |
| + } |
| } |
| - toolbar_items_.insert(toolbar_items_.end(), unsorted.begin(), |
| - unsorted.end()); |
| UMA_HISTOGRAM_COUNTS_100( |
| "ExtensionToolbarModel.BrowserActionsPermanentlyHidden", hidden); |
| @@ -424,12 +439,6 @@ void ExtensionToolbarModel::Populate(const ExtensionIdList& positions, |
| base::HistogramBase::kSampleType_MAX : |
| visible_icon_count_); |
| } |
| - |
| - // Inform observers. |
| - for (size_t i = 0; i < toolbar_items_.size(); i++) { |
| - FOR_EACH_OBSERVER( |
| - Observer, observers_, BrowserActionAdded(toolbar_items_[i].get(), i)); |
| - } |
| } |
| void ExtensionToolbarModel::UpdatePrefs() { |
| @@ -589,6 +598,6 @@ void ExtensionToolbarModel::StopHighlighting() { |
| } |
| FOR_EACH_OBSERVER(Observer, observers_, HighlightModeChanged(false)); |
| } |
| -}; |
| +} |
| } // namespace extensions |