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

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

Issue 3129003: remove toolstrips (Closed)
Patch Set: merge Created 10 years, 4 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_shelf_model.cc
diff --git a/chrome/browser/extensions/extension_shelf_model.cc b/chrome/browser/extensions/extension_shelf_model.cc
deleted file mode 100644
index 51a8ce11ea80bf219f4e3a8ba81c00ef871c0372..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_shelf_model.cc
+++ /dev/null
@@ -1,282 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/extension_shelf_model.h"
-
-#include "base/stl_util-inl.h"
-#include "chrome/browser/browser.h"
-#include "chrome/browser/profile.h"
-#include "chrome/browser/extensions/extension_host.h"
-#include "chrome/browser/extensions/extension_process_manager.h"
-#include "chrome/browser/extensions/extension_toolstrip_api.h"
-#include "chrome/browser/extensions/extensions_service.h"
-#include "chrome/browser/renderer_host/render_view_host.h"
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/notification_service.h"
-
-ExtensionShelfModel::ExtensionShelfModel(Browser* browser)
- : browser_(browser), ready_(false) {
- // Watch extensions loaded and unloaded notifications.
- registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
- NotificationService::AllSources());
- registrar_.Add(this, NotificationType::EXTENSION_LOADED,
- NotificationService::AllSources());
- registrar_.Add(this, NotificationType::EXTENSIONS_READY,
- NotificationService::AllSources());
-
- // Add any already-loaded extensions now, since we missed the notification for
- // those.
- ExtensionsService* service = browser_->profile()->GetExtensionsService();
- if (service) { // This can be null in unit tests.
- prefs_ = browser_->profile()->GetExtensionsService()->extension_prefs();
- registrar_.Add(this, NotificationType::EXTENSION_SHELF_MODEL_CHANGED,
- Source<ExtensionPrefs>(prefs_));
- ready_ = service->is_ready();
- if (ready_) {
- AddExtensions(service->extensions());
- SortToolstrips();
- }
- }
-}
-
-ExtensionShelfModel::~ExtensionShelfModel() {
- FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
- ShelfModelDeleting());
-
- observers_.Clear();
-
- for (iterator t = toolstrips_.begin(); t != toolstrips_.end(); ++t)
- delete t->host;
- toolstrips_.clear();
-}
-
-void ExtensionShelfModel::AddObserver(ExtensionShelfModelObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void ExtensionShelfModel::RemoveObserver(
- ExtensionShelfModelObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-void ExtensionShelfModel::AppendToolstrip(const ToolstripItem& toolstrip) {
- InsertToolstripAt(count(), toolstrip);
-}
-
-void ExtensionShelfModel::InsertToolstripAt(int index,
- const ToolstripItem& toolstrip) {
- toolstrips_.insert(toolstrips_.begin() + index, toolstrip);
- if (ready_) {
- FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
- ToolstripInsertedAt(toolstrip.host, index));
- }
-}
-
-void ExtensionShelfModel::RemoveToolstripAt(int index) {
- ExtensionHost* host = ToolstripAt(index).host;
- FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
- ToolstripRemovingAt(host, index));
- toolstrips_.erase(toolstrips_.begin() + index);
- delete host;
-}
-
-void ExtensionShelfModel::MoveToolstripAt(int index, int to_index) {
- DCHECK(index >= 0);
- DCHECK(to_index >= 0);
- if (index == to_index)
- return;
-
- ToolstripItem toolstrip = toolstrips_[index];
- toolstrips_.erase(toolstrips_.begin() + index);
- toolstrips_.insert(toolstrips_.begin() + to_index, toolstrip);
-
- FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
- ToolstripMoved(toolstrip.host, index, to_index));
-
- UpdatePrefs();
-}
-
-int ExtensionShelfModel::IndexOfHost(ExtensionHost* host) {
- for (iterator i = toolstrips_.begin(); i != toolstrips_.end(); ++i) {
- if (i->host == host)
- return i - toolstrips_.begin();
- }
- return -1;
-}
-
-ExtensionShelfModel::iterator ExtensionShelfModel::ToolstripForHost(
- ExtensionHost* host) {
- for (iterator i = toolstrips_.begin(); i != toolstrips_.end(); ++i) {
- if (i->host == host)
- return i;
- }
- return toolstrips_.end();
-}
-
-const ExtensionShelfModel::ToolstripItem& ExtensionShelfModel::ToolstripAt(
- int index) {
- DCHECK(index >= 0);
- return toolstrips_[index];
-}
-
-void ExtensionShelfModel::SetToolstripDataAt(int index, void* data) {
- DCHECK(index >= 0);
- 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));
- int routing_id = toolstrip->host->render_view_host()->routing_id();
- ToolstripEventRouter::OnToolstripExpanded(browser_->profile(),
- routing_id,
- url, height);
- toolstrip->host->SetRenderViewType(ViewType::EXTENSION_MOLE);
-}
-
-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));
- int routing_id = toolstrip->host->render_view_host()->routing_id();
- ToolstripEventRouter::OnToolstripCollapsed(browser_->profile(),
- routing_id,
- url);
- toolstrip->host->SetRenderViewType(ViewType::EXTENSION_TOOLSTRIP);
-}
-
-void ExtensionShelfModel::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- switch (type.value) {
- case NotificationType::EXTENSION_LOADED:
- if (ready_)
- AddExtension(Details<Extension>(details).ptr());
- break;
- case NotificationType::EXTENSION_UNLOADED:
- RemoveExtension(Details<Extension>(details).ptr());
- break;
- case NotificationType::EXTENSIONS_READY:
- if (browser_->profile()->GetExtensionsService()) {
- AddExtensions(
- browser_->profile()->GetExtensionsService()->extensions());
- SortToolstrips();
- }
- ready_ = true;
- break;
- case NotificationType::EXTENSION_SHELF_MODEL_CHANGED:
- // Ignore changes that this model originated.
- if (Details<ExtensionShelfModel>(details).ptr() != this)
- SortToolstrips();
- break;
- default:
- DCHECK(false) << "Unhandled notification of type: " << type.value;
- break;
- }
-}
-
-void ExtensionShelfModel::AddExtension(Extension* extension) {
- ExtensionProcessManager* manager =
- browser_->profile()->GetExtensionProcessManager();
- DCHECK(manager);
- if (!manager)
- return;
-
- for (std::vector<Extension::ToolstripInfo>::const_iterator toolstrip =
- extension->toolstrips().begin();
- toolstrip != extension->toolstrips().end(); ++toolstrip) {
- GURL url = toolstrip->toolstrip;
- ToolstripItem item;
- item.host = manager->CreateToolstrip(extension, url, browser_);
- item.info = *toolstrip;
- item.data = NULL;
- item.height = 0;
- AppendToolstrip(item);
- }
-}
-
-void ExtensionShelfModel::AddExtensions(const ExtensionList* extensions) {
- if (extensions->size()) {
- ExtensionList::const_iterator extension = extensions->begin();
- for (; extension != extensions->end(); ++extension)
- AddExtension(*extension);
- }
-}
-
-void ExtensionShelfModel::RemoveExtension(Extension* extension) {
- bool changed = false;
- for (int i = count() - 1; i >= 0; --i) {
- ExtensionHost* t = ToolstripAt(i).host;
- if (t->extension()->id() == extension->id()) {
- changed = true;
- RemoveToolstripAt(i);
-
- // There can be more than one toolstrip per extension, so we have to keep
- // looping even after finding a match.
- }
- }
- if (changed)
- UpdatePrefs();
-}
-
-void ExtensionShelfModel::UpdatePrefs() {
- if (!prefs_)
- return;
-
- // 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).host->GetURL());
- prefs_->SetShelfToolstripOrder(urls);
-
- NotificationService::current()->Notify(
- NotificationType::EXTENSION_SHELF_MODEL_CHANGED,
- Source<ExtensionPrefs>(prefs_),
- Details<ExtensionShelfModel>(this));
-}
-
-void ExtensionShelfModel::SortToolstrips() {
- ExtensionPrefs::URLList urls = prefs_->GetShelfToolstripOrder();
- 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 (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
- // multiple toolstrips, so we don't do any testing for uniqueness.
- toolstrips_.push_back(*toolstrip);
-
- // Remove the toolstrip from the list so we don't have to iterate over
- // it next time.
- copy.erase(toolstrip);
- break;
- }
- }
- }
-
- // Any toolstrips remaining in |copy| were somehow missing from the prefs,
- // so just append them to the end.
- for (iterator toolstrip = copy.begin();
- toolstrip != copy.end(); ++toolstrip) {
- toolstrips_.push_back(*toolstrip);
- }
-
- FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
- ShelfModelReloaded());
-}
« no previous file with comments | « chrome/browser/extensions/extension_shelf_model.h ('k') | chrome/browser/extensions/extension_shelf_model_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698