// Copyright 2017 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.mojom; import "media/mojo/mojom/media_types.mojom"; import "mojo/public/mojom/base/unguessable_token.mojom"; import "ui/gfx/geometry/mojom/geometry.mojom"; // Provides mojo clients with AndroidOverlay instances. This will live in the // browser, with clients in the GPU process or renderer. Note that if you're // trying to use overlays somewhere in chromium, then this isn't the interface // you're looking for. Please see media::AndroidOverlayFactory instead. The // AndroidOverlayProvider mojo client implements that interface. interface AndroidOverlayProvider { // Create an overlay and send it to |client|, using |config| as the initial // configuration. |overlay| will hold the overlay object. CreateOverlay(pending_receiver overlay, pending_remote client, AndroidOverlayConfig config); }; // One overlay instance. This will be provided by the provider to clients // elsewhere. Note that you probably want to use media::AndroidOverlay instead // of this if you're trying to use overlays somewhere in chromium. The mojo // client here is an implementation detail of AndroidOverlay via mojo. interface AndroidOverlay { // Cause a layout to occur later. ScheduleLayout(gfx.mojom.Rect rect); }; // Provided by the client to receive status updates about the overlay. Normally // only the AndroidOverlay mojo client will use this directly; application code // shouldn't need this. interface AndroidOverlayClient { // |surface_key| is the key that can be used to retrieve the surface via // binder separately. OnSurfaceReady(uint64 surface_key); // Indicates that this overlay has failed to initialize, before a surface // was provided via OnSurfaceReady. No calls will be sent to the client // after this. OnDestroyed(); // Indicates that this overlay has been destroyed, after an Android Surface // has been provided via OnSurfaceReady. It is required that the client // complete cleanup before signalling completion. In other words, Android // has told us that the surface is going away, and the API contract says // that we must not use it after that callback completes. No other calls // into the client will come after this. [Sync] OnSynchronouslyDestroyed() => (); // Called to provide the current power-efficiency state. May be called more // than once. OnPowerEfficientState(bool is_power_efficient); }; // This is not a mirror of AndroidOverlay::Config, since it contains things that // are specific to the mojo implementation. Application code should use that // one instead. struct AndroidOverlayConfig { // |routing_token| provides the client with an opaque handle that will attach // an overlay to a the correct WindowAndroid. Typical usage is that a // RenderFrameHostImpl will provide this token to the RenderFrame. When the // overlay is created, the WindowAndroid that currently hosts the render frame // will be the parent of the overlay. For legacy reasons, we need this token // to be sent via IPC, so using the message pipe, or other mojo construct, as // the identifier won't work yet. mojo_base.mojom.UnguessableToken routing_token; // Initial rectangle. gfx.mojom.Rect rect; // Is a secure overlay required, such as for displaying protected content? bool secure; // Is a power-efficient overlay required? bool power_efficient; };