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