Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / media / router / media_router.mojom
bloba7425499e49cb3d79afc08f1fbff84a2c1a71dcb
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 module media_router.interfaces;
7 // Represents an output sink to which media can be routed.
8 struct MediaSink {
9   enum IconType {
10     CAST,
11     CAST_AUDIO,
12     GENERIC,
13     HANGOUT
14   };
16   // The sink identifier, e.g. "rs71w7mFzYLFlabir_qO4NHl6SUc."
17   string sink_id;
18   // The human-readable name, e.g. "Janet's Chromecast".
19   string name;
20   // The type of icon to show in the UI for this media sink.
21   IconType icon_type;
22   // True if a route is being created to this sink.
23   bool is_launching;
26 // Should be kept in sync with media_route.h.
27 struct MediaRoute {
28   // The ID of this media route, e.g. "r_PR1O_blkC9dsKp-tb1ti8qurOo".
29   string media_route_id;
30   // The ID of the media source being sent through this media route.
31   // May be missing if route is not local.
32   string? media_source;
33   // The ID of sink that is rendering the media content.
34   string media_sink_id;
35   // Human readable description of this route, e.g.
36   // "Tab casting".
37   string description;
38   // Specifies that the route is requested locally.
39   bool is_local;
40   // An optional path to an HTML page bundled bundled with the media router
41   // component extension. When set, the route can have custom route detail as
42   // well as its own route controls in the media router dialog.
43   string? custom_controller_path;
44   // Set to true if this route should be displayed for |media_sink_id| in UI.
45   bool for_display;
48 // Notifications or an actionable events to be shown to the user.
49 // When is_blocking is true, media router UI shows issue only:
51 //       Title
52 //       Message
53 //       default_action_button secondary_action_button
55 // When is_blocking is false, media router UI uses banner:
57 //       Title default_action_link secondary_action_link
59 // above receiver list if route_id is not provided; otherwise it is
60 // above route detail and controls.
61 struct Issue {
62   enum Severity {
63     FATAL,
64     WARNING,
65     NOTIFICATION
66   };
68   enum ActionType {
69     DISMISS,
70     LEARN_MORE
71   };
73   // If set, the ID of the route to which this issue pertains.
74   // If not set (default), then this is a global issue.
75   string? route_id;
77   Severity severity;
79   // When true, the issue must be presented to the user and resolved
80   // before other actions are allowed.
81   bool is_blocking;
83   // Short description about the issue.
84   string title;
86   // Message about issue detail or how to handle issue.
87   // Messages should be suitable for end users to decide which actions to take.
88   string? message;
90   ActionType default_action;
92   array<ActionType>? secondary_actions;
94   // A help page to be opened if users select learn_more.
95   string? help_url;
98 struct RouteMessage {
99   enum Type {
100     TEXT,
101     BINARY
102   };
103   // The type of this message.
104   Type type;
105   // Used when the |type| is TEXT.
106   string? message;
107   // Used when the |type| is BINARY.
108   array<uint8>? data;
111 // Modeled after the MediaRouter interface defined in
112 // chrome/browser/media/router/media_router.h
113 interface MediaRouteProvider {
114   // Initiates a media route from |media_source| to |sink_id|.
115   // The presentation ID of the route created will be |presentation_id|, but it
116   // may be overridden by a provider implementation. The presentation ID will
117   // be used by the presentation API to refer to the created route.
118   // |origin| and |tab_id| may be passed in for enforcing same-origin and/or
119   // same-tab scopes.
120   // Since int types cannot be made optional, use -1 as |tab_id| in cases where
121   // it is not applicable.
122   // If the operation was successful, |route| will be defined and
123   //     |error_text| will be null.
124   // If the operation failed, |route| will be null and |error_text|
125   //     will be set.
126   CreateRoute(string media_source,
127               string sink_id,
128               string original_presentation_id,
129               string origin,
130               int32 tab_id) => (MediaRoute? route, string? error_text);
132   // Joins an established route given by |presentation_id|
133   // with |media_source|.
134   // |origin| and |tab_id| are used for validating same-origin/tab scopes.
135   // (See CreateRoute for additional documentation)
136   // If the operation was successful, |route| will be defined and
137   //     |error_text| will be null.
138   // If the operation failed, |route| will be null and |error_text|
139   //     will be set.
140   JoinRoute(string media_source,
141             string presentation_id,
142             string origin,
143             int32 tab_id) => (MediaRoute? route, string? error_text);
145   // Closes the route specified by |route_id|.
146   CloseRoute(string route_id);
148   // Sends |message| via the media route |media_route_id|.
149   // If the operation was successful, |sent| is true; otherwise it is false.
150   SendRouteMessage(string media_route_id, string message) => (bool sent);
152   // Sends |data| via the media route |media_route_id|.
153   // If the operation was successful, |sent| is true; otherwise it is false.
154   SendRouteBinaryMessage(string media_route_id, array<uint8> data)
155       => (bool sent);
157   // Starts querying for sinks capable of displaying |media_source|.
158   StartObservingMediaSinks(string media_source);
160   // Stops querying sinks for |media_source|.
161   StopObservingMediaSinks(string media_source);
163   // Starts reporting the state of active media routes via
164   // OnRoutesUpdated(). Querying will continue until
165   // StopObservingMediaRoutes() is called.
166   StartObservingMediaRoutes();
168   // Stops querying the state of all media routes.
169   StopObservingMediaRoutes();
171   // Called when the MediaRouter is ready to get the next batch of messages
172   // associated with |route_id|.
173   // |messages| returned will contain the batch of messages.
174   // |messages| will be empty if |StopListeningForRouteMessages| was invoked.
175   // |error| indicates if a permanent error occurred. If true, then subsequent
176   // calls will also return with |error| being true.
177   ListenForRouteMessages(string route_id) =>
178       (array<RouteMessage> messages, bool error);
180   // Called when there are no more listeners for messages for |route_id|.
181   // Calling this will resolve the pending |ListenForRouteMessages| callback
182   // with an empty list.
183   StopListeningForRouteMessages(string route_id);
185   // Indicates that the presentation session that was connected to route
186   // |route_id| is no longer connected to it.
187   OnPresentationSessionDetached(string route_id);
190 // Interface for a service which observes state changes across media
191 // sources, sinks, and issues.
192 interface MediaRouter {
193   // Registers a MediaRouteProvider with the MediaRouter.
194   // Returns a string that uniquely identifies the Media Router browser
195   // process.
196   RegisterMediaRouteProvider(MediaRouteProvider media_router_provider) =>
197       (string instance_id);
199   // Called when the Media Route Manager receives a new list of sinks.
200   OnSinksReceived(string media_source, array<MediaSink> sinks);
202   // Called when issues are reported for media routes.
203   OnIssue(Issue issue);
205   // Called when list of routes has been updated.
206   OnRoutesUpdated(array<MediaRoute> routes);