Commit 76c5e970 authored by Takumi Fujimoto's avatar Takumi Fujimoto Committed by Commit Bot

[Media Router] Convert string origin to Mojo origin in media_router_bindings

This CL adds back the string-to-Mojo-origin conversion removed in http://crrev.com/c/769570.
Assuming the crash seen in bug 787427 is due to users using outdated Media Router component extension (<=M59) which send origins as strings, this fixes the issue.

Bug: 787427
Change-Id: If93782a3bca3ebb2ba8d50c7b42ccbef0ba4363e
Reviewed-on: https://chromium-review.googlesource.com/894859
Commit-Queue: Takumi Fujimoto <takumif@chromium.org>
Reviewed-by: default avatarDerek Cheng <imcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#533157}
parent 58881f7e
...@@ -617,6 +617,34 @@ function presentationConnectionCloseReasonToMojo_(reason) { ...@@ -617,6 +617,34 @@ function presentationConnectionCloseReasonToMojo_(reason) {
} }
} }
/**
* Converts string to Mojo origin.
* @param {string|!url.mojom.Origin} origin
* @return {!url.mojom.Origin}
*/
function stringToMojoOrigin_(origin) {
if (origin instanceof url.mojom.Origin) {
return origin;
}
var originUrl = new URL(origin);
var mojoOrigin = {};
mojoOrigin.scheme = originUrl.protocol.replace(':', '');
mojoOrigin.host = originUrl.hostname;
var port = originUrl.port ? Number.parseInt(originUrl.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');
}
mojoOrigin.suborigin = '';
return new url.mojom.Origin(mojoOrigin);
}
/** /**
* Parses the given route request Error object and converts it to the * Parses the given route request Error object and converts it to the
* corresponding result code. * corresponding result code.
...@@ -782,12 +810,16 @@ MediaRouter.prototype.getKeepAlive = function() { ...@@ -782,12 +810,16 @@ MediaRouter.prototype.getKeepAlive = function() {
* updated. * updated.
* @param {!string} sourceUrn * @param {!string} sourceUrn
* @param {!Array<!MediaSink>} sinks * @param {!Array<!MediaSink>} sinks
* @param {!Array<!url.mojom.Origin>} origins * @param {!Array<string|!url.mojom.Origin>} origins
*/ */
MediaRouter.prototype.onSinksReceived = function(sourceUrn, sinks, origins) { MediaRouter.prototype.onSinksReceived = function(sourceUrn, sinks, origins) {
// |origins| is a string array if the Media Router component extension version
// is 59 or older. Without the stringToMojoOrigin_() conversion, clients using
// those extension versions would see a crash shown in
// https://crbug.com/787427.
this.service_.onSinksReceived( this.service_.onSinksReceived(
mediaRouter.mojom.MediaRouteProvider.Id.EXTENSION, sourceUrn, mediaRouter.mojom.MediaRouteProvider.Id.EXTENSION, sourceUrn,
sinks.map(sinkToMojo_), origins); sinks.map(sinkToMojo_), origins.map(stringToMojoOrigin_));
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment