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]; |
+} |