Chromium Code Reviews| Index: chromecast/browser/cast_web_view.h |
| diff --git a/chromecast/browser/cast_web_view.h b/chromecast/browser/cast_web_view.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..26195913024ecd0458fd3790bb97bf5a1ba8e66f |
| --- /dev/null |
| +++ b/chromecast/browser/cast_web_view.h |
| @@ -0,0 +1,114 @@ |
| +// Copyright 2017 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_CAST_WEB_VIEW_H_ |
| +#define CHROMECAST_BROWSER_CAST_WEB_VIEW_H_ |
| + |
| +#include <memory> |
| +#include <string> |
| + |
| +#include "base/memory/weak_ptr.h" |
| +#include "chromecast/browser/cast_content_window.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/browser/web_contents_delegate.h" |
| +#include "content/public/browser/web_contents_observer.h" |
| + |
| +namespace content { |
| +class BrowserContext; |
| +class RenderViewHost; |
| +class SiteInstance; |
| +} |
| + |
| +namespace chromecast { |
| + |
| +class CastWindowManager; |
| + |
| +// A simplified interface for loading and displaying WebContents in cast_shell. |
| +class CastWebView : content::WebContentsObserver, content::WebContentsDelegate { |
| + public: |
| + class Delegate : public shell::CastContentWindow::Delegate { |
| + public: |
| + // Called when the page has stopped. ie: A 404 occured when loading the page |
| + // or if the render process crashes. |error_code| will return a net::Error |
| + // describing the failure, or net::OK if the page closed naturally. |
| + virtual void OnPageStopped(int error_code) = 0; |
| + |
| + // Called during WebContentsDelegate::LoadingStateChanged. |
| + // |loading| indicates if web_contents_ IsLoading or not. |
| + virtual void OnLoadingStateChanged(bool loading) = 0; |
| + }; |
| + |
| + // |delegate| and |browser_context| should outlive the lifetime of this |
| + // object. |
| + CastWebView(Delegate* delegate, |
| + content::BrowserContext* browser_context, |
| + scoped_refptr<content::SiteInstance> site_instance, |
| + bool transparent); |
| + ~CastWebView() override; |
| + |
| + shell::CastContentWindow* window() const { return window_.get(); } |
| + |
| + content::WebContents* web_contents() const { return web_contents_.get(); } |
| + |
| + // Navigates to |url|. The loaded page will be preloaded if MakeVisible has |
| + // not been called on the object. |
| + void LoadUrl(GURL url); |
|
derekjchow1
2017/02/18 01:39:12
Alok, I re-added this API (splitting it out of the
|
| + |
| + // Begins the close process for this page (ie. triggering document.onunload). |
| + // A consumer of the class can be notified when the process has been finished |
| + // via Delegate::OnPageStopped(). |
| + void ClosePage(); |
| + |
| + // Makes the page visible to the user. |
| + void Show(CastWindowManager* window_manager); |
| + |
| + private: |
| + // WebContentsObserver implementation: |
| + void RenderProcessGone(base::TerminationStatus status) override; |
| + void RenderViewCreated(content::RenderViewHost* render_view_host) override; |
| + void DidFinishNavigation( |
| + content::NavigationHandle* navigation_handle) override; |
| + void DidFailLoad(content::RenderFrameHost* render_frame_host, |
| + const GURL& validated_url, |
| + int error_code, |
| + const base::string16& error_description, |
| + bool was_ignored_by_handler) override; |
| + void DidFirstVisuallyNonEmptyPaint() override; |
| + void DidStartNavigation( |
| + content::NavigationHandle* navigation_handle) override; |
| + void MediaStartedPlaying(const MediaPlayerInfo& media_info, |
| + const MediaPlayerId& id) override; |
| + void MediaStoppedPlaying(const MediaPlayerInfo& media_info, |
| + const MediaPlayerId& id) override; |
| + |
| + // WebContentsDelegate implementation: |
| + content::WebContents* OpenURLFromTab( |
| + content::WebContents* source, |
| + const content::OpenURLParams& params) override; |
| + void CloseContents(content::WebContents* source) override; |
| + void LoadingStateChanged(content::WebContents* source, |
| + bool to_different_document) override; |
| + void ActivateContents(content::WebContents* contents) override; |
| +#if defined(OS_ANDROID) |
| + base::android::ScopedJavaLocalRef<jobject> GetContentVideoViewEmbedder() |
| + override; |
| +#endif // defined(OS_ANDROID) |
| + |
| + void DelayedCloseContents(); |
| + |
| + Delegate* const delegate_; |
| + content::BrowserContext* const browser_context_; |
| + const scoped_refptr<content::SiteInstance> site_instance_; |
| + const bool transparent_; |
| + const std::unique_ptr<shell::CastContentWindow> window_; |
| + std::unique_ptr<content::WebContents> web_contents_; |
| + |
| + base::WeakPtrFactory<CastWebView> weak_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(CastWebView); |
| +}; |
| + |
| +} // namespace chromecast |
| + |
| +#endif // CHROMECAST_BROWSER_CAST_WEB_VIEW_H_ |