Index: chrome/browser/extensions/extension_shelf_model.cc |
diff --git a/chrome/browser/extensions/extension_shelf_model.cc b/chrome/browser/extensions/extension_shelf_model.cc |
index 1449d97eb20df15199f9441ff06adb6f7fdd7498..6b7bd0c73ae0191a4f751403d37f12e8732f2c0e 100644 |
--- a/chrome/browser/extensions/extension_shelf_model.cc |
+++ b/chrome/browser/extensions/extension_shelf_model.cc |
@@ -39,11 +39,13 @@ ExtensionShelfModel::ExtensionShelfModel(Browser* browser) |
} |
ExtensionShelfModel::~ExtensionShelfModel() { |
+ FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, |
+ ShelfModelDeleting()); |
+ |
while (observers_.size()) |
observers_.RemoveObserver(observers_.GetElementAt(0)); |
- ExtensionToolstrips::iterator t; |
- for (t = toolstrips_.begin(); t != toolstrips_.end(); ++t) |
+ for (iterator t = toolstrips_.begin(); t != toolstrips_.end(); ++t) |
delete t->host; |
toolstrips_.clear(); |
} |
@@ -71,7 +73,7 @@ void ExtensionShelfModel::InsertToolstripAt(int index, |
} |
void ExtensionShelfModel::RemoveToolstripAt(int index) { |
- ExtensionHost* host = ToolstripAt(index); |
+ ExtensionHost* host = ToolstripAt(index).host; |
FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, |
ToolstripRemovingAt(host, index)); |
toolstrips_.erase(toolstrips_.begin() + index); |
@@ -94,28 +96,27 @@ void ExtensionShelfModel::MoveToolstripAt(int index, int to_index) { |
UpdatePrefs(); |
} |
-int ExtensionShelfModel::IndexOfToolstrip(ExtensionHost* toolstrip) { |
- ExtensionToolstrips::iterator i; |
- for (i = toolstrips_.begin(); i != toolstrips_.end(); ++i) { |
- if (i->host == toolstrip) |
+int ExtensionShelfModel::IndexOfHost(ExtensionHost* host) { |
+ for (iterator i = toolstrips_.begin(); i != toolstrips_.end(); ++i) { |
+ if (i->host == host) |
return i - toolstrips_.begin(); |
} |
return -1; |
} |
-ExtensionHost* ExtensionShelfModel::ToolstripAt(int index) { |
- DCHECK(index >= 0); |
- return toolstrips_[index].host; |
-} |
- |
-Extension::ToolstripInfo& ExtensionShelfModel::ToolstripInfoAt(int index) { |
- DCHECK(index >= 0); |
- return toolstrips_[index].info; |
+ExtensionShelfModel::iterator ExtensionShelfModel::ToolstripForHost( |
+ ExtensionHost* host) { |
+ for (iterator i = toolstrips_.begin(); i != toolstrips_.end(); ++i) { |
+ if (i->host == host) |
+ return i; |
+ } |
+ return toolstrips_.end(); |
} |
-void* ExtensionShelfModel::ToolstripDataAt(int index) { |
+const ExtensionShelfModel::ToolstripItem& ExtensionShelfModel::ToolstripAt( |
+ int index) { |
DCHECK(index >= 0); |
- return toolstrips_[index].data; |
+ return toolstrips_[index]; |
} |
void ExtensionShelfModel::SetToolstripDataAt(int index, void* data) { |
@@ -123,6 +124,26 @@ void ExtensionShelfModel::SetToolstripDataAt(int index, void* data) { |
toolstrips_[index].data = data; |
} |
+void ExtensionShelfModel::ExpandToolstrip(iterator toolstrip, |
+ const GURL& url, int height) { |
+ if (toolstrip == end()) |
+ return; |
+ toolstrip->height = height; |
+ toolstrip->url = url; |
+ FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, |
+ ToolstripChanged(toolstrip)); |
+} |
+ |
+void ExtensionShelfModel::CollapseToolstrip(iterator toolstrip, |
+ const GURL& url) { |
+ if (toolstrip == end()) |
+ return; |
+ toolstrip->height = 0; |
+ toolstrip->url = url; |
+ FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, |
+ ToolstripChanged(toolstrip)); |
+} |
+ |
void ExtensionShelfModel::Observe(NotificationType type, |
const NotificationSource& source, |
const NotificationDetails& details) { |
@@ -136,7 +157,8 @@ void ExtensionShelfModel::Observe(NotificationType type, |
break; |
case NotificationType::EXTENSIONS_READY: |
if (browser_->profile()->GetExtensionsService()) { |
- AddExtensions(browser_->profile()->GetExtensionsService()->extensions()); |
+ AddExtensions( |
+ browser_->profile()->GetExtensionsService()->extensions()); |
SortToolstrips(); |
} |
ready_ = true; |
@@ -167,6 +189,7 @@ void ExtensionShelfModel::AddExtension(Extension* extension) { |
item.host = manager->CreateView(extension, url, browser_); |
item.info = *toolstrip; |
item.data = NULL; |
+ item.height = 0; |
AppendToolstrip(item); |
} |
} |
@@ -182,7 +205,7 @@ void ExtensionShelfModel::AddExtensions(const ExtensionList* extensions) { |
void ExtensionShelfModel::RemoveExtension(Extension* extension) { |
bool changed = false; |
for (int i = count() - 1; i >= 0; --i) { |
- ExtensionHost* t = ToolstripAt(i); |
+ ExtensionHost* t = ToolstripAt(i).host; |
if (t->extension()->id() == extension->id()) { |
changed = true; |
RemoveToolstripAt(i); |
@@ -202,7 +225,7 @@ void ExtensionShelfModel::UpdatePrefs() { |
// It's easiest to just rebuild the list each time. |
ExtensionPrefs::URLList urls; |
for (int i = 0; i < count(); ++i) |
- urls.push_back(ToolstripAt(i)->GetURL()); |
+ urls.push_back(ToolstripAt(i).host->GetURL()); |
prefs_->SetShelfToolstripOrder(urls); |
NotificationService::current()->Notify( |
@@ -213,15 +236,15 @@ void ExtensionShelfModel::UpdatePrefs() { |
void ExtensionShelfModel::SortToolstrips() { |
ExtensionPrefs::URLList urls = prefs_->GetShelfToolstripOrder(); |
- ExtensionToolstrips copy = |
- ExtensionToolstrips(toolstrips_.begin(), toolstrips_.end()); |
+ ToolstripList copy = |
+ ToolstripList(toolstrips_.begin(), toolstrips_.end()); |
toolstrips_.clear(); |
// Go through the urls and find the matching toolstrip, re-adding it to the |
// new list in the proper order. |
for (size_t i = 0; i < urls.size(); ++i) { |
GURL& url = urls[i]; |
- for (ExtensionToolstrips::iterator toolstrip = copy.begin(); |
+ for (iterator toolstrip = copy.begin(); |
toolstrip != copy.end(); ++toolstrip) { |
if (url == toolstrip->host->GetURL()) { |
// Note that it's technically possible for the same URL to appear in |
@@ -238,7 +261,7 @@ void ExtensionShelfModel::SortToolstrips() { |
// Any toolstrips remaining in |copy| were somehow missing from the prefs, |
// so just append them to the end. |
- for (ExtensionToolstrips::iterator toolstrip = copy.begin(); |
+ for (iterator toolstrip = copy.begin(); |
toolstrip != copy.end(); ++toolstrip) { |
toolstrips_.push_back(*toolstrip); |
} |