| 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
|
| index 86ea2173273d3493db74a10456731a3f580ef5a0..dc17bdda6f99b1f8cb13ffab2b24351ae63bb576 100644
|
| --- a/extensions/renderer/resources/media_router_bindings.js
|
| +++ b/extensions/renderer/resources/media_router_bindings.js
|
| @@ -412,6 +412,15 @@ define('media_router_bindings', [
|
| };
|
|
|
| /**
|
| + * @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
|
| @@ -454,6 +463,7 @@ define('media_router_bindings', [
|
| this.sendRouteBinaryMessage = null;
|
|
|
| /**
|
| + * TODO(imcheng): Remove in M55.
|
| * @type {function(string):
|
| * Promise.<{messages: Array.<RouteMessage>, error: boolean}>}
|
| */
|
| @@ -462,6 +472,11 @@ define('media_router_bindings', [
|
| /**
|
| * @type {function(string)}
|
| */
|
| + this.startlisteningForRouteMessages = null;
|
| +
|
| + /**
|
| + * @type {function(string)}
|
| + */
|
| this.stopListeningForRouteMessages = null;
|
|
|
| /**
|
| @@ -537,7 +552,7 @@ define('media_router_bindings', [
|
| 'startObservingMediaRoutes',
|
| 'sendRouteMessage',
|
| 'sendRouteBinaryMessage',
|
| - 'listenForRouteMessages',
|
| + 'startListeningForRouteMessages',
|
| 'stopListeningForRouteMessages',
|
| 'detachRoute',
|
| 'terminateRoute',
|
| @@ -715,29 +730,47 @@ define('media_router_bindings', [
|
| };
|
|
|
| /**
|
| - * Listen for next batch of messages from one of the routeIds.
|
| + * Listen for messages from a route.
|
| * @param {!string} routeId
|
| - * @return {!Promise.<{messages: Array.<RouteMessage>, error: boolean}>}
|
| - * Resolved with a list of messages, and a boolean indicating if an error
|
| - * occurred.
|
| */
|
| - MediaRouteProvider.prototype.listenForRouteMessages = function(routeId) {
|
| - return this.handlers_.listenForRouteMessages(routeId)
|
| + MediaRouteProvider.prototype.startListeningForRouteMessages = function(
|
| + routeId) {
|
| + if (this.handlers_.startListeningForRouteMessages) {
|
| + this.handlers_.startListeningForRouteMessages(routeId);
|
| + } else {
|
| + // Old API.
|
| + this.listenForRouteMessagesOld(routeId);
|
| + }
|
| + };
|
| +
|
| +
|
| + /**
|
| + * A hack to adapt new MR messaging API to old extension messaging API.
|
| + * TODO(imcheng): Remove in M55.
|
| + * @param {!string} routeId
|
| + */
|
| + MediaRouteProvider.prototype.listenForRouteMessagesOld = function(routeId) {
|
| + this.handlers_.listenForRouteMessages(routeId)
|
| .then(function(messages) {
|
| - return {'messages': messages.map(messageToMojo_), 'error': false};
|
| - }, function() {
|
| - return {'messages': [], 'error': true};
|
| - });
|
| + // If messages is empty, then stopListeningForRouteMessages has been
|
| + // called. We don't need to send it back to MR.
|
| + if (messages.length > 0) {
|
| + // Send the messages back to MR, and listen for next batch of
|
| + // messages.
|
| + this.mediaRouter_.onRouteMessagesReceived(routeId, messages);
|
| + this.listenForRouteMessagesOld(routeId);
|
| + }
|
| + }.bind(this), function() {
|
| + // Ignore rejections.
|
| + }.bind(this));
|
| };
|
|
|
| /**
|
| - * If there is an outstanding |listenForRouteMessages| promise for
|
| - * |routeId|, resolve that promise with an empty array.
|
| * @param {!string} routeId
|
| */
|
| MediaRouteProvider.prototype.stopListeningForRouteMessages = function(
|
| routeId) {
|
| - return this.handlers_.stopListeningForRouteMessages(routeId);
|
| + this.handlers_.stopListeningForRouteMessages(routeId);
|
| };
|
|
|
| /**
|
|
|