guest_information.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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"
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/notification_service.h"
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_frame_host.h"
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_process_host.h"
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_view_host.h"
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/render_widget_host_iterator.h"
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/site_instance.h"
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/web_contents.h"
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/guest_view/guest_view_base.h"
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/strings/grit/extensions_strings.h"
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/base/l10n/l10n_util.h"
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/image/image.h"
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/image/image_skia.h"
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::RenderProcessHost;
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::RenderViewHost;
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::RenderWidgetHost;
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing content::WebContents;
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochusing extensions::Extension;
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace task_manager {
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass GuestResource : public RendererResource {
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  explicit GuestResource(content::RenderViewHost* render_view_host);
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~GuestResource();
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Resource methods:
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual Type GetType() const OVERRIDE;
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual base::string16 GetTitle() const OVERRIDE;
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual gfx::ImageSkia GetIcon() const OVERRIDE;
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual content::WebContents* GetWebContents() const OVERRIDE;
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(GuestResource);
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
52effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestResource::GuestResource(RenderViewHost* render_view_host)
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    : RendererResource(
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          render_view_host->GetSiteInstance()->GetProcess()->GetHandle(),
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          render_view_host) {
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
58effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestResource::~GuestResource() {
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
61effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochResource::Type GuestResource::GetType() const {
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return GUEST;
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbase::string16 GuestResource::GetTitle() const {
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebContents* web_contents = GetWebContents();
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!web_contents) {
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const int message_id = IDS_EXTENSION_TASK_MANAGER_WEBVIEW_TAG_PREFIX;
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return l10n_util::GetStringFUTF16(message_id, base::string16());
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  extensions::GuestViewBase* guest =
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      extensions::GuestViewBase::FromWebContents(web_contents);
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return l10n_util::GetStringFUTF16(
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      guest->GetTaskPrefix(),
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      util::GetTitleFromWebContents(web_contents));
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochgfx::ImageSkia GuestResource::GetIcon() const {
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  WebContents* web_contents = GetWebContents();
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (web_contents && FaviconTabHelper::FromWebContents(web_contents)) {
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return FaviconTabHelper::FromWebContents(web_contents)->
82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        GetFavicon().AsImageSkia();
83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return gfx::ImageSkia();
85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
87effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochWebContents* GuestResource::GetWebContents() const {
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return WebContents::FromRenderViewHost(render_view_host());
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch////////////////////////////////////////////////////////////////////////////////
92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// GuestInformation class
93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch////////////////////////////////////////////////////////////////////////////////
94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
95effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestInformation::GuestInformation() {}
96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
97effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochGuestInformation::~GuestInformation() {}
98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool GuestInformation::CheckOwnership(WebContents* web_contents) {
100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Guest WebContentses are created and owned internally by the content layer.
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return extensions::GuestViewBase::IsGuest(web_contents);
102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid GuestInformation::GetAll(const NewWebContentsCallback& callback) {
105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<content::RenderWidgetHostIterator> widgets(
106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      content::RenderWidgetHost::GetRenderWidgetHosts());
107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    if (widget->IsRenderView()) {
109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      content::RenderViewHost* rvh = content::RenderViewHost::From(widget);
110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      if (web_contents && extensions::GuestViewBase::IsGuest(web_contents))
112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        callback.Run(web_contents);
113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochscoped_ptr<RendererResource> GuestInformation::MakeResource(
118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    WebContents* web_contents) {
119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return scoped_ptr<RendererResource>(
120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      new GuestResource(web_contents->GetRenderViewHost()));
121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace task_manager
124