1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef CHROME_BROWSER_TASK_MANAGER_WEB_CONTENTS_RESOURCE_PROVIDER_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define CHROME_BROWSER_TASK_MANAGER_WEB_CONTENTS_RESOURCE_PROVIDER_H_
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <map>
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/basictypes.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/scoped_ptr.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/task_manager/renderer_resource.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/task_manager/resource_provider.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TaskManager;
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace content {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass RenderFrameHost;
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SiteInstance;
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WebContents;
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace task_manager {
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass RendererResource;
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TaskManagerWebContentsEntry;
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WebContentsInformation;
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Provides resources to the task manager on behalf of a chrome service that
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// owns WebContentses. The chrome service is parameterized as a
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// WebContentsInformation, which provides a list of WebContentses to track.
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch//
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// This ResourceProvider is instantiated several times by the task manager, each
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// with a different implementation of WebContentsInformation.
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WebContentsResourceProvider : public ResourceProvider {
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebContentsResourceProvider(TaskManager* task_manager,
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                              scoped_ptr<WebContentsInformation> info);
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // ResourceProvider implementation.
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual RendererResource* GetResource(int origin_pid,
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                        int child_id,
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                        int route_id) OVERRIDE;
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void StartUpdating() OVERRIDE;
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void StopUpdating() OVERRIDE;
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Start observing |web_contents| for changes via WebContentsObserver, and
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // add it to the task manager.
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnWebContentsCreated(content::WebContents* web_contents);
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Remove a TaskManagerWebContentsEntry from our tracking list, and delete it.
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void DeleteEntry(content::WebContents* web_contents,
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   TaskManagerWebContentsEntry* entry);
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TaskManager* task_manager() { return task_manager_; }
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  WebContentsInformation* info() { return info_.get(); }
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch protected:
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~WebContentsResourceProvider();
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  typedef std::map<content::WebContents*, TaskManagerWebContentsEntry*>
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      EntryMap;
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  TaskManager* task_manager_;
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // For every WebContents we maintain an entry, which holds the task manager's
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // RendererResources for that WebContents, and observes the WebContents for
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // changes.
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EntryMap entries_;
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The WebContentsInformation that informs us when a new WebContents* is
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // created, and which serves as a RendererResource factory for our type.
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<WebContentsInformation> info_;
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(WebContentsResourceProvider);
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace task_manager
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // CHROME_BROWSER_TASK_MANAGER_WEB_CONTENTS_RESOURCE_PROVIDER_H_
82