blob: 83f8adef7890c7828fa662ed7ddeb7f0c26a8769 [file] [log] [blame]
// Copyright 2020 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 media.mojom;
import "media/mojo/mojom/media_types.mojom";
import "mojo/public/mojom/base/time.mojom";
import "services/media_session/public/mojom/media_session.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
// Implemented by HTMLMediaElement in the renderer process to allow the
// browser to control media playback.
interface MediaPlayer {
// Requests the media player to start or resume media playback.
RequestPlay();
// Requests the media player to pause media playback.
RequestPause(bool triggered_by_user);
// Requests the media player to move forward the media playback position.
RequestSeekForward(mojo_base.mojom.TimeDelta seek_time);
// Requests the media player to move backward the media playback position.
RequestSeekBackward(mojo_base.mojom.TimeDelta seek_time);
// Requests the media player to move to a specific time.
RequestSeekTo(mojo_base.mojom.TimeDelta seek_time);
// Requests the media player to enter the Picture-in-Picture mode.
RequestEnterPictureInPicture();
// Requests the media player to exit the Picture-in-Picture mode.
RequestExitPictureInPicture();
// Requests the media player to mute or unmute.
RequestMute(bool mute);
// Set the volume multiplier to control audio ducking.
// Output volume should be set to |player_volume| * |multiplier|. The range
// of |multiplier| is [0, 1], where 1 indicates normal (non-ducked) playback.
SetVolumeMultiplier(double multiplier);
// Set the player as the persistent video. Persistent video should hide its
// controls and go fullscreen.
SetPersistentState(bool persistent);
// Notify the player that it is now eligible to start recording power
// measurements if |state| is true, else it is no longer eligible.
SetPowerExperimentState(bool enabled);
// Set the media player sink id to |sink_id|.
SetAudioSinkId(string sink_id);
// Suspends the media player when the host frame is closed.
SuspendForFrameClosed();
};
// Implemented by the MediaWebContentsObserver. The remote lives in the renderer
// process and the receiver lives in the browser process.
interface MediaPlayerObserverClient {
// Gets a flag indicating whether media has been played before.
GetHasPlayedBefore() => (bool has_played_before);
};
// Implemented by MediaWebContentsObserver::MediaPlayerObserverHostImpl in the
// browser process.
interface MediaPlayerObserver {
// Notifies that the media player started playing content.
OnMediaPlaying();
// Notifies that the media player stopped playing content,
// indicating in |stream_ended| if playback has reached the end of the stream.
OnMediaPaused(bool stream_ended);
// Notifies that the muted status of the media player has changed.
OnMutedStatusChanged(bool muted);
// Notifies that the media metadata of the media player has changed, along
// with the kind of tracks the media player has, and the type of content.
OnMediaMetadataChanged(
bool has_audio, bool has_video, MediaContentType content_type);
// Notifies the browser process that the media playback position has changed,
// and reports the new current position via |media_position|.
OnMediaPositionStateChanged(media_session.mojom.MediaPosition media_position);
// Notifies that the player has entered fullscreen.
// This does not differentiate native controls fullscreen and custom controls
// fullscreen. |status| is used by MediaWebContentsObserver to trigger
// automatically Picture-in-Picture for fullscreen videos.
OnMediaEffectivelyFullscreenChanged(FullscreenVideoStatus status);
// Notifies that the size of the media player has changed.
OnMediaSizeChanged(gfx.mojom.Size size);
// Notifies the browser process of PictureinPicture playback's availability.
OnPictureInPictureAvailabilityChanged(bool available);
// Notifies that the audio output sink has changed.
OnAudioOutputSinkChanged(string hashed_device_id);
// Notifies that the playback starts/stops using AudioService.
OnUseAudioServiceChanged(bool uses_audio_service);
// Notifies the browser process that the ability to switch audio output
// devices for the associated media player has been disabled.
OnAudioOutputSinkChangingDisabled();
// Notifies that a buffer underflow event happened for the media player.
OnBufferUnderflow();
// Notifies that a playback seek event happened for the media player.
OnSeek();
};
// Implemented by MediaWebContentsObserver::MediaPlayerHostImpl in the browser
// process.
interface MediaPlayerHost {
// Sends a message to the browser notifying the render frame associated to the
// document owning the HTMLMediaElement that a new MediaPlayer is available,
// passing a pending remote (i.e. |player_remote|) that will be used in the
// browser process to establish a channel with the HTMLMediaElement.
// |observer| starts observing the MediaPlayer as soon as the player is
// created.
OnMediaPlayerAdded(pending_associated_remote<MediaPlayer> player_remote,
pending_associated_receiver<MediaPlayerObserver> observer,
int32 player_id);
};