Bug 1409895 - Make dom/media/test stop looking up CurWorkD in content. r=cpearce

MozReview-Commit-ID: 1cWf1Ytns7f

--HG--
extra : rebase_source : 7b92c56851de566f77a6fc437895d2a911bb7fdf
This commit is contained in:
Jed Davis 2017-11-20 10:44:59 -07:00
Родитель 76de7367bd
Коммит 6a1ec633b2
4 изменённых файлов: 114 добавлений и 74 удалений

Просмотреть файл

@ -0,0 +1,21 @@
/* -*- Mode: javascript; indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
const dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
addMessageListener('media-test:getcwd', () => {
let cwd;
try {
cwd = dirSvc.get("CurWorkD", Ci.nsIFile).path;
} finally {
sendAsyncMessage('media-test:cwd', cwd);
}
});

Просмотреть файл

@ -459,28 +459,40 @@ var gOggTrackInfoResults = {
}
};
// Converts a path/filename to a file:// URI which we can load from disk.
// Returns a promise that resolves to a function that converts
// relative paths to absolute, to test loading files from file: URIs.
// Optionally checks whether the file actually exists on disk at the location
// we've specified.
function fileUriToSrc(path, mustExist) {
// android mochitest doesn't support file://
if (manifestNavigator().appVersion.indexOf("Android") != -1 || SpecialPowers.Services.appinfo.name == "B2G")
return path;
function makeAbsolutePathConverter() {
const url = SimpleTest.getTestFileURL('chromeHelper.js');
const script = SpecialPowers.loadChromeScript(url);
return new Promise((resolve, reject) => {
script.addMessageListener('media-test:cwd', cwd => {
if (!cwd) {
ok(false, "Failed to find path to test files");
}
const Ci = SpecialPowers.Ci;
const Cc = SpecialPowers.Cc;
const Cr = SpecialPowers.Cr;
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var f = dirSvc.get("CurWorkD", Ci.nsIFile);
var split = path.split("/");
for(var i = 0; i < split.length; ++i) {
f.append(split[i]);
}
if (mustExist && !f.exists()) {
ok(false, "We expected '" + path + "' to exist, but it doesn't!");
}
return f.path;
resolve((path, mustExist) => {
// android mochitest doesn't support file://
if (manifestNavigator().appVersion.indexOf("Android") != -1 || SpecialPowers.Services.appinfo.name == "B2G")
return path;
const { Ci, Cc } = SpecialPowers;
var f = Cc["@mozilla.org/file/local;1"]
.createInstance(Ci.nsIFile);
f.initWithPath(cwd);
var split = path.split("/");
for(var i = 0; i < split.length; ++i) {
f.append(split[i]);
}
if (mustExist && !f.exists()) {
ok(false, "We expected '" + path + "' to exist, but it doesn't!");
}
return f.path;
});
});
script.sendAsyncMessage('media-test:getcwd');
});
}
// Returns true if two TimeRanges are equal, false otherwise
@ -499,48 +511,50 @@ function range_equals(r1, r2) {
// These are URIs to files that we use to check that we don't leak any state
// or other information such that script can determine stuff about a user's
// environment. Used by test_info_leak.
var gInfoLeakTests = [
{
type: 'video/ogg',
src: fileUriToSrc("tests/dom/media/test/320x240.ogv", true),
},{
type: 'video/ogg',
src: fileUriToSrc("tests/dom/media/test/404.ogv", false),
}, {
type: 'audio/x-wav',
src: fileUriToSrc("tests/dom/media/test/r11025_s16_c1.wav", true),
}, {
type: 'audio/x-wav',
src: fileUriToSrc("tests/dom/media/test/404.wav", false),
}, {
type: 'audio/ogg',
src: fileUriToSrc("tests/dom/media/test/bug461281.ogg", true),
}, {
type: 'audio/ogg',
src: fileUriToSrc("tests/dom/media/test/404.ogg", false),
}, {
type: 'video/webm',
src: fileUriToSrc("tests/dom/media/test/seek.webm", true),
}, {
type: 'video/webm',
src: fileUriToSrc("tests/dom/media/test/404.webm", false),
}, {
type: 'video/ogg',
src: 'http://localhost/404.ogv',
}, {
type: 'audio/x-wav',
src: 'http://localhost/404.wav',
}, {
type: 'video/webm',
src: 'http://localhost/404.webm',
}, {
type: 'video/ogg',
src: 'http://example.com/tests/dom/media/test/test_info_leak.html'
}, {
type: 'audio/ogg',
src: 'http://example.com/tests/dom/media/test/test_info_leak.html'
}
];
function makeInfoLeakTests() {
return makeAbsolutePathConverter().then(fileUriToSrc => [
{
type: 'video/ogg',
src: fileUriToSrc("tests/dom/media/test/320x240.ogv", true),
},{
type: 'video/ogg',
src: fileUriToSrc("tests/dom/media/test/404.ogv", false),
}, {
type: 'audio/x-wav',
src: fileUriToSrc("tests/dom/media/test/r11025_s16_c1.wav", true),
}, {
type: 'audio/x-wav',
src: fileUriToSrc("tests/dom/media/test/404.wav", false),
}, {
type: 'audio/ogg',
src: fileUriToSrc("tests/dom/media/test/bug461281.ogg", true),
}, {
type: 'audio/ogg',
src: fileUriToSrc("tests/dom/media/test/404.ogg", false),
}, {
type: 'video/webm',
src: fileUriToSrc("tests/dom/media/test/seek.webm", true),
}, {
type: 'video/webm',
src: fileUriToSrc("tests/dom/media/test/404.webm", false),
}, {
type: 'video/ogg',
src: 'http://localhost/404.ogv',
}, {
type: 'audio/x-wav',
src: 'http://localhost/404.wav',
}, {
type: 'video/webm',
src: 'http://localhost/404.webm',
}, {
type: 'video/ogg',
src: 'http://example.com/tests/dom/media/test/test_info_leak.html'
}, {
type: 'audio/ogg',
src: 'http://example.com/tests/dom/media/test/test_info_leak.html'
}
]);
}
// These are files that must fire an error during load or playback, and do not
// cause a crash. Used by test_playback_errors, which expects one error event

Просмотреть файл

@ -417,6 +417,7 @@ support-files =
chained-audio-video.ogg^headers^
chained-video.ogv
chained-video.ogv^headers^
chromeHelper.js
contentType.sjs
detodos.opus
detodos.opus^headers^

Просмотреть файл

@ -35,19 +35,21 @@ function createTestArray() {
var tests = [];
var tmpVid = document.createElement("video");
for (var testNum=0; testNum<gInfoLeakTests.length; testNum++) {
var test = gInfoLeakTests[testNum];
if (!tmpVid.canPlayType(test.type)) {
continue;
return makeInfoLeakTests().then(infoLeakTests => {
for (var testNum=0; testNum < infoLeakTests.length; testNum++) {
var test = infoLeakTests[testNum];
if (!tmpVid.canPlayType(test.type)) {
continue;
}
var t = new Object;
t.name = test.src;
t.type = test.type;
tests.push(t);
}
var t = new Object;
t.name = test.src;
t.type = test.type;
tests.push(t);
}
return tests;
return tests;
})
}
function log(msg) {
@ -160,7 +162,9 @@ function startTest(test, token) {
createMedia(test.type, test.name, token);
}
manager.runTests(createTestArray(), startTest);
createTestArray().then(testArray => {
manager.runTests(testArray, startTest);
});
</script>
</pre>