Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(837)

Unified Diff: chrome/browser/extensions/extension_toolbar_model.cc

Issue 10533086: Action box menu (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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];
+}

Powered by Google App Engine
This is Rietveld 408576698