// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_H_ #define COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_H_ #include "components/guest_view/browser/guest_view_base.h" #include "components/guest_view/browser/guest_view_manager.h" #include "content/public/browser/render_frame_host.h" namespace guest_view { // A GuestView is the templated base class for out-of-process frames in the // chrome layer. GuestView is templated on its derived type to allow for type- // safe access. See GuestViewBase for more information. template class GuestView : public GuestViewBase { public: static T* From(int embedder_process_id, int guest_instance_id) { auto guest = GuestViewBase::From(embedder_process_id, guest_instance_id); if (!guest) return nullptr; return guest->As(); } static T* FromWebContents(const content::WebContents* contents) { auto guest = GuestViewBase::FromWebContents(contents); return guest ? guest->As() : nullptr; } static T* FromFrameID(int render_process_id, int render_frame_id) { auto render_frame_host = content::RenderFrameHost::FromID(render_process_id, render_frame_id); if (!render_frame_host) return nullptr; auto web_contents = content::WebContents::FromRenderFrameHost(render_frame_host); return FromWebContents(web_contents); } T* GetOpener() const { GuestViewBase* guest = GuestViewBase::GetOpener(); if (!guest) return nullptr; return guest->As(); } void SetOpener(T* opener) { GuestViewBase::SetOpener(opener); } // GuestViewBase implementation. const char* GetViewType() const final { return T::Type; } protected: explicit GuestView(content::WebContents* owner_web_contents) : GuestViewBase(owner_web_contents) {} ~GuestView() override {} private: DISALLOW_COPY_AND_ASSIGN(GuestView); }; } // namespace guest_view #endif // COMPONENTS_GUEST_VIEW_BROWSER_GUEST_VIEW_H_