Chromium Code Reviews| 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. |
|
apacible
2016/07/07 15:57:44
I'm likely missing context here -- what's special
imcheng
2016/07/07 18:00:58
My intention is for this patch to make it to M53.
|
| * @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); |
| }; |
| /** |