// 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.

module blink.mojom;

import "media/mojo/mojom/media_player.mojom";
import "services/viz/public/mojom/compositing/surface_id.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";

// PictureInPictureSessionObserver is associated to a PictureInPictureSession at
// its creation. It receives all the events associated to the session lifetime.
interface PictureInPictureSessionObserver {
  // Called when the size of the window associated to the session has changed.
  OnWindowSizeChanged(gfx.mojom.Size size);

  // Called when the session is stopped, typically when the user closes the
  // Picture-in-Picture window or when another session has started. This will
  // not be called when `Stop()` is called on a PictureInPictureSession object.
  OnStopped();
};

// Representation of a Picture-in-Picture session. The caller receives this
// object back after a call to `StartSession()` on the main service. It can be
// used to interact with the session after its creation.
interface PictureInPictureSession {
  // Update the information used to create the session when it was created.
  // This call cannot happen after `Stop()`.
  Update(uint32 player_id,
      viz.mojom.SurfaceId? surface_id,
      gfx.mojom.Size natural_size,
      bool show_play_pause_button);

  // Request to stop the current session. It will close the Picture-in-Picture
  // window and make other calls related to the session no-ops.
  Stop() => ();
};

// PictureInPictureService is a Document-associated interface that lives in
// the browser process. It is responsible for implementing the browser-side
// support for https://wicg.github.io/picture-in-picture and manages all
// picture-in-picture interactions for Document. Picture-in-picture allows
// a Document to display a video in an always-on-top floating window with
// basic playback functionality (e.g. play and pause).
interface PictureInPictureService {
  // Notify the service that it should start a Picture-in-Picture session. If a
  // Picture-in-Picture session is already running, it will be closed.
  // player_id: WebMediaPlayer id used to control playback via the
  //            Picture-in-Picture window.
  // player_remote: MediaPlayer remote to communicate with the renderer side.
  // surface_id: SurfaceId to be shown in the Picture-in-Picture window.
  // natural_size: Size of the video frames.
  // show_play_pause_button: Whether a play/pause control should be offered in
  //                         the Picture-in-Picture window.
  // observer: Observer to be associated with the session.
  //
  // TODO: Now that we are passing |player_remote|, it should be possible to get
  // rid of |player_id| once the few remaining uses of it in the browser process
  // get migrated to not requiring a MediaPlayerId for identification purposes.
  StartSession(
      uint32 player_id,
      pending_associated_remote<media.mojom.MediaPlayer> player_remote,
      viz.mojom.SurfaceId? surface_id,
      gfx.mojom.Size natural_size,
      bool show_play_pause_button,
      pending_remote<PictureInPictureSessionObserver> observer)
          => (pending_remote<PictureInPictureSession>? session, gfx.mojom.Size size);
};
