chromium/third_party/blink/public/mojom/mediasession/media_session.mojom

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module blink.mojom;

import "mojo/public/mojom/base/time.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "services/media_session/public/mojom/media_session.mojom";

enum MediaSessionPlaybackState {
     NONE,
     PAUSED,
     PLAYING,
};

interface MediaSessionClient {
  // Notifies the Blink side that a MediaSessionAction has been fired from the
  // UI or the platform. |details| may contain extra information that will be
  // exposed to the site.
  DidReceiveAction(media_session.mojom.MediaSessionAction action,
                   MediaSessionActionDetails? details);
};

// MediaSessionSeekToDetails
// Spec: https://wicg.github.io/mediasession/
struct MediaSessionSeekToDetails {
  mojo_base.mojom.TimeDelta seek_time;
  bool fast_seek;
};

union MediaSessionActionDetails {
  MediaSessionSeekToDetails seek_to;
};

// MediaMetadata
// Spec: https://wicg.github.io/mediasession/
struct SpecMediaMetadata {
  mojo_base.mojom.String16 title;
  mojo_base.mojom.String16 artist;
  mojo_base.mojom.String16 album;
  array<media_session.mojom.MediaImage> artwork;
  array<media_session.mojom.ChapterInformation> chapterInfo;
};

interface MediaSessionService {
  // MediaSessionClient interface is used to notify Blink MediaSession of
  // media control actions.
  SetClient(pending_remote<MediaSessionClient> client);

  // Notifies the browser that the page specified its current playback state.
  SetPlaybackState(MediaSessionPlaybackState state);

  // Notifies the browser that the page specified its current position state.
  SetPositionState(media_session.mojom.MediaPosition? position);

  // Notifies the browser that the metadata is set, |metadata| will be displayed
  // on the UI.
  SetMetadata(SpecMediaMetadata? metadata);

  // Notifies the browser that the page specified its current microphone state.
  SetMicrophoneState(media_session.mojom.MicrophoneState microphone_state);

  // Notifies the browser that the page specified its current camera state.
  SetCameraState(media_session.mojom.CameraState camera_state);

  // Notifies the browser that the event handler for |action| has been set,
  // browser needs to show a media button in the UI or register listeners to the
  // platform.
  EnableAction(media_session.mojom.MediaSessionAction action);

  // Notifies the browser that the event handler for |action| has been set,
  // browser needs to hide the media button in the UI and unregister listeners
  // from the platform.
  DisableAction(media_session.mojom.MediaSessionAction action);
};