| // Copyright 2015 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 presentation; |
| |
| struct PresentationSessionInfo { |
| string url; |
| string id; |
| }; |
| |
| enum PresentationSessionState { |
| CONNECTED, |
| DISCONNECTED |
| }; |
| |
| enum PresentationErrorType { |
| NO_AVAILABLE_SCREENS, |
| SESSION_REQUEST_CANCELLED, |
| NO_PRESENTATION_FOUND, |
| UNKNOWN, |
| }; |
| |
| struct PresentationError { |
| PresentationErrorType error_type; |
| string message; |
| }; |
| |
| enum PresentationMessageType { |
| TEXT, |
| ARRAY_BUFFER, |
| BLOB, |
| }; |
| |
| struct SessionMessage { |
| PresentationMessageType type; |
| // Used when message type is TEXT. |
| string? message; |
| // Used when message type is ARRAY_BUFFER or BLOB. |
| array<uint8>? data; |
| }; |
| |
| interface PresentationService { |
| // Called when the frame sets or changes the default presentation URL. |
| SetDefaultPresentationURL(string url); |
| |
| // Sets the PresentationServiceClient. |
| SetClient(PresentationServiceClient client); |
| |
| // Starts listening for screen availability for presentation of |
| // |url|. Availability results will be returned to the client via |
| // PresentationServiceClient::OnScreenAvailabilityUpdated. |
| ListenForScreenAvailability(string url); |
| |
| // Stops listening for screen availability for the presentation of |url|. The |
| // PresentationServiceClient will stop receiving availability updates for |
| // |url|. |
| StopListeningForScreenAvailability(string url); |
| |
| // Called when the renderer is ready to receive the browser initiated |
| // session. If the default session is started by the embedder before this |
| // call, the embedder may queue it and run the callback when the call is |
| // performed. |
| ListenForDefaultSessionStart() |
| => (PresentationSessionInfo? defaultSessionInfo); |
| |
| // Called when startSession() is called by the frame. The result callback |
| // will return a non-null and valid PresentationSessionInfo if starting the |
| // session succeeded, or null with a PresentationError if starting the |
| // session failed. |
| // The presentation id returned in |sessionInfo| on success is generated by |
| // the UA. |
| // If the UA identifies a matching session (same presentation url), the user |
| // may choose this existing session and the page will join it rather than get |
| // a new one. |
| StartSession(string presentation_url) |
| => (PresentationSessionInfo? sessionInfo, PresentationError? error); |
| |
| // Called when joinSession() is called by the frame. The result callback |
| // works the same as for the method above. JoinSession will join a known |
| // session (i.e. when the page navigates or the user opens another tab) |
| // silently and without user action. |
| JoinSession(string presentation_url, string? presentation_id) |
| => (PresentationSessionInfo? sessionInfo, PresentationError? error); |
| |
| // Called when send() is called by the frame. The true in the |
| // result callback notifies that the service is ready for next message. |
| // The false in the result callback notifies the renderer to stop sending |
| // the send requests and invalidate all pending requests. This occurs |
| // for eg., when frame is deleted or navigated away. |
| SendSessionMessage(PresentationSessionInfo sessionInfo, SessionMessage message_request) => (bool success); |
| |
| // Called when closeSession() is called by the frame. |
| CloseSession(string presentation_url, string presentation_id); |
| |
| // Starts listening for state changes for sessions created on this frame. |
| // When state change occurs, PresentationServiceClient::OnSessionStateChanged |
| // will be invoked with the session and its new state. |
| // This is called after a presentation session is created. |
| ListenForSessionStateChange(); |
| |
| // Starts listening for messages for session with |sessionInfo|. |
| // Messages will be received in |
| // PresentationServiceClient::OnSessionMessagesReceived. |
| // This is called after a presentation session is created. |
| ListenForSessionMessages(PresentationSessionInfo sessionInfo); |
| }; |
| |
| interface PresentationServiceClient { |
| // Called when the client tries to listen for screen availability changes for |
| // presentation of |url| but it is not supported by the device or underlying |
| // platform. This can also be called if the device is currently in a mode |
| // where it can't do screen discoveries (eg. low battery). |
| OnScreenAvailabilityNotSupported(string url); |
| |
| // Called when the client is listening for screen availability for |
| // presentation of |url| and the state changes. When the client starts to |
| // listen for screen availability, this method will always be called to give |
| // the current known state. It will then be called to notify of state updates. |
| OnScreenAvailabilityUpdated(string url, bool available); |
| |
| // See PresentationService::ListenForSessionStateChange. |
| OnSessionStateChanged(PresentationSessionInfo sessionInfo, |
| PresentationSessionState newState); |
| |
| // See PresentationService::ListenForSessionMessages. |
| OnSessionMessagesReceived(PresentationSessionInfo sessionInfo, array<SessionMessage> messages); |
| }; |