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