Index: extensions/renderer/resources/media_router_bindings.js |
diff --git a/extensions/renderer/resources/media_router_bindings.js b/extensions/renderer/resources/media_router_bindings.js |
deleted file mode 100644 |
index 3b5cfe92a5df20d13cd78ae755a5a430697822c9..0000000000000000000000000000000000000000 |
--- a/extensions/renderer/resources/media_router_bindings.js |
+++ /dev/null |
@@ -1,962 +0,0 @@ |
-// 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. |
- |
-var mediaRouter; |
- |
-define('media_router_bindings', [ |
- 'content/public/renderer/frame_interfaces', |
- 'chrome/browser/media/router/mojo/media_controller.mojom', |
- 'chrome/browser/media/router/mojo/media_router.mojom', |
- 'chrome/browser/media/router/mojo/media_status.mojom', |
- 'extensions/common/mojo/keep_alive.mojom', |
- 'mojo/common/time.mojom', |
- 'mojo/public/js/bindings', |
- 'net/interfaces/ip_address.mojom', |
- 'url/mojo/origin.mojom', |
- 'url/mojo/url.mojom', |
-], function(frameInterfaces, |
- mediaControllerMojom, |
- mediaRouterMojom, |
- mediaStatusMojom, |
- keepAliveMojom, |
- timeMojom, |
- bindings, |
- ipAddressMojom, |
- originMojom, |
- urlMojom) { |
- 'use strict'; |
- |
- /** |
- * Converts a media sink to a MediaSink Mojo object. |
- * @param {!MediaSink} sink A media sink. |
- * @return {!mediaRouterMojom.MediaSink} A Mojo MediaSink object. |
- */ |
- function sinkToMojo_(sink) { |
- return new mediaRouterMojom.MediaSink({ |
- 'name': sink.friendlyName, |
- 'description': sink.description, |
- 'domain': sink.domain, |
- 'sink_id': sink.id, |
- 'icon_type': sinkIconTypeToMojo(sink.iconType), |
- }); |
- } |
- |
- /** |
- * Converts a media sink's icon type to a MediaSink.IconType Mojo object. |
- * @param {!MediaSink.IconType} type A media sink's icon type. |
- * @return {!mediaRouterMojom.MediaSink.IconType} A Mojo MediaSink.IconType |
- * object. |
- */ |
- function sinkIconTypeToMojo(type) { |
- switch (type) { |
- case 'cast': |
- return mediaRouterMojom.MediaSink.IconType.CAST; |
- case 'cast_audio': |
- return mediaRouterMojom.MediaSink.IconType.CAST_AUDIO; |
- case 'cast_audio_group': |
- return mediaRouterMojom.MediaSink.IconType.CAST_AUDIO_GROUP; |
- case 'generic': |
- return mediaRouterMojom.MediaSink.IconType.GENERIC; |
- case 'hangout': |
- return mediaRouterMojom.MediaSink.IconType.HANGOUT; |
- case 'meeting': |
- return mediaRouterMojom.MediaSink.IconType.MEETING; |
- default: |
- console.error('Unknown sink icon type : ' + type); |
- return mediaRouterMojom.MediaSink.IconType.GENERIC; |
- } |
- } |
- |
- /** |
- * Returns a Mojo MediaRoute object given a MediaRoute and a |
- * media sink name. |
- * @param {!MediaRoute} route |
- * @return {!mojo.MediaRoute} |
- */ |
- function routeToMojo_(route) { |
- return new mediaRouterMojom.MediaRoute({ |
- 'media_route_id': route.id, |
- 'media_source': route.mediaSource, |
- 'media_sink_id': route.sinkId, |
- 'description': route.description, |
- 'icon_url': route.iconUrl, |
- 'is_local': route.isLocal, |
- 'custom_controller_path': route.customControllerPath, |
- // Begin newly added properties, followed by the milestone they were |
- // added. The guard should be safe to remove N+2 milestones later. |
- 'for_display': route.forDisplay, // M47 |
- 'is_incognito': !!route.offTheRecord, // M50 |
- 'is_offscreen_presentation': !!route.isOffscreenPresentation // M56 |
- }); |
- } |
- |
- /** |
- * Converts a route message to a RouteMessage Mojo object. |
- * @param {!RouteMessage} message |
- * @return {!mediaRouterMojom.RouteMessage} A Mojo RouteMessage object. |
- */ |
- function messageToMojo_(message) { |
- if ("string" == typeof message.message) { |
- return new mediaRouterMojom.RouteMessage({ |
- 'type': mediaRouterMojom.RouteMessage.Type.TEXT, |
- 'message': message.message, |
- }); |
- } else { |
- return new mediaRouterMojom.RouteMessage({ |
- 'type': mediaRouterMojom.RouteMessage.Type.BINARY, |
- 'data': message.message, |
- }); |
- } |
- } |
- |
- /** |
- * Converts presentation connection state to Mojo enum value. |
- * @param {!string} state |
- * @return {!mediaRouterMojom.MediaRouter.PresentationConnectionState} |
- */ |
- function presentationConnectionStateToMojo_(state) { |
- var PresentationConnectionState = |
- mediaRouterMojom.MediaRouter.PresentationConnectionState; |
- switch (state) { |
- case 'connecting': |
- return PresentationConnectionState.CONNECTING; |
- case 'connected': |
- return PresentationConnectionState.CONNECTED; |
- case 'closed': |
- return PresentationConnectionState.CLOSED; |
- case 'terminated': |
- return PresentationConnectionState.TERMINATED; |
- default: |
- console.error('Unknown presentation connection state: ' + state); |
- return PresentationConnectionState.TERMINATED; |
- } |
- } |
- |
- /** |
- * Converts presentation connection close reason to Mojo enum value. |
- * @param {!string} reason |
- * @return {!mediaRouterMojom.MediaRouter.PresentationConnectionCloseReason} |
- */ |
- function presentationConnectionCloseReasonToMojo_(reason) { |
- var PresentationConnectionCloseReason = |
- mediaRouterMojom.MediaRouter.PresentationConnectionCloseReason; |
- switch (reason) { |
- case 'error': |
- return PresentationConnectionCloseReason.CONNECTION_ERROR; |
- case 'closed': |
- return PresentationConnectionCloseReason.CLOSED; |
- case 'went_away': |
- return PresentationConnectionCloseReason.WENT_AWAY; |
- default: |
- console.error('Unknown presentation connection close reason : ' + |
- reason); |
- return PresentationConnectionCloseReason.CONNECTION_ERROR; |
- } |
- } |
- |
- // TODO(crbug.com/688177): remove this conversion. |
- /** |
- * Converts Mojo origin to string. |
- * @param {!originMojom.Origin} Mojo origin |
- * @return {string} |
- */ |
- function mojoOriginToString_(origin) { |
- return origin.unique ? '' : |
- `${origin.scheme}:\/\/${origin.host}` + |
- `${origin.port ? `:${origin.port}` : ''}/` |
- } |
- |
- // TODO(crbug.com/688177): remove this conversion. |
- /** |
- * Converts string to Mojo origin. |
- * @param {string} origin |
- * @return {!originMojom.Origin} |
- */ |
- function stringToMojoOrigin_(origin) { |
- var url = new URL(origin); |
- var mojoOrigin = {}; |
- mojoOrigin.scheme = url.protocol.replace(':', ''); |
- mojoOrigin.host = url.hostname; |
- var port = url.port ? Number.parseInt(url.port) : 0; |
- switch (mojoOrigin.scheme) { |
- case 'http': |
- mojoOrigin.port = port || 80; |
- break; |
- case 'https': |
- mojoOrigin.port = port || 443; |
- break; |
- default: |
- throw new Error('Scheme must be http or https'); |
- } |
- return new originMojom.Origin(mojoOrigin); |
- } |
- |
- /** |
- * Parses the given route request Error object and converts it to the |
- * corresponding result code. |
- * @param {!Error} error |
- * @return {!mediaRouterMojom.RouteRequestResultCode} |
- */ |
- function getRouteRequestResultCode_(error) { |
- return error.errorCode ? error.errorCode : |
- mediaRouterMojom.RouteRequestResultCode.UNKNOWN_ERROR; |
- } |
- |
- /** |
- * Creates and returns a successful route response from given route. |
- * @param {!MediaRoute} route |
- * @return {!Object} |
- */ |
- function toSuccessRouteResponse_(route) { |
- return { |
- route: routeToMojo_(route), |
- result_code: mediaRouterMojom.RouteRequestResultCode.OK |
- }; |
- } |
- |
- /** |
- * Creates and returns a error route response from given Error object. |
- * @param {!Error} error |
- * @return {!Object} |
- */ |
- function toErrorRouteResponse_(error) { |
- return { |
- error_text: error.message, |
- result_code: getRouteRequestResultCode_(error) |
- }; |
- } |
- |
- /** |
- * Creates a new MediaRouter. |
- * Converts a route struct to its Mojo form. |
- * @param {!mediaRouterMojom.MediaRouterPtr} service |
- * @constructor |
- */ |
- function MediaRouter(service) { |
- /** |
- * The Mojo service proxy. Allows extension code to call methods that reside |
- * in the browser. |
- * @type {!mediaRouterMojom.MediaRouterPtr} |
- */ |
- this.service_ = service; |
- |
- /** |
- * The provider manager service delegate. Its methods are called by the |
- * browser-resident Mojo service. |
- * @type {!MediaRouter} |
- */ |
- this.mrpm_ = new MediaRouteProvider(this); |
- |
- /** |
- * Handle to a KeepAlive service object, which prevents the extension from |
- * being suspended as long as it remains in scope. |
- * @type {boolean} |
- */ |
- this.keepAlive_ = null; |
- |
- /** |
- * The bindings to bind the service delegate to the Mojo interface. |
- * Object must remain in scope for the lifetime of the connection to |
- * prevent the connection from closing automatically. |
- * @type {!bindings.Binding} |
- */ |
- this.mediaRouteProviderBinding_ = new bindings.Binding( |
- mediaRouterMojom.MediaRouteProvider, this.mrpm_); |
- } |
- |
- /** |
- * Returns definitions of Mojo core and generated Mojom classes that can be |
- * used directly by the component. |
- * @return {!Object} |
- * TODO(imcheng): We should export these along with MediaRouter. This requires |
- * us to modify the component to handle multiple exports. When that logic is |
- * baked in for a couple of milestones, we should be able to remove this |
- * method. |
- */ |
- MediaRouter.prototype.getMojoExports = function() { |
- return { |
- Binding: bindings.Binding, |
- DialMediaSink: mediaRouterMojom.DialMediaSink, |
- CastMediaSink: mediaRouterMojom.CastMediaSink, |
- IPAddress: ipAddressMojom.IPAddress, |
- InterfacePtrController: bindings.InterfacePtrController, |
- InterfaceRequest: bindings.InterfaceRequest, |
- MediaController: mediaControllerMojom.MediaController, |
- MediaStatus: mediaStatusMojom.MediaStatus, |
- MediaStatusObserverPtr: mediaStatusMojom.MediaStatusObserverPtr, |
- Sink: mediaRouterMojom.MediaSink, |
- SinkExtraData: mediaRouterMojom.MediaSinkExtraData, |
- TimeDelta: timeMojom.TimeDelta, |
- Url: urlMojom.Url, |
- }; |
- }; |
- |
- /** |
- * Registers the Media Router Provider Manager with the Media Router. |
- * @return {!Promise<string>} Instance ID for the Media Router. |
- */ |
- MediaRouter.prototype.start = function() { |
- return this.service_.registerMediaRouteProvider( |
- this.mediaRouteProviderBinding_.createInterfacePtrAndBind()).then( |
- function(result) { |
- return result.instance_id; |
- }.bind(this)); |
- } |
- |
- /** |
- * Sets the service delegate methods. |
- * @param {Object} handlers |
- */ |
- MediaRouter.prototype.setHandlers = function(handlers) { |
- this.mrpm_.setHandlers(handlers); |
- } |
- |
- /** |
- * The keep alive status. |
- * @return {boolean} |
- */ |
- MediaRouter.prototype.getKeepAlive = function() { |
- return this.keepAlive_ != null; |
- }; |
- |
- /** |
- * Called by the provider manager when a sink list for a given source is |
- * updated. |
- * @param {!string} sourceUrn |
- * @param {!Array<!MediaSink>} sinks |
- * @param {!Array<string>} origins |
- */ |
- MediaRouter.prototype.onSinksReceived = function(sourceUrn, sinks, |
- origins) { |
- this.service_.onSinksReceived(sourceUrn, sinks.map(sinkToMojo_), |
- origins.map(stringToMojoOrigin_)); |
- }; |
- |
- /** |
- * Called by the provider manager when a sink is found to notify the MR of the |
- * sink's ID. The actual sink will be returned through the normal sink list |
- * update process, so this helps the MR identify the search result in the |
- * list. |
- * @param {string} pseudoSinkId ID of the pseudo sink that started the |
- * search. |
- * @param {string} sinkId ID of the newly-found sink. |
- */ |
- MediaRouter.prototype.onSearchSinkIdReceived = function( |
- pseudoSinkId, sinkId) { |
- this.service_.onSearchSinkIdReceived(pseudoSinkId, sinkId); |
- }; |
- |
- /** |
- * Called by the provider manager to keep the extension from suspending |
- * if it enters a state where suspension is undesirable (e.g. there is an |
- * active MediaRoute.) |
- * If keepAlive is true, the extension is kept alive. |
- * If keepAlive is false, the extension is allowed to suspend. |
- * @param {boolean} keepAlive |
- */ |
- MediaRouter.prototype.setKeepAlive = function(keepAlive) { |
- if (keepAlive === false && this.keepAlive_) { |
- this.keepAlive_.ptr.reset(); |
- this.keepAlive_ = null; |
- } else if (keepAlive === true && !this.keepAlive_) { |
- this.keepAlive_ = new keepAliveMojom.KeepAlivePtr( |
- frameInterfaces.getInterface(keepAliveMojom.KeepAlive.name)); |
- } |
- }; |
- |
- /** |
- * Called by the provider manager to send an issue from a media route |
- * provider to the Media Router, to show the user. |
- * @param {!Object} issue The issue object. |
- */ |
- MediaRouter.prototype.onIssue = function(issue) { |
- function issueSeverityToMojo_(severity) { |
- switch (severity) { |
- case 'fatal': |
- return mediaRouterMojom.Issue.Severity.FATAL; |
- case 'warning': |
- return mediaRouterMojom.Issue.Severity.WARNING; |
- case 'notification': |
- return mediaRouterMojom.Issue.Severity.NOTIFICATION; |
- default: |
- console.error('Unknown issue severity: ' + severity); |
- return mediaRouterMojom.Issue.Severity.NOTIFICATION; |
- } |
- } |
- |
- function issueActionToMojo_(action) { |
- switch (action) { |
- case 'dismiss': |
- return mediaRouterMojom.Issue.ActionType.DISMISS; |
- case 'learn_more': |
- return mediaRouterMojom.Issue.ActionType.LEARN_MORE; |
- default: |
- console.error('Unknown issue action type : ' + action); |
- return mediaRouterMojom.Issue.ActionType.OK; |
- } |
- } |
- |
- var secondaryActions = (issue.secondaryActions || []).map(function(e) { |
- return issueActionToMojo_(e); |
- }); |
- this.service_.onIssue(new mediaRouterMojom.Issue({ |
- 'route_id': issue.routeId, |
- 'severity': issueSeverityToMojo_(issue.severity), |
- 'title': issue.title, |
- 'message': issue.message, |
- 'default_action': issueActionToMojo_(issue.defaultAction), |
- 'secondary_actions': secondaryActions, |
- 'help_page_id': issue.helpPageId, |
- 'is_blocking': issue.isBlocking |
- })); |
- }; |
- |
- /** |
- * Called by the provider manager when the set of active routes |
- * has been updated. |
- * @param {!Array<MediaRoute>} routes The active set of media routes. |
- * @param {string=} sourceUrn The sourceUrn associated with this route |
- * query. |
- * @param {Array<string>=} joinableRouteIds The active set of joinable |
- * media routes. |
- */ |
- MediaRouter.prototype.onRoutesUpdated = |
- function(routes, sourceUrn = '', joinableRouteIds = []) { |
- this.service_.onRoutesUpdated( |
- routes.map(routeToMojo_), |
- sourceUrn, |
- joinableRouteIds); |
- }; |
- |
- /** |
- * Called by the provider manager when sink availability has been updated. |
- * @param {!mediaRouterMojom.MediaRouter.SinkAvailability} availability |
- * The new sink availability. |
- */ |
- MediaRouter.prototype.onSinkAvailabilityUpdated = function(availability) { |
- this.service_.onSinkAvailabilityUpdated(availability); |
- }; |
- |
- /** |
- * Called by the provider manager when the state of a presentation connected |
- * to a route has changed. |
- * @param {string} routeId |
- * @param {string} state |
- */ |
- MediaRouter.prototype.onPresentationConnectionStateChanged = |
- function(routeId, state) { |
- this.service_.onPresentationConnectionStateChanged( |
- routeId, presentationConnectionStateToMojo_(state)); |
- }; |
- |
- /** |
- * Called by the provider manager when the state of a presentation connected |
- * to a route has closed. |
- * @param {string} routeId |
- * @param {string} reason |
- * @param {string} message |
- */ |
- MediaRouter.prototype.onPresentationConnectionClosed = |
- function(routeId, reason, message) { |
- this.service_.onPresentationConnectionClosed( |
- routeId, presentationConnectionCloseReasonToMojo_(reason), message); |
- }; |
- |
- /** |
- * @param {string} routeId |
- * @param {!Array<!RouteMessage>} mesages |
- */ |
- MediaRouter.prototype.onRouteMessagesReceived = function(routeId, messages) { |
- this.service_.onRouteMessagesReceived( |
- routeId, messages.map(messageToMojo_)); |
- }; |
- |
- /** |
- * Object containing callbacks set by the provider manager. |
- * |
- * @constructor |
- * @struct |
- */ |
- function MediaRouterHandlers() { |
- /** |
- * @type {function(!string, !string, !string, !string, !number)} |
- */ |
- this.createRoute = null; |
- |
- /** |
- * @type {function(!string, !string, !string, !number)} |
- */ |
- this.joinRoute = null; |
- |
- /** |
- * @type {function(string): Promise} |
- */ |
- this.terminateRoute = null; |
- |
- /** |
- * @type {function(string)} |
- */ |
- this.startObservingMediaSinks = null; |
- |
- /** |
- * @type {function(string)} |
- */ |
- this.stopObservingMediaSinks = null; |
- |
- /** |
- * @type {function(string, string): Promise} |
- */ |
- this.sendRouteMessage = null; |
- |
- /** |
- * @type {function(string, Uint8Array): Promise} |
- */ |
- this.sendRouteBinaryMessage = null; |
- |
- /** |
- * @type {function(string)} |
- */ |
- this.startListeningForRouteMessages = null; |
- |
- /** |
- * @type {function(string)} |
- */ |
- this.stopListeningForRouteMessages = null; |
- |
- /** |
- * @type {function(string)} |
- */ |
- this.detachRoute = null; |
- |
- /** |
- * @type {function()} |
- */ |
- this.startObservingMediaRoutes = null; |
- |
- /** |
- * @type {function()} |
- */ |
- this.stopObservingMediaRoutes = null; |
- |
- /** |
- * @type {function()} |
- */ |
- this.connectRouteByRouteId = null; |
- |
- /** |
- * @type {function()} |
- */ |
- this.enableMdnsDiscovery = null; |
- |
- /** |
- * @type {function()} |
- */ |
- this.updateMediaSinks = null; |
- |
- /** |
- * @type {function(string, string, !SinkSearchCriteria): string} |
- */ |
- this.searchSinks = null; |
- |
- /** |
- * @type {function()} |
- */ |
- this.provideSinks = null; |
- |
- /** |
- * @type {function(string, !bindings.InterfaceRequest): !Promise<boolean>} |
- */ |
- this.createMediaRouteController = null; |
- |
- /** |
- * @type {function(string, !mediaStatusMojom.MediaStatusObserverPtr)} |
- */ |
- this.setMediaRouteStatusObserver = null; |
- }; |
- |
- /** |
- * Routes calls from Media Router to the provider manager extension. |
- * Registered with the MediaRouter stub. |
- * @param {!MediaRouter} MediaRouter proxy to call into the |
- * Media Router mojo interface. |
- * @constructor |
- */ |
- function MediaRouteProvider(mediaRouter) { |
- /** |
- * Object containing JS callbacks into Provider Manager code. |
- * @type {!MediaRouterHandlers} |
- */ |
- this.handlers_ = new MediaRouterHandlers(); |
- |
- /** |
- * Proxy class to the browser's Media Router Mojo service. |
- * @type {!MediaRouter} |
- */ |
- this.mediaRouter_ = mediaRouter; |
- } |
- |
- /* |
- * Sets the callback handler used to invoke methods in the provider manager. |
- * |
- * @param {!MediaRouterHandlers} handlers |
- */ |
- MediaRouteProvider.prototype.setHandlers = function(handlers) { |
- // TODO(mfoltz): Remove when component that supports this method is |
- // rolled out to all Chrome channels in M56. |
- if (!handlers['onBeforeInvokeHandler']) |
- handlers['onBeforeInvokeHandler'] = () => {}; |
- this.handlers_ = handlers; |
- var requiredHandlers = [ |
- 'stopObservingMediaRoutes', |
- 'startObservingMediaRoutes', |
- 'sendRouteMessage', |
- 'sendRouteBinaryMessage', |
- 'startListeningForRouteMessages', |
- 'stopListeningForRouteMessages', |
- 'detachRoute', |
- 'terminateRoute', |
- 'joinRoute', |
- 'createRoute', |
- 'stopObservingMediaSinks', |
- 'startObservingMediaRoutes', |
- 'connectRouteByRouteId', |
- 'enableMdnsDiscovery', |
- 'updateMediaSinks', |
- 'searchSinks', |
- 'provideSinks', |
- 'createMediaRouteController', |
- 'setMediaRouteStatusObserver', |
- 'onBeforeInvokeHandler' |
- ]; |
- requiredHandlers.forEach(function(nextHandler) { |
- if (handlers[nextHandler] === undefined) { |
- console.error(nextHandler + ' handler not registered.'); |
- } |
- }); |
- } |
- |
- /** |
- * Starts querying for sinks capable of displaying the media source |
- * designated by |sourceUrn|. Results are returned by calling |
- * OnSinksReceived. |
- * @param {!string} sourceUrn |
- */ |
- MediaRouteProvider.prototype.startObservingMediaSinks = |
- function(sourceUrn) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.startObservingMediaSinks(sourceUrn); |
- }; |
- |
- /** |
- * Stops querying for sinks capable of displaying |sourceUrn|. |
- * @param {!string} sourceUrn |
- */ |
- MediaRouteProvider.prototype.stopObservingMediaSinks = |
- function(sourceUrn) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.stopObservingMediaSinks(sourceUrn); |
- }; |
- |
- /** |
- * Requests that |sinkId| render the media referenced by |sourceUrn|. If the |
- * request is from the Presentation API, then origin and tabId will |
- * be populated. |
- * @param {!string} sourceUrn Media source to render. |
- * @param {!string} sinkId Media sink ID. |
- * @param {!string} presentationId Presentation ID from the site |
- * requesting presentation. TODO(mfoltz): Remove. |
- * @param {!originMojom.Origin} origin Origin of site requesting presentation. |
- * @param {!number} tabId ID of tab requesting presentation. |
- * @param {!timeMojom.TimeDelta} timeout If positive, the timeout duration for |
- * the request. Otherwise, the default duration will be used. |
- * @param {!boolean} incognito If true, the route is being requested by |
- * an incognito profile. |
- * @return {!Promise.<!Object>} A Promise resolving to an object describing |
- * the newly created media route, or rejecting with an error message on |
- * failure. |
- */ |
- MediaRouteProvider.prototype.createRoute = |
- function(sourceUrn, sinkId, presentationId, origin, tabId, |
- timeout, incognito) { |
- this.handlers_.onBeforeInvokeHandler(); |
- return this.handlers_.createRoute( |
- sourceUrn, sinkId, presentationId, mojoOriginToString_(origin), tabId, |
- Math.floor(timeout.microseconds / 1000), incognito) |
- .then(function(route) { |
- return toSuccessRouteResponse_(route); |
- }, |
- function(err) { |
- return toErrorRouteResponse_(err); |
- }); |
- }; |
- |
- /** |
- * Handles a request via the Presentation API to join an existing route given |
- * by |sourceUrn| and |presentationId|. |origin| and |tabId| are used for |
- * validating same-origin/tab scope. |
- * @param {!string} sourceUrn Media source to render. |
- * @param {!string} presentationId Presentation ID to join. |
- * @param {!originMojom.Origin} origin Origin of site requesting join. |
- * @param {!number} tabId ID of tab requesting join. |
- * @param {!timeMojom.TimeDelta} timeout If positive, the timeout duration for |
- * the request. Otherwise, the default duration will be used. |
- * @param {!boolean} incognito If true, the route is being requested by |
- * an incognito profile. |
- * @return {!Promise.<!Object>} A Promise resolving to an object describing |
- * the newly created media route, or rejecting with an error message on |
- * failure. |
- */ |
- MediaRouteProvider.prototype.joinRoute = |
- function(sourceUrn, presentationId, origin, tabId, timeout, |
- incognito) { |
- this.handlers_.onBeforeInvokeHandler(); |
- return this.handlers_.joinRoute( |
- sourceUrn, presentationId, mojoOriginToString_(origin), tabId, |
- Math.floor(timeout.microseconds / 1000), incognito) |
- .then(function(route) { |
- return toSuccessRouteResponse_(route); |
- }, |
- function(err) { |
- return toErrorRouteResponse_(err); |
- }); |
- }; |
- |
- /** |
- * Handles a request via the Presentation API to join an existing route given |
- * by |sourceUrn| and |routeId|. |origin| and |tabId| are used for |
- * validating same-origin/tab scope. |
- * @param {!string} sourceUrn Media source to render. |
- * @param {!string} routeId Route ID to join. |
- * @param {!string} presentationId Presentation ID to join. |
- * @param {!originMojom.Origin} origin Origin of site requesting join. |
- * @param {!number} tabId ID of tab requesting join. |
- * @param {!timeMojom.TimeDelta} timeout If positive, the timeout duration for |
- * the request. Otherwise, the default duration will be used. |
- * @param {!boolean} incognito If true, the route is being requested by |
- * an incognito profile. |
- * @return {!Promise.<!Object>} A Promise resolving to an object describing |
- * the newly created media route, or rejecting with an error message on |
- * failure. |
- */ |
- MediaRouteProvider.prototype.connectRouteByRouteId = |
- function(sourceUrn, routeId, presentationId, origin, tabId, |
- timeout, incognito) { |
- this.handlers_.onBeforeInvokeHandler(); |
- return this.handlers_.connectRouteByRouteId( |
- sourceUrn, routeId, presentationId, mojoOriginToString_(origin), tabId, |
- Math.floor(timeout.microseconds / 1000), incognito) |
- .then(function(route) { |
- return toSuccessRouteResponse_(route); |
- }, |
- function(err) { |
- return toErrorRouteResponse_(err); |
- }); |
- }; |
- |
- /** |
- * Terminates the route specified by |routeId|. |
- * @param {!string} routeId |
- * @return {!Promise<!Object>} A Promise resolving to an object describing |
- * the result of the terminate operation, or rejecting with an error |
- * message and code if the operation failed. |
- */ |
- MediaRouteProvider.prototype.terminateRoute = function(routeId) { |
- this.handlers_.onBeforeInvokeHandler(); |
- return this.handlers_.terminateRoute(routeId).then( |
- () => ({result_code: mediaRouterMojom.RouteRequestResultCode.OK}), |
- (err) => toErrorRouteResponse_(err)); |
- }; |
- |
- /** |
- * Posts a message to the route designated by |routeId|. |
- * @param {!string} routeId |
- * @param {!string} message |
- * @return {!Promise.<boolean>} Resolved with true if the message was sent, |
- * or false on failure. |
- */ |
- MediaRouteProvider.prototype.sendRouteMessage = function( |
- routeId, message) { |
- this.handlers_.onBeforeInvokeHandler(); |
- return this.handlers_.sendRouteMessage(routeId, message) |
- .then(function() { |
- return {'sent': true}; |
- }, function() { |
- return {'sent': false}; |
- }); |
- }; |
- |
- /** |
- * Sends a binary message to the route designated by |routeId|. |
- * @param {!string} routeId |
- * @param {!Array<number>} data |
- * @return {!Promise.<boolean>} Resolved with true if the data was sent, |
- * or false on failure. |
- */ |
- MediaRouteProvider.prototype.sendRouteBinaryMessage = function( |
- routeId, data) { |
- this.handlers_.onBeforeInvokeHandler(); |
- return this.handlers_.sendRouteBinaryMessage(routeId, new Uint8Array(data)) |
- .then(function() { |
- return {'sent': true}; |
- }, function() { |
- return {'sent': false}; |
- }); |
- }; |
- |
- /** |
- * Listen for messages from a route. |
- * @param {!string} routeId |
- */ |
- MediaRouteProvider.prototype.startListeningForRouteMessages = function( |
- routeId) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.startListeningForRouteMessages(routeId); |
- }; |
- |
- /** |
- * @param {!string} routeId |
- */ |
- MediaRouteProvider.prototype.stopListeningForRouteMessages = function( |
- routeId) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.stopListeningForRouteMessages(routeId); |
- }; |
- |
- /** |
- * Indicates that the presentation connection that was connected to |routeId| |
- * is no longer connected to it. |
- * @param {!string} routeId |
- */ |
- MediaRouteProvider.prototype.detachRoute = function( |
- routeId) { |
- this.handlers_.detachRoute(routeId); |
- }; |
- |
- /** |
- * Requests that the provider manager start sending information about active |
- * media routes to the Media Router. |
- * @param {!string} sourceUrn |
- */ |
- MediaRouteProvider.prototype.startObservingMediaRoutes = function(sourceUrn) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.startObservingMediaRoutes(sourceUrn); |
- }; |
- |
- /** |
- * Requests that the provider manager stop sending information about active |
- * media routes to the Media Router. |
- * @param {!string} sourceUrn |
- */ |
- MediaRouteProvider.prototype.stopObservingMediaRoutes = function(sourceUrn) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.stopObservingMediaRoutes(sourceUrn); |
- }; |
- |
- /** |
- * Enables mDNS device discovery. |
- */ |
- MediaRouteProvider.prototype.enableMdnsDiscovery = function() { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.enableMdnsDiscovery(); |
- }; |
- |
- /** |
- * Requests that the provider manager update media sinks. |
- * @param {!string} sourceUrn |
- */ |
- MediaRouteProvider.prototype.updateMediaSinks = function(sourceUrn) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.updateMediaSinks(sourceUrn); |
- }; |
- |
- /** |
- * Requests that the provider manager search its providers for a sink matching |
- * |searchCriteria| that is compatible with |sourceUrn|. If a sink is found |
- * that can be used immediately for route creation, its ID is returned. |
- * Otherwise the empty string is returned. |
- * |
- * @param {string} sinkId Sink ID of the pseudo sink generating the request. |
- * @param {string} sourceUrn Media source to be used with the sink. |
- * @param {!SinkSearchCriteria} searchCriteria Search criteria for the route |
- * providers. |
- * @return {!Promise.<!{sink_id: !string}>} A Promise resolving to either the |
- * sink ID of the sink found by the search that can be used for route |
- * creation, or the empty string if no route can be immediately created. |
- */ |
- MediaRouteProvider.prototype.searchSinks = function( |
- sinkId, sourceUrn, searchCriteria) { |
- this.handlers_.onBeforeInvokeHandler(); |
- const searchSinksResponse = |
- this.handlers_.searchSinks(sinkId, sourceUrn, searchCriteria); |
- |
- if ('string' == typeof searchSinksResponse) { |
- // TODO (zijiang): Remove this check when M59 is stable and the |
- // extension is always returning a promise. |
- return Promise.resolve({ |
- 'sink_id': sink_id |
- }); |
- } |
- return searchSinksResponse.then( |
- sink_id => { |
- return { 'sink_id': sink_id }; |
- }, |
- () => { |
- return { 'sink_id': '' }; |
- }); |
- }; |
- |
- /** |
- * Notifies the provider manager that MediaRouter has discovered a list of |
- * sinks. |
- * @param {string} providerName |
- * @param {!Array<!mediaRouterMojom.MediaSink>} sinks |
- */ |
- MediaRouteProvider.prototype.provideSinks = function(providerName, sinks) { |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.provideSinks(providerName, sinks); |
- }; |
- |
- /** |
- * Creates a controller for the given route and binds the given |
- * InterfaceRequest to it. |
- * @param {string} routeId |
- * @param {!bindings.InterfaceRequest} controllerRequest |
- * @return {!Promise<!{success: boolean}>} Resolves to true if a controller |
- * is created. Resolves to false if a controller cannot be created, or if |
- * the controller is already bound. |
- */ |
- MediaRouteProvider.prototype.createMediaRouteController = function( |
- routeId, controllerRequest) { |
- // TODO(imcheng): Remove this check when M59 is in stable. |
- if (!this.handlers_.createMediaRouteController) { |
- return Promise.resolve({success: false}); |
- } |
- |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.createMediaRouteController(routeId, controllerRequest) |
- .then(controller => {success: true}, |
- e => {success: false}); |
- } |
- |
- /** |
- * Sets the MediaStatus oberver for a given route. MediaStatus updates are |
- * notified via the given observer interface. |
- * @param {string} routeId |
- * @param {!mediaStatusMojom.MediaStatusObserverPtr} observer |
- */ |
- MediaRouteProvider.prototype.setMediaRouteStatusObserver = function( |
- routeId, observer) { |
- // TODO(imcheng): Remove this check when M59 is in stable. |
- if (!this.handlers_.setMediaRouteStatusObserver) { |
- return; |
- } |
- this.handlers_.onBeforeInvokeHandler(); |
- this.handlers_.setMediaRouteStatusObserver(routeId, observer); |
- }; |
- |
- mediaRouter = new MediaRouter(new mediaRouterMojom.MediaRouterPtr( |
- frameInterfaces.getInterface(mediaRouterMojom.MediaRouter.name))); |
- |
- return mediaRouter; |
-}); |