guest_information.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
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#include "chrome/browser/task_manager/guest_information.h"
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/strings/string16.h"
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chrome_notification_types.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/favicon/favicon_tab_helper.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/task_manager/renderer_resource.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/task_manager/resource_provider.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/task_manager/task_manager.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/task_manager/task_manager_util.h"
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/notification_service.h"
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_frame_host.h"
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_process_host.h"
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_view_host.h"
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_widget_host_iterator.h"
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/site_instance.h"
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/web_contents.h"
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "grit/generated_resources.h"
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/base/l10n/l10n_util.h"
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/image/image.h"
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/image/image_skia.h"
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::RenderProcessHost;
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::RenderViewHost;
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::RenderWidgetHost;
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::WebContents;
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing extensions::Extension;
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace task_manager {
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass GuestResource : public RendererResource {
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  explicit GuestResource(content::RenderViewHost* render_view_host);
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~GuestResource();
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Resource methods:
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual Type GetType() const OVERRIDE;
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual base::string16 GetTitle() const OVERRIDE;
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual gfx::ImageSkia GetIcon() const OVERRIDE;
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual content::WebContents* GetWebContents() const OVERRIDE;
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(GuestResource);
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
50effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestResource::GuestResource(RenderViewHost* render_view_host)
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    : RendererResource(
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          render_view_host->GetSiteInstance()->GetProcess()->GetHandle(),
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          render_view_host) {
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
56effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestResource::~GuestResource() {
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
59effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochResource::Type GuestResource::GetType() const {
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return GUEST;
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbase::string16 GuestResource::GetTitle() const {
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebContents* web_contents = GetWebContents();
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const int message_id = IDS_TASK_MANAGER_WEBVIEW_TAG_PREFIX;
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (web_contents) {
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    base::string16 title = util::GetTitleFromWebContents(web_contents);
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return l10n_util::GetStringFUTF16(message_id, title);
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return l10n_util::GetStringFUTF16(message_id, base::string16());
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochgfx::ImageSkia GuestResource::GetIcon() const {
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebContents* web_contents = GetWebContents();
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (web_contents && FaviconTabHelper::FromWebContents(web_contents)) {
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return FaviconTabHelper::FromWebContents(web_contents)->
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        GetFavicon().AsImageSkia();
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return gfx::ImageSkia();
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
82effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochWebContents* GuestResource::GetWebContents() const {
83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return WebContents::FromRenderViewHost(render_view_host());
84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch////////////////////////////////////////////////////////////////////////////////
87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// GuestInformation class
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch////////////////////////////////////////////////////////////////////////////////
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
90effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestInformation::GuestInformation() {}
91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
92effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestInformation::~GuestInformation() {}
93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool GuestInformation::CheckOwnership(WebContents* web_contents) {
95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Guest WebContentses are created and owned internally by the content layer.
96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return web_contents->IsSubframe();
97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid GuestInformation::GetAll(const NewWebContentsCallback& callback) {
100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<content::RenderWidgetHostIterator> widgets(
101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      content::RenderWidgetHost::GetRenderWidgetHosts());
102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (widget->IsRenderView()) {
104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      content::RenderViewHost* rvh = content::RenderViewHost::From(widget);
105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      if (web_contents && web_contents->IsSubframe())
107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        callback.Run(web_contents);
108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochscoped_ptr<RendererResource> GuestInformation::MakeResource(
113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    WebContents* web_contents) {
114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return scoped_ptr<RendererResource>(
115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      new GuestResource(web_contents->GetRenderViewHost()));
116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace task_manager
119