// 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/cdm_storage.mojom";
import "media/mojo/mojom/provision_fetcher.mojom";
import "mojo/public/mojom/base/generic_pending_receiver.mojom";
import "url/mojom/origin.mojom";
[EnableIf=is_win]
import "media/mojo/mojom/dcomp_surface_registry.mojom";

// Implemented by things like audio playback in the utility process to respond
// to mute state changes (e.g. the user checks "Mute Site" or "Unmute Site" on a
// tab).
[EnableIf=is_win]
interface MuteStateObserver {
  // Notifies mute state change.
  OnMuteStateChange(bool muted);
};

// A factory providing extra services for media mojo services running remotely.
// The implementation of this interface lives in the browser process and
// is bound to a RenderFrameHost (see MediaInterfaceProxy). Interfaces created
// via this interface also live in the browser process and are mostly bound to
// a document's lifetime.
interface FrameInterfaceFactory {
  // Binds the ProvisionFetcher for the frame.
  CreateProvisionFetcher(pending_receiver<ProvisionFetcher> provision_fetcher);

  // Binds the CdmStorage for the frame. This requires that the frame have
  // CDM storage available.
  CreateCdmStorage(pending_receiver<CdmStorage> cdm_storage);

  // Registers `site_mute_observer` to get notified of site mute state changes.
  [EnableIf=is_win]
  RegisterMuteStateObserver(
      pending_remote<MuteStateObserver> site_mute_observer);

  // Binds a DCOMPSurfaceRegistry to register a surface handle in GPU process.
  [EnableIf=is_win]
  CreateDCOMPSurfaceRegistry(pending_receiver<DCOMPSurfaceRegistry> registry);

  // Gets the origin of the frame associated with the CDM.
  [Sync]
  GetCdmOrigin() => (url.mojom.Origin cdm_origin);

  // Binds a generic media frame-bound interface. This is to allow //content
  // embedders to provide additional interfaces.
  BindEmbedderReceiver(mojo_base.mojom.GenericPendingReceiver receiver);
};
