chromium/chromecast/browser/cast_web_view.h

// Copyright 2017 The Chromium Authors
// 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 <cstdint>
#include <string>

#include "base/observer_list_types.h"
#include "base/time/time.h"
#include "chromecast/browser/cast_content_window.h"
#include "chromecast/browser/cast_web_contents.h"
#include "chromecast/ui/mojom/ui_service.mojom.h"
#include "url/gurl.h"

namespace content {
class WebContents;
}  // namespace content

namespace chromecast {

class CastWebService;

// A simplified interface for loading and displaying WebContents in cast_shell.
class CastWebView {
 public:
  // When the unique_ptr is reset, the CastWebView may not necessarily be
  // destroyed. In some cases ownership will be passed to the CastWebService,
  // which eventually handles destruction.
  using Scoped =
      std::unique_ptr<CastWebView, std::function<void(CastWebView*)>>;

  CastWebView() = default;

  CastWebView(const CastWebView&) = delete;
  CastWebView& operator=(const CastWebView&) = delete;

  virtual ~CastWebView() = default;

  virtual CastContentWindow* window() const = 0;

  virtual content::WebContents* web_contents() const = 0;

  virtual CastWebContents* cast_web_contents() = 0;

  virtual base::TimeDelta shutdown_delay() const = 0;

  // Called when the owning handle to CastWebView is destroyed.
  virtual void OwnerDestroyed() = 0;

  void BindReceivers(
      mojo::PendingReceiver<mojom::CastWebContents> web_contents_receiver,
      mojo::PendingReceiver<mojom::CastContentWindow> window_receiver);
};

}  // namespace chromecast

#endif  // CHROMECAST_BROWSER_CAST_WEB_VIEW_H_