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