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

Unified Diff: chrome/browser/task_manager/task_manager_notification_resource_provider.cc

Issue 7053041: Add a Create method to DesktopNotificationHandler and stubs for the notification objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 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/task_manager/task_manager_notification_resource_provider.cc
diff --git a/chrome/browser/task_manager/task_manager_notification_resource_provider.cc b/chrome/browser/task_manager/task_manager_notification_resource_provider.cc
new file mode 100644
index 0000000000000000000000000000000000000000..457d8a24cfa54548c889cbba124511f36018ee66
--- /dev/null
+++ b/chrome/browser/task_manager/task_manager_notification_resource_provider.cc
@@ -0,0 +1,171 @@
+// Copyright (c) 2011 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/task_manager/task_manager_resource_providers.h"
+
+#include "base/basictypes.h"
+#include "base/stl_util-inl.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/notifications/balloon_collection.h"
+#include "chrome/browser/notifications/balloon_host.h"
+#include "chrome/browser/notifications/notification_ui_manager.h"
+#include "content/browser/renderer_host/render_process_host.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/common/notification_service.h"
+#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+
+////////////////////////////////////////////////////////////////////////////////
+// TaskManagerNotificationResource class
+////////////////////////////////////////////////////////////////////////////////
+
+SkBitmap* TaskManagerNotificationResource::default_icon_ = NULL;
+
+TaskManagerNotificationResource::TaskManagerNotificationResource(
+ BalloonHost* balloon_host)
+ : balloon_host_(balloon_host) {
+ if (!default_icon_) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN);
+ }
+ process_handle_ = balloon_host_->render_view_host()->process()->GetHandle();
+ pid_ = base::GetProcId(process_handle_);
+ title_ = l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_NOTIFICATION_PREFIX,
+ balloon_host_->GetSource());
+}
+
+TaskManagerNotificationResource::~TaskManagerNotificationResource() {
+}
+
+string16 TaskManagerNotificationResource::GetTitle() const {
+ return title_;
+}
+
+SkBitmap TaskManagerNotificationResource::GetIcon() const {
+ return *default_icon_;
+}
+
+base::ProcessHandle TaskManagerNotificationResource::GetProcess() const {
+ return process_handle_;
+}
+
+TaskManager::Resource::Type TaskManagerNotificationResource::GetType() const {
+ return NOTIFICATION;
+}
+
+bool TaskManagerNotificationResource::SupportNetworkUsage() const {
+ return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// TaskManagerNotificationResourceProvider class
+////////////////////////////////////////////////////////////////////////////////
+
+// static
+TaskManagerNotificationResourceProvider*
+TaskManagerNotificationResourceProvider::Create(TaskManager* task_manager) {
+ return new TaskManagerNotificationResourceProvider(task_manager);
+}
+
+TaskManagerNotificationResourceProvider::
+ TaskManagerNotificationResourceProvider(TaskManager* task_manager)
+ : task_manager_(task_manager),
+ updating_(false) {
+}
+
+TaskManagerNotificationResourceProvider::
+ ~TaskManagerNotificationResourceProvider() {
+}
+
+TaskManager::Resource* TaskManagerNotificationResourceProvider::GetResource(
+ int origin_pid,
+ int render_process_host_id,
+ int routing_id) {
+ // TODO(johnnyg): provide resources by pid if necessary.
+ return NULL;
+}
+
+void TaskManagerNotificationResourceProvider::StartUpdating() {
+ DCHECK(!updating_);
+ updating_ = true;
+
+ // Add all the existing BalloonHosts.
+ BalloonCollection* collection =
+ g_browser_process->notification_ui_manager()->balloon_collection();
+ const BalloonCollection::Balloons& balloons = collection->GetActiveBalloons();
+ for (BalloonCollection::Balloons::const_iterator it = balloons.begin();
+ it != balloons.end(); ++it) {
+ AddToTaskManager((*it)->view()->GetHost());
+ }
+
+ // Register for notifications about extension process changes.
+ registrar_.Add(this, NotificationType::NOTIFY_BALLOON_CONNECTED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NotificationType::NOTIFY_BALLOON_DISCONNECTED,
+ NotificationService::AllSources());
+}
+
+void TaskManagerNotificationResourceProvider::StopUpdating() {
+ DCHECK(updating_);
+ updating_ = false;
+
+ // Unregister for notifications about extension process changes.
+ registrar_.Remove(this, NotificationType::NOTIFY_BALLOON_CONNECTED,
+ NotificationService::AllSources());
+ registrar_.Remove(this, NotificationType::NOTIFY_BALLOON_DISCONNECTED,
+ NotificationService::AllSources());
+
+ // Delete all the resources.
+ STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
+ resources_.clear();
+}
+
+void TaskManagerNotificationResourceProvider::Observe(
+ NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ switch (type.value) {
+ case NotificationType::NOTIFY_BALLOON_CONNECTED:
+ AddToTaskManager(Source<BalloonHost>(source).ptr());
+ break;
+ case NotificationType::NOTIFY_BALLOON_DISCONNECTED:
+ RemoveFromTaskManager(Source<BalloonHost>(source).ptr());
+ break;
+ default:
+ NOTREACHED() << "Unexpected notification.";
+ return;
+ }
+}
+
+void TaskManagerNotificationResourceProvider::AddToTaskManager(
+ BalloonHost* balloon_host) {
+ TaskManagerNotificationResource* resource =
+ new TaskManagerNotificationResource(balloon_host);
+ DCHECK(resources_.find(balloon_host) == resources_.end());
+ resources_[balloon_host] = resource;
+ task_manager_->AddResource(resource);
+}
+
+void TaskManagerNotificationResourceProvider::RemoveFromTaskManager(
+ BalloonHost* balloon_host) {
+ if (!updating_)
+ return;
+ std::map<BalloonHost*, TaskManagerNotificationResource*>::iterator iter =
+ resources_.find(balloon_host);
+ if (iter == resources_.end())
+ return;
+
+ // Remove the resource from the Task Manager.
+ TaskManagerNotificationResource* resource = iter->second;
+ task_manager_->RemoveResource(resource);
+
+ // Remove it from the map.
+ resources_.erase(iter);
+
+ // Finally, delete the resource.
+ delete resource;
+}

Powered by Google App Engine
This is Rietveld 408576698