| 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 ac4732989e035a4b21b3cc77fe8aae5398e72d23..c8e110d38d3fe44e95c7c2c3aacf7f3a3ea36b44 100644
|
| --- a/chrome/browser/extensions/extension_toolbar_model.cc
|
| +++ b/chrome/browser/extensions/extension_toolbar_model.cc
|
| @@ -80,19 +80,21 @@ void ExtensionToolbarModel::RemoveObserver(Observer* observer) {
|
| observers_.RemoveObserver(observer);
|
| }
|
|
|
| -void ExtensionToolbarModel::MoveExtensionIcon(const Extension* extension,
|
| +void ExtensionToolbarModel::MoveExtensionIcon(const std::string& id,
|
| size_t index) {
|
| - ExtensionList::iterator pos = std::find(toolbar_items_.begin(),
|
| - toolbar_items_.end(), extension);
|
| + ExtensionList::iterator pos = toolbar_items_.begin();
|
| + while (pos != toolbar_items_.end() && (*pos)->id() != id)
|
| + ++pos;
|
| if (pos == toolbar_items_.end()) {
|
| NOTREACHED();
|
| return;
|
| }
|
| + scoped_refptr<const Extension> extension = *pos;
|
| toolbar_items_.erase(pos);
|
|
|
| ExtensionIdList::iterator pos_id = std::find(last_known_positions_.begin(),
|
| last_known_positions_.end(),
|
| - extension->id());
|
| + id);
|
| if (pos_id != last_known_positions_.end())
|
| last_known_positions_.erase(pos_id);
|
|
|
| @@ -104,19 +106,19 @@ void ExtensionToolbarModel::MoveExtensionIcon(const Extension* extension,
|
| last_known_positions_.insert(std::find(last_known_positions_.begin(),
|
| last_known_positions_.end(),
|
| (*iter)->id()),
|
| - extension->id());
|
| + id);
|
| toolbar_items_.insert(iter, extension);
|
| } else {
|
| // Otherwise, put |extension| at the end.
|
| DCHECK_EQ(toolbar_items_.size(), index);
|
| index = toolbar_items_.size();
|
| - toolbar_items_.push_back(make_scoped_refptr(extension));
|
| - last_known_positions_.push_back(extension->id());
|
| + toolbar_items_.push_back(extension);
|
| + last_known_positions_.push_back(id);
|
| }
|
|
|
| FOR_EACH_OBSERVER(
|
| - Observer, observers_, ToolbarExtensionMoved(extension, index));
|
| - MaybeUpdateVisibilityPref(extension, index);
|
| + Observer, observers_, ToolbarExtensionMoved(extension.get(), index));
|
| + MaybeUpdateVisibilityPref(extension.get(), index);
|
| UpdatePrefs();
|
| }
|
|
|
| @@ -228,7 +230,7 @@ void ExtensionToolbarModel::Observe(
|
| new_index = new_size;
|
| }
|
| SetVisibleIconCount(new_size);
|
| - MoveExtensionIcon(extension, new_index);
|
| + MoveExtensionIcon(extension->id(), new_index);
|
| } else { // Don't include all extensions.
|
| if (visible)
|
| AddExtension(extension);
|
| @@ -602,7 +604,7 @@ void ExtensionToolbarModel::EnsureVisibility(
|
| extension != toolbar_items_.end(); ++extension) {
|
| if ((*extension)->id() == (*it)) {
|
| if (extension - toolbar_items_.begin() >= visible_icon_count_)
|
| - MoveExtensionIcon(extension->get(), 0);
|
| + MoveExtensionIcon((*extension)->id(), 0);
|
| break;
|
| }
|
| }
|
|
|