[go: nahoru, domu]

blob: 8eadae5cab949c8bc0c364428e6c204ae308e9bd [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module media_session.mojom;
import "mojo/public/mojom/base/time.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";
import "services/media_session/public/mojom/media_session.mojom";
// Next MinVersion: 3
// Next Method ID: 3
[Stable, Uuid="1ed3225e-33c8-487b-b79f-4c3ec13ad623"]
interface MediaControllerManager {
// Creates a MediaController linked to a specific session with |request_id|.
// This should match the |request_id| from the AudioFocusRequestState.
CreateMediaControllerForSession@0(
pending_receiver<MediaController> receiver,
mojo_base.mojom.UnguessableToken request_id);
// Creates a MediaController linked to the active session. This will
// automatically route commands to the correct session if the active session
// changes. If there is no active session then commands will be no-ops.
CreateActiveMediaController@1(pending_receiver<MediaController> receiver);
// Suspends all media sessions.
SuspendAllSessions@2();
};
// Controls the associated MediaSession. An active media controller will be
// automatically associated with the most recently interacted with media
// session, otherwise media sessions will be associated with a particular media
// session provided to the service when creating the media controller. If the
// media session is not controllable then the commands will be no-ops.
// Next Method ID: 19
[Stable]
interface MediaController {
// Suspend the media session.
Suspend@0();
// Resume the media session.
Resume@1();
// Stop the media session.
Stop@2();
// This will either suspend or resume the media session based on the
// playback state.
ToggleSuspendResume@3();
// Adds an observer that will forward events from the active media session.
// If the active session changes then observers do not need to be readded.
// Adding the observer will update the observer with the latest state.
AddObserver@4(pending_remote<MediaControllerObserver> observer);
// Skip to the previous track. If there is no previous track then this will be
// a no-op.
PreviousTrack@5();
// Skip to the next track. If there is no next track then this will be a
// no-op.
NextTrack@6();
// Seek the media session. If the media cannot seek then this will be a
// no-op. The |seek_time| is the time delta that the media will seek by and
// supports both positive and negative values. This value cannot be zero.
// The |kDefaultSeekTimeSeconds| provides a default value for seeking by a
// few seconds.
Seek@7(mojo_base.mojom.TimeDelta seek_time);
// Creates an image observer that will be notified when the image of |type|
// for the underlying media session has changed. The image will be at least
// |minimum_size_pc| and closest to |desired_size_px|.
ObserveImages@8(
MediaSessionImageType type, int32 minimum_size_px, int32 desired_size_px,
pending_remote<MediaControllerImageObserver> observer);
// Seek the media session to a non-negative |seek_time| from the beginning of
// the current playing media. If the media cannot seek then this will be a
// no-op.
SeekTo@9(mojo_base.mojom.TimeDelta seek_time);
// Scrub ("fast seek") the media session to a non-negative |seek_time| from
// the beginning of the current playing media. If the media cannot scrub then
// this will be a no-op. The client should call |SeekTo| to finish the
// scrubbing operation.
ScrubTo@10(mojo_base.mojom.TimeDelta seek_time);
// Enter picture-in-picture.
EnterPictureInPicture@11();
// Exit picture-in-picture.
ExitPictureInPicture@12();
// Routes the audio from this Media Session to the given output device. If
// |id| is null, we will route to the default output device.
SetAudioSinkId@13(string? id);
// Mute or unmute the microphone for a WebRTC session.
[MinVersion=1] ToggleMicrophone@14();
// Turn on or off the camera for a WebRTC session.
[MinVersion=1] ToggleCamera@15();
// Hang up a WebRTC session.
[MinVersion=1] HangUp@16();
// Display the source of the MediaSession (e.g. show the tab or the
// application).
[MinVersion=2] Raise@17();
// Mute or unmute the media player.
[MinVersion=3] SetMute@18(bool mute);
};
// The observer for observing media controller events. This is different to a
// MediaSessionObserver because a media controller can have nullable session
// info which will be null if it is not bound to a media session. This would
// be invalid for a media session because it must always have some state.
// Next Method ID: 5
[Stable]
interface MediaControllerObserver {
// Called when the state of the bound media session changes. If |info| is
// empty then the controller is no longer bound to a media session.
MediaSessionInfoChanged@0(MediaSessionInfo? info);
// Called when the bound media session has changed metadata. If |metadata|
// is null then it can be reset, e.g. the media that ws being played has
// been stopped.
MediaSessionMetadataChanged@1(MediaMetadata? metadata);
// Called when the bound media session action list has changed. This tells
// the observer which actions can be used to control the session.
MediaSessionActionsChanged@2(array<MediaSessionAction> action);
// Called when the bound media session changes. This tells the observer the
// |request_id| of the new session of null if it is not bound to a session.
MediaSessionChanged@3(mojo_base.mojom.UnguessableToken? request_id);
// Called when the position of the bound media session has changed. If
// |position| is empty then the media session does not have a position or
// the controller is no longer bound to a media session. Position is updated
// anytime the position state (playback rate, duration) is changed or the
// media is seeked.
MediaSessionPositionChanged@4(MediaPosition? position);
};
// The observer for observing when images associated with a media controller
// change. This is a separate observer because not all clients need to handle
// images.
// Next Method ID: 1
[Stable]
interface MediaControllerImageObserver {
// Called when the observed media controller has a new image of |type|.
// It may be null if there is no image.
MediaControllerImageChanged@0(
MediaSessionImageType type, MediaImageBitmap? bitmap);
};