From 6a1ec633b2c6cf46b4465294f660ae30e5806e26 Mon Sep 17 00:00:00 2001 From: Jed Davis Date: Mon, 20 Nov 2017 10:44:59 -0700 Subject: [PATCH] Bug 1409895 - Make dom/media/test stop looking up CurWorkD in content. r=cpearce MozReview-Commit-ID: 1cWf1Ytns7f --HG-- extra : rebase_source : 7b92c56851de566f77a6fc437895d2a911bb7fdf --- dom/media/test/chromeHelper.js | 21 +++++ dom/media/test/manifest.js | 136 ++++++++++++++++------------- dom/media/test/mochitest.ini | 1 + dom/media/test/test_info_leak.html | 30 ++++--- 4 files changed, 114 insertions(+), 74 deletions(-) create mode 100644 dom/media/test/chromeHelper.js diff --git a/dom/media/test/chromeHelper.js b/dom/media/test/chromeHelper.js new file mode 100644 index 000000000000..a12b710dd330 --- /dev/null +++ b/dom/media/test/chromeHelper.js @@ -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); + } +}); diff --git a/dom/media/test/manifest.js b/dom/media/test/manifest.js index bd5331fd6900..554537be95ff 100644 --- a/dom/media/test/manifest.js +++ b/dom/media/test/manifest.js @@ -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 diff --git a/dom/media/test/mochitest.ini b/dom/media/test/mochitest.ini index 64346abbb65f..ea4e55f820c0 100644 --- a/dom/media/test/mochitest.ini +++ b/dom/media/test/mochitest.ini @@ -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^ diff --git a/dom/media/test/test_info_leak.html b/dom/media/test/test_info_leak.html index 21d53eca29fd..aace14a7a7a8 100644 --- a/dom/media/test/test_info_leak.html +++ b/dom/media/test/test_info_leak.html @@ -35,19 +35,21 @@ function createTestArray() { var tests = []; var tmpVid = document.createElement("video"); - for (var testNum=0; testNum { + 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); +});