зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1443942 - Fix dom/media/test/midflight-redirect.sjs. r=jya
Problems here: * The variable `to` is undefined for byte range requests to the end of the resource, making the math fail. Firefox normally makes ranges requests like this. * The bytes.length/4 calculation may not be a whole number, so can result in a byte range header part of the way between two bytes. We need to round the length off. * Instead of re-calculating the contentLength, we can just use the length of the actual byterange substring being returned. That's clearer. * test_midflight_redirect_blocked needs the redirect to happen before metadata has completed loading, but other tests require the redirect to happen *after* metadata is loaded. So add a redirectAt query parameter for the requester to control when to redirect. MozReview-Commit-ID: I6n1NqK0Uze --HG-- extra : rebase_source : a6bd68fe75cfd4c46f63ca815c5a4e9390bd671a
This commit is contained in:
Родитель
9f21b62342
Коммит
fbd7f61c3c
|
@ -48,16 +48,21 @@ function handleRequest(request, response)
|
|||
return;
|
||||
}
|
||||
|
||||
if (from == 0 && !redirected) {
|
||||
to = Math.min(bytes.length / 4, 200);
|
||||
} else {
|
||||
to = to || Math.max(from, bytes.length - 1);
|
||||
if (isNaN(to)) {
|
||||
to = bytes.length - 1;
|
||||
}
|
||||
|
||||
if (from == 0 && !redirected) {
|
||||
to = parseInt(parseQuery(query, "redirectAt")) || Math.floor(bytes.length / 4);
|
||||
}
|
||||
to = Math.min(to, bytes.length - 1);
|
||||
|
||||
// Note: 'to' is the first index *excluded*, so we need (to + 1)
|
||||
// in the substring end here.
|
||||
byterange = bytes.substring(from, to + 1);
|
||||
|
||||
let contentRange = "bytes " + from + "-" + to + "/" + bytes.length;
|
||||
let contentLength = (to - from + 1).toString();
|
||||
let contentLength = byterange.length.toString();
|
||||
|
||||
response.setStatusLine(request.httpVersion, 206, "Partial Content");
|
||||
response.setHeader("Content-Range", contentRange);
|
||||
|
|
|
@ -42,10 +42,12 @@
|
|||
}, false);
|
||||
|
||||
var noise = Math.floor(Math.random() * 100000000);
|
||||
// Note: request redirect before the end of metadata, otherwise we won't
|
||||
// error before metadata has loaded if mixed origins are allowed.
|
||||
element.src = "midflight-redirect.sjs?resource=" + test.name
|
||||
+ (useCors ? "&cors" : "")
|
||||
+ "&type=" + test.type
|
||||
+ "&noise=" + noise;
|
||||
+ "&redirectAt=200";
|
||||
element.preload = "metadata";
|
||||
document.body.appendChild(element);
|
||||
element.load()
|
||||
|
|
|
@ -43,13 +43,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=489415
|
|||
return new Promise(function (resolve, reject) {
|
||||
// Load will redirect mid-flight, which will be detected and should error,
|
||||
// and we should no longer be able to readback.
|
||||
var noise = Math.floor(Math.random() * 100000000);
|
||||
var video = document.createElement("video");
|
||||
video.preload = "metadata";
|
||||
video.controls = true;
|
||||
var url = "http://" + origin + "/tests/dom/media/test/midflight-redirect.sjs?key="
|
||||
+ noise + "&resource=pixel_aspect_ratio.mp4"
|
||||
+ "&type=video/mp4";
|
||||
var url = "http://" + origin + "/tests/dom/media/test/midflight-redirect.sjs"
|
||||
+ "?resource=pixel_aspect_ratio.mp4&type=video/mp4";
|
||||
SimpleTest.info("Loading from " + url);
|
||||
video.src = url;
|
||||
document.body.appendChild(video);
|
||||
|
|
Загрузка…
Ссылка в новой задаче