// Copyright 2017 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/content_decryption_module.mojom";
import "media/mojo/mojom/frame_interface_factory.mojom";
import "mojo/public/mojom/base/file_path.mojom";
import "sandbox/policy/mojom/sandbox.mojom";
import "services/service_manager/public/mojom/interface_provider.mojom";

[EnableIf=is_mac]
import "sandbox/mac/mojom/seatbelt_extension_token.mojom";

// A service to create a CdmFactory that can provide CDM service, typically
// to the media pipeline running in the renderer process. The service itself
// runs in the CDM (utility) process. The service is always connected from the
// browser process.
interface CdmService {
  // Requests an CdmFactory. `frame_interfaces` can optionally be used to
  // provide interfaces hosted by the caller to the remote CdmFactory
  // implementation.
  CreateCdmFactory(pending_receiver<CdmFactory> factory,
                   pending_remote<FrameInterfaceFactory> frame_interfaces);
};

// An interface to provide a sandbox seatbelt extension token synchronously.
[EnableIf=is_mac]
interface SeatbeltExtensionTokenProvider {
  [Sync]
  GetTokens() => (array<sandbox.mac.mojom.SeatbeltExtensionToken> tokens);
};

// A broker service to get the `CdmService`, needed to pass necessary parameters
// to preload the CDM before creating the `CdmService`. The `CdmServiceBroker`
// runs in the CDM (utility) process and is connected from the browser process
// (see content/browser/media/service_factory.cc). In the process there should
// only be one `CdmServiceBroker` and one `CdmService` instance running. As such
// the `GetService()` should only be called once and the subsequent calls will
// simply fail.
//
// Notes on CDM preloading and sandbox:
// - On Windows, when `CdmServiceBroker` is connected the CDM was not sandboxed
// to allow CDM preloading. After `GetService()` the process is fully sandboxed.
// - On Mac, the process is fully sandboxed when launched, and `token_provider`
// is needed to help load the CDM in the process.
// - On Linux/ChromeOS, the CDM is preloaded in the zygote sandbox.
[ServiceSandbox=sandbox.mojom.Sandbox.kCdm]
interface CdmServiceBroker {
  // Loads the CDM at `cdm_path` into the process and returns the `CdmService`.
  GetService(mojo_base.mojom.FilePath cdm_path,
             [EnableIf=is_mac]
             pending_remote<SeatbeltExtensionTokenProvider>? token_provider,
             pending_receiver<CdmService> receiver);
};
