| // Copyright 2019 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 CHROMECAST_BROWSER_EXTENSION_PAGE_H_ | 
 | #define CHROMECAST_BROWSER_EXTENSION_PAGE_H_ | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "chromecast/browser/cast_content_window.h" | 
 | #include "chromecast/browser/cast_web_contents_impl.h" | 
 | #include "content/public/browser/web_contents_observer.h" | 
 |  | 
 | namespace chromecast { | 
 | namespace shell { | 
 | class CastContentWindowAura; | 
 | }  // namespace shell | 
 |  | 
 | class CastExtensionHost; | 
 | class CastWindowManager; | 
 |  | 
 | // A simplified interface for loading and displaying WebContents in cast_shell. | 
 | class ExtensionPage : public content::WebContentsObserver { | 
 |  public: | 
 |   ExtensionPage(const CastWebContents::InitParams& init_params, | 
 |                 const shell::CastContentWindow::CreateParams& window_params, | 
 |                 std::unique_ptr<CastExtensionHost> extension_host, | 
 |                 CastWindowManager* window_manager); | 
 |  | 
 |   ~ExtensionPage() override; | 
 |  | 
 |   content::WebContents* web_contents() const; | 
 |   CastWebContents* cast_web_contents(); | 
 |  | 
 |   void Launch(); | 
 |   void InitializeWindow(); | 
 |  | 
 |  private: | 
 |   // WebContentsObserver implementation: | 
 |   void RenderViewCreated(content::RenderViewHost* render_view_host) override; | 
 |  | 
 |   const std::unique_ptr<shell::CastContentWindowAura> window_; | 
 |   const std::unique_ptr<CastExtensionHost> extension_host_; | 
 |   CastWindowManager* window_manager_; | 
 |   CastWebContentsImpl cast_web_contents_; | 
 |   scoped_refptr<content::SiteInstance> site_instance_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(ExtensionPage); | 
 | }; | 
 |  | 
 | }  // namespace chromecast | 
 |  | 
 | #endif  // CHROMECAST_BROWSER_EXTENSION_PAGE_H_ |