naiveproxy/components/arc/common/screen_capture.mojom
2018-08-11 05:35:24 +00:00

75 lines
3.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2018 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.
// Mojo interface for performing screen capture in ChromeOS at the request of
// Android. Android does not have access to the full desktop for capture (it has
// access only to its Windows), so via this IPC mechanism it can request
// permissions to capture the entire desktop and then also perform that capture.
// The original version of this file lives in the Chromium repository at:
// src/components/arc/common/screen_capture.mojom
// Next MinVersion: 2
module arc.mojom;
// For gfx::Size.
import "components/arc/common/video_common.mojom";
// Implemented by Chrome in order to allow requesting of permissions to perform
// desktop capture as well as creating a session for it.
interface ScreenCaptureHost {
// This will also show the desktop picker in case of multiple displays and
// will then link that desktop window to the granted permission.
// display_name is the string that should be used in the UI
// package_name is what should be used as the permission token
// returns true if the user accepts, false otherwise
RequestPermission@0(string display_name, string package_name) => (bool granted);
// Requests that a corresponding active permission dialog from a prior call to
// RequestPermission be accepted. This will only be allowed under test
// conditions.
// package_name should match what was passed into RequestPermission
[MinVersion=1] TestModeAcceptPermission@2(string package_name);
// Starts a new capture session, binding the session interface to the passed
// in session request.
// notifier interface passed in will be used to send messages back to Android
// for when updates are needed by the Chrome rendering engine
// package_name should correspond to what was passed into the
// RequestPermission call
// size should have the width/height of the buffers used
// returns null interface in the case the permission was not granted, a valid
// interface pointer otherwise
OpenSession@1(ScreenCaptureSessionNotifier notifier,
string package_name, Size size) =>
(ScreenCaptureSession? session);
};
// Implemented by Chrome for handling a screen capture session.
interface ScreenCaptureSession {
// Called to set the graphics buffer that the screen capture should be
// rendered to. This call does not return until the rendering is complete to
// the passed in buffer.
// graphics_buffer should be a handle to the buffer which corresponds to the
// surface being rendered to
// stride is the stride in pixels for each row of the buffer
SetOutputBuffer@0(handle graphics_buffer, uint32 stride) => ();
};
// Implemented by Android.
interface ScreenCaptureInstance {
// Establishes full-duplex communication with the host.
Init@0(ScreenCaptureHost host_ptr) => ();
};
// Implemented by Android as a callback mechanism.
interface ScreenCaptureSessionNotifier {
// This is called when Chrome detects a compositor update but Android is not
// actively rendering. This will occur if the Android windows are minimized or
// not animating but Chrome windows are since Androids rendering stack does
// not update if nothing in Android itself is changing.
ForceUpdate@0();
};