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 aeea4faee9756221df897076b99f00ebcd8f0c07..66bd945c7b57c6acceef38ad0ec5bfc87f76e10c 100644 |
| --- a/chrome/browser/extensions/extension_toolbar_model.cc |
| +++ b/chrome/browser/extensions/extension_toolbar_model.cc |
| @@ -117,7 +117,7 @@ void ExtensionToolbarModel::Observe( |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) { |
| if (type == chrome::NOTIFICATION_EXTENSIONS_READY) { |
| - InitializeExtensionList(); |
| + InitializeExtensionLists(); |
| return; |
| } |
| @@ -201,11 +201,26 @@ void ExtensionToolbarModel::RemoveExtension(const Extension* extension) { |
| // have holes. |
| // 2. Create a vector of extensions that did not have a pref value. |
| // 3. Remove holes from the sorted vector and append the unsorted vector. |
| -void ExtensionToolbarModel::InitializeExtensionList() { |
| +void ExtensionToolbarModel::InitializeExtensionLists() { |
|
Aaron Boodman
2012/06/12 05:53:44
This is pretty hard to follow. How about something
yefimt
2012/06/13 01:24:21
Done.
|
| DCHECK(service_->is_ready()); |
| std::vector<std::string> pref_order = service_->extension_prefs()-> |
| GetToolbarOrder(); |
| + InitializeExtensionList(pref_order, &toolitems_, true); |
| + |
| + pref_order = service_->extension_prefs()->GetActionboxOrder(); |
| + InitializeExtensionList(pref_order, &action_box_menu_items_, false); |
| + |
| + UpdatePrefs(); |
| + |
| + extensions_initialized_ = true; |
| + FOR_EACH_OBSERVER(Observer, observers_, ModelLoaded()); |
| +} |
| + |
| +void ExtensionToolbarModel::InitializeExtensionList( |
| + const std::vector<std::string>& pref_order, |
| + extensions::ExtensionList* extension_list, |
| + bool bar) { |
| // Items that have a pref for their position. |
| ExtensionList sorted; |
| sorted.resize(pref_order.size(), NULL); |
| @@ -214,42 +229,40 @@ void ExtensionToolbarModel::InitializeExtensionList() { |
| // Create the lists. |
| for (ExtensionSet::const_iterator it = service_->extensions()->begin(); |
| - it != service_->extensions()->end(); ++it) { |
| - const Extension* extension = *it; |
| - if (!extension->browser_action()) |
| - continue; |
| - if (!service_->extension_prefs()->GetBrowserActionVisibility(extension)) |
| - continue; |
| - |
| - std::vector<std::string>::iterator pos = |
| + it != service_->extensions()->end(); ++it) { |
| + const Extension* extension = *it; |
| + if (!extension->browser_action()) |
| + continue; |
| + bool action_visibility = service_->extension_prefs()-> |
| + GetBrowserActionVisibility(extension); |
| + if (bar ^ action_visibility) |
| + continue; |
| + |
| + std::vector<std::string>::const_iterator pos = |
| std::find(pref_order.begin(), pref_order.end(), extension->id()); |
| - if (pos != pref_order.end()) { |
| - int index = std::distance(pref_order.begin(), pos); |
| - sorted[index] = extension; |
| - } else { |
| - unsorted.push_back(make_scoped_refptr(extension)); |
| - } |
| + if (pos != pref_order.end()) { |
| + int index = std::distance(pref_order.begin(), pos); |
| + sorted[index] = extension; |
| + } else { |
| + unsorted.push_back(make_scoped_refptr(extension)); |
| + } |
| } |
| // Merge the lists. |
| - toolitems_.reserve(sorted.size() + unsorted.size()); |
| + extension_list->reserve(sorted.size() + unsorted.size()); |
| for (ExtensionList::iterator iter = sorted.begin(); |
| - iter != sorted.end(); ++iter) { |
| - if (*iter != NULL) |
| - toolitems_.push_back(*iter); |
| + iter != sorted.end(); ++iter) { |
| + if (*iter != NULL) |
| + extension_list->push_back(*iter); |
| } |
| - toolitems_.insert(toolitems_.end(), unsorted.begin(), unsorted.end()); |
| + extension_list->insert(extension_list->end(), unsorted.begin(), |
| + unsorted.end()); |
| // Inform observers. |
| - for (size_t i = 0; i < toolitems_.size(); i++) { |
| + for (size_t i = 0; i < extension_list->size(); i++) { |
| FOR_EACH_OBSERVER(Observer, observers_, |
| - BrowserActionAdded(toolitems_[i], i)); |
| + BrowserActionAdded(extension_list->at(i), i)); |
| } |
| - |
| - UpdatePrefs(); |
| - |
| - extensions_initialized_ = true; |
| - FOR_EACH_OBSERVER(Observer, observers_, ModelLoaded()); |
| } |
| void ExtensionToolbarModel::UpdatePrefs() { |
| @@ -261,6 +274,12 @@ void ExtensionToolbarModel::UpdatePrefs() { |
| for (ExtensionList::iterator iter = begin(); iter != end(); ++iter) |
| ids.push_back((*iter)->id()); |
| service_->extension_prefs()->SetToolbarOrder(ids); |
| + |
| + ids.clear(); |
| + ids.reserve(action_box_menu_items_.size()); |
| + for (size_t i = 0; i < action_box_menu_items_.size(); ++i) |
| + ids.push_back(action_box_menu_items_[i]->id()); |
| + service_->extension_prefs()->SetActionboxOrder(ids); |
| } |
| const Extension* ExtensionToolbarModel::GetExtensionByIndex(int index) const { |
| @@ -291,3 +310,8 @@ int ExtensionToolbarModel::OriginalIndexToIncognito(int original_index) { |
| } |
| return incognito_index; |
| } |
| + |
| +const Extension* ExtensionToolbarModel::GetActionBoxExtensionByIndex( |
| + int index) const { |
| + return action_box_menu_items_[index]; |
| +} |