blob: 192b3e346baeeb703e86feda118a3c4b7dceca36 [file] [log] [blame]
[email protected]3cb3b0e2014-03-24 02:15:541// Copyright 2014 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#include "chrome/browser/task_manager/guest_information.h"
6
7#include "base/strings/string16.h"
8#include "chrome/browser/chrome_notification_types.h"
[email protected]3cb3b0e2014-03-24 02:15:549#include "chrome/browser/profiles/profile.h"
10#include "chrome/browser/task_manager/renderer_resource.h"
11#include "chrome/browser/task_manager/resource_provider.h"
12#include "chrome/browser/task_manager/task_manager.h"
13#include "chrome/browser/task_manager/task_manager_util.h"
[email protected]af39f002014-08-22 10:18:1814#include "chrome/grit/generated_resources.h"
sdefresne455826972015-04-10 15:25:1515#include "components/favicon/content/content_favicon_driver.h"
fsamuel8dfa19a2015-05-05 01:00:3916#include "components/guest_view/browser/guest_view_base.h"
[email protected]3cb3b0e2014-03-24 02:15:5417#include "content/public/browser/notification_service.h"
18#include "content/public/browser/render_frame_host.h"
19#include "content/public/browser/render_process_host.h"
20#include "content/public/browser/render_view_host.h"
21#include "content/public/browser/render_widget_host_iterator.h"
22#include "content/public/browser/site_instance.h"
23#include "content/public/browser/web_contents.h"
fsamuel99492be2014-08-28 03:50:2724#include "extensions/strings/grit/extensions_strings.h"
[email protected]3cb3b0e2014-03-24 02:15:5425#include "ui/base/l10n/l10n_util.h"
26#include "ui/gfx/image/image.h"
27#include "ui/gfx/image/image_skia.h"
28
29using content::RenderProcessHost;
30using content::RenderViewHost;
31using content::RenderWidgetHost;
32using content::WebContents;
33using extensions::Extension;
fsamuel8dfa19a2015-05-05 01:00:3934using guest_view::GuestViewBase;
[email protected]3cb3b0e2014-03-24 02:15:5435
36namespace task_manager {
37
38class GuestResource : public RendererResource {
39 public:
40 explicit GuestResource(content::RenderViewHost* render_view_host);
dcheng1ca8a7c2014-10-21 11:52:0341 ~GuestResource() override;
[email protected]3cb3b0e2014-03-24 02:15:5442
43 // Resource methods:
dcheng1ca8a7c2014-10-21 11:52:0344 Type GetType() const override;
45 base::string16 GetTitle() const override;
46 gfx::ImageSkia GetIcon() const override;
47 content::WebContents* GetWebContents() const override;
[email protected]3cb3b0e2014-03-24 02:15:5448
49 private:
50 DISALLOW_COPY_AND_ASSIGN(GuestResource);
51};
52
53GuestResource::GuestResource(RenderViewHost* render_view_host)
54 : RendererResource(
55 render_view_host->GetSiteInstance()->GetProcess()->GetHandle(),
56 render_view_host) {
57}
58
59GuestResource::~GuestResource() {
60}
61
62Resource::Type GuestResource::GetType() const {
63 return GUEST;
64}
65
66base::string16 GuestResource::GetTitle() const {
67 WebContents* web_contents = GetWebContents();
fsamuel99492be2014-08-28 03:50:2768 if (!web_contents) {
69 const int message_id = IDS_EXTENSION_TASK_MANAGER_WEBVIEW_TAG_PREFIX;
70 return l10n_util::GetStringFUTF16(message_id, base::string16());
[email protected]3cb3b0e2014-03-24 02:15:5471 }
fsamuel8dfa19a2015-05-05 01:00:3972 GuestViewBase* guest = GuestViewBase::FromWebContents(web_contents);
fsamuel99492be2014-08-28 03:50:2773 return l10n_util::GetStringFUTF16(
74 guest->GetTaskPrefix(),
75 util::GetTitleFromWebContents(web_contents));
[email protected]3cb3b0e2014-03-24 02:15:5476}
77
78gfx::ImageSkia GuestResource::GetIcon() const {
79 WebContents* web_contents = GetWebContents();
sdefresne455826972015-04-10 15:25:1580 if (web_contents) {
81 favicon::FaviconDriver* favicon_driver =
82 favicon::ContentFaviconDriver::FromWebContents(web_contents);
83 if (favicon_driver)
84 return favicon_driver->GetFavicon().AsImageSkia();
[email protected]3cb3b0e2014-03-24 02:15:5485 }
86 return gfx::ImageSkia();
87}
88
89WebContents* GuestResource::GetWebContents() const {
90 return WebContents::FromRenderViewHost(render_view_host());
91}
92
93////////////////////////////////////////////////////////////////////////////////
94// GuestInformation class
95////////////////////////////////////////////////////////////////////////////////
96
97GuestInformation::GuestInformation() {}
98
99GuestInformation::~GuestInformation() {}
100
101bool GuestInformation::CheckOwnership(WebContents* web_contents) {
102 // Guest WebContentses are created and owned internally by the content layer.
fsamuel8dfa19a2015-05-05 01:00:39103 return GuestViewBase::IsGuest(web_contents);
[email protected]3cb3b0e2014-03-24 02:15:54104}
105
106void GuestInformation::GetAll(const NewWebContentsCallback& callback) {
107 scoped_ptr<content::RenderWidgetHostIterator> widgets(
108 content::RenderWidgetHost::GetRenderWidgetHosts());
109 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
110 if (widget->IsRenderView()) {
111 content::RenderViewHost* rvh = content::RenderViewHost::From(widget);
112 WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
fsamuel8dfa19a2015-05-05 01:00:39113 if (web_contents && GuestViewBase::IsGuest(web_contents))
[email protected]3cb3b0e2014-03-24 02:15:54114 callback.Run(web_contents);
115 }
116 }
117}
118
119scoped_ptr<RendererResource> GuestInformation::MakeResource(
120 WebContents* web_contents) {
121 return scoped_ptr<RendererResource>(
122 new GuestResource(web_contents->GetRenderViewHost()));
123}
124
125} // namespace task_manager