15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_GUEST_VIEW_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define EXTENSIONS_BROWSER_GUEST_VIEW_GUEST_VIEW_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/browser/render_frame_host.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/guest_view/guest_view_base.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions { 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// A GuestView is the templated base class for out-of-process frames in the 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// chrome layer. GuestView is templated on its derived type to allow for type- 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// safe access. See GuestViewBase for more information. 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liutemplate <typename T> 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass GuestView : public GuestViewBase { 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) static void Register() { 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GuestViewBase::RegisterGuestViewType(T::Type, base::Bind(&T::Create)); 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static T* From(int embedder_process_id, int guest_instance_id) { 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GuestViewBase* guest = 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GuestViewBase::From(embedder_process_id, guest_instance_id); 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!guest) 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return NULL; 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return guest->As<T>(); 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static T* FromWebContents(content::WebContents* contents) { 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GuestViewBase* guest = GuestViewBase::FromWebContents(contents); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return guest ? guest->As<T>() : NULL; 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static T* FromFrameID(int render_process_id, int render_frame_id) { 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::RenderFrameHost* render_frame_host = 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::RenderFrameHost::FromID(render_process_id, render_frame_id); 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!render_frame_host) { 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return NULL; 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents = 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents::FromRenderFrameHost(render_frame_host); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return FromWebContents(web_contents); 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) T* GetOpener() const { 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GuestViewBase* guest = GuestViewBase::GetOpener(); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!guest) 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return NULL; 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return guest->As<T>(); 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetOpener(T* opener) { 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GuestViewBase::SetOpener(opener); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // GuestViewBase implementation. 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual const char* GetViewType() const OVERRIDE { 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return T::Type; 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected: 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GuestView(content::BrowserContext* browser_context, 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int guest_instance_id) 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : GuestViewBase(browser_context, guest_instance_id) {} 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~GuestView() {} 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(GuestView); 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace extensions 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // EXTENSIONS_BROWSER_GUEST_VIEW_GUEST_VIEW_H_ 77