| Index: chrome/browser/extensions/extension_toolbar_model.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_toolbar_model.cc (revision 0)
|
| +++ chrome/browser/extensions/extension_toolbar_model.cc (revision 0)
|
| @@ -0,0 +1,77 @@
|
| +// 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_toolbar_model.h"
|
| +
|
| +#include "chrome/browser/extensions/extensions_service.h"
|
| +#include "chrome/common/extensions/extension.h"
|
| +#include "chrome/common/notification_service.h"
|
| +
|
| +ExtensionToolbarModel::ExtensionToolbarModel(ExtensionsService* service)
|
| + : service_(service) {
|
| + DCHECK(service_);
|
| +
|
| + registrar_.Add(this, NotificationType::EXTENSION_LOADED,
|
| + Source<Profile>(service_->profile()));
|
| + registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
|
| + Source<Profile>(service_->profile()));
|
| + registrar_.Add(this, NotificationType::EXTENSION_UNLOADED_DISABLED,
|
| + Source<Profile>(service_->profile()));
|
| + registrar_.Add(this, NotificationType::EXTENSIONS_READY,
|
| + Source<Profile>(service_->profile()));
|
| +}
|
| +
|
| +ExtensionToolbarModel::~ExtensionToolbarModel() {
|
| +}
|
| +
|
| +void ExtensionToolbarModel::AddObserver(Observer* observer) {
|
| + observers_.AddObserver(observer);
|
| +}
|
| +
|
| +void ExtensionToolbarModel::RemoveObserver(Observer* observer) {
|
| + observers_.RemoveObserver(observer);
|
| +}
|
| +
|
| +void ExtensionToolbarModel::Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + if (type == NotificationType::EXTENSIONS_READY) {
|
| + for (size_t i = 0; i < service_->extensions()->size(); ++i) {
|
| + Extension* extension = service_->GetExtensionById(
|
| + service_->extensions()->at(i)->id(), false);
|
| + AddExtension(extension);
|
| + }
|
| + return;
|
| + }
|
| +
|
| + Extension* extension = Details<Extension>(details).ptr();
|
| + if (type == NotificationType::EXTENSION_LOADED) {
|
| + if (service_->is_ready())
|
| + AddExtension(extension);
|
| + } else if (type == NotificationType::EXTENSION_UNLOADED ||
|
| + type == NotificationType::EXTENSION_UNLOADED_DISABLED) {
|
| + RemoveExtension(extension);
|
| + } else {
|
| + NOTREACHED() << "Received unexpected notification";
|
| + }
|
| +}
|
| +
|
| +void ExtensionToolbarModel::AddExtension(Extension* extension) {
|
| + // We only care about extensions with browser actions.
|
| + if (!extension->browser_action())
|
| + return;
|
| +
|
| + toolitems_.push_back(extension);
|
| + FOR_EACH_OBSERVER(Observer, observers_,
|
| + BrowserActionAdded(extension, toolitems_.size() - 1));
|
| +}
|
| +
|
| +void ExtensionToolbarModel::RemoveExtension(Extension* extension) {
|
| + ExtensionList::iterator pos = std::find(begin(), end(), extension);
|
| + if (pos != end()) {
|
| + toolitems_.erase(pos);
|
| + FOR_EACH_OBSERVER(Observer, observers_,
|
| + BrowserActionRemoved(extension));
|
| + }
|
| +}
|
|
|
| Property changes on: chrome/browser/extensions/extension_toolbar_model.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|