Home | History | Annotate | Download | only in task_manager
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_TASK_MANAGER_NOTIFICATION_RESOURCE_PROVIDER_H_
      6 #define CHROME_BROWSER_TASK_MANAGER_NOTIFICATION_RESOURCE_PROVIDER_H_
      7 
      8 #include <map>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "chrome/browser/task_manager/resource_provider.h"
     13 #include "content/public/browser/notification_observer.h"
     14 #include "content/public/browser/notification_registrar.h"
     15 
     16 class BalloonHost;
     17 class TaskManager;
     18 
     19 namespace task_manager {
     20 
     21 class NotificationResource;
     22 
     23 class NotificationResourceProvider : public ResourceProvider,
     24                                      public content::NotificationObserver {
     25  public:
     26   static NotificationResourceProvider* Create(TaskManager* task_manager);
     27 
     28   // ResourceProvider interface
     29   virtual Resource* GetResource(int origin_pid,
     30                                 int render_process_host_id,
     31                                 int routing_id) OVERRIDE;
     32   virtual void StartUpdating() OVERRIDE;
     33   virtual void StopUpdating() OVERRIDE;
     34 
     35   // content::NotificationObserver interface
     36   virtual void Observe(int type,
     37                        const content::NotificationSource& source,
     38                        const content::NotificationDetails& details) OVERRIDE;
     39 
     40  private:
     41   explicit NotificationResourceProvider(TaskManager* task_manager);
     42   virtual ~NotificationResourceProvider();
     43 
     44   void AddToTaskManager(BalloonHost* balloon_host);
     45   void RemoveFromTaskManager(BalloonHost* balloon_host);
     46 
     47   TaskManager* task_manager_;
     48 
     49   // Maps the actual resources (BalloonHost*) to the Task Manager resources.
     50   std::map<BalloonHost*, NotificationResource*> resources_;
     51 
     52   // A scoped container for notification registries.
     53   content::NotificationRegistrar registrar_;
     54 
     55   bool updating_;
     56 
     57   DISALLOW_COPY_AND_ASSIGN(NotificationResourceProvider);
     58 };
     59 
     60 }  // namespace task_manager
     61 
     62 #endif  // CHROME_BROWSER_TASK_MANAGER_NOTIFICATION_RESOURCE_PROVIDER_H_
     63