From 6a96b612b66390e040ad11b1f018e77699f588ac Mon Sep 17 00:00:00 2001 From: Narcis Beleuzu Date: Thu, 24 Oct 2019 13:47:37 +0300 Subject: [PATCH] Backed out 5 changesets (bug 1556854) for mda failures on /test_media_selection.html CLOSED TREE Backed out changeset 61a4022333fa (bug 1556854) Backed out changeset cfd809c63877 (bug 1556854) Backed out changeset 057cc9878594 (bug 1556854) Backed out changeset 0f02ff8a5c67 (bug 1556854) Backed out changeset 8719996c65b3 (bug 1556854) --- .eslintignore | 6 +- dom/media/test/AutoplayTestUtils.js | 31 +- dom/media/test/background_video.js | 74 +- dom/media/test/can_play_type_dash.js | 8 +- dom/media/test/can_play_type_ogg.js | 44 +- dom/media/test/can_play_type_wave.js | 6 +- dom/media/test/can_play_type_webm.js | 30 +- dom/media/test/chromeHelper.js | 12 +- .../test/cloneElementVisually_helpers.js | 32 +- dom/media/test/eme.js | 314 +-- ...file_autoplay_policy_activation_frame.html | 2 +- ..._autoplay_policy_eventdown_activation.html | 8 +- dom/media/test/fragment_noplay.js | 27 +- dom/media/test/fragment_play.js | 151 +- dom/media/test/gUM_support.js | 47 +- dom/media/test/manifest.js | 2271 +++++++---------- .../test/marionette/yttest/debug_info.js | 20 +- dom/media/test/marionette/yttest/force_hd.js | 88 +- .../yttest/video_playback_quality.js | 3 +- dom/media/test/play_promise.js | 2 +- dom/media/test/seek_support.js | 60 +- dom/media/test/test_access_control.html | 6 +- .../test/test_autoplay_policy_activation.html | 2 +- ..._autoplay_policy_eventdown_activation.html | 4 +- .../test_autoplay_policy_key_blacklist.html | 2 +- ...lay_policy_play_before_loadedmetadata.html | 4 +- .../test_autoplay_policy_unmute_pauses.html | 4 +- ...lay_policy_web_audio_AudioParamStream.html | 3 +- ...icy_web_audio_createMediaStreamSource.html | 1 - ...web_audio_mediaElementAudioSourceNode.html | 1 - ...esumePageInvokedSuspendedAudioContext.html | 1 - ..._video_drawimage_with_suspended_video.html | 6 +- .../test/test_background_video_suspend.html | 2 +- .../test_background_video_suspend_ends.html | 2 +- ...ground_video_tainted_by_capturestream.html | 4 +- dom/media/test/test_buffered.html | 16 +- dom/media/test/test_bug1248229.html | 1 - .../test_bug1431810_opus_downmix_to_mono.html | 2 - dom/media/test/test_bug1512958.html | 6 +- dom/media/test/test_bug463162.xhtml | 4 +- dom/media/test/test_bug686942.html | 2 +- dom/media/test/test_bug895305.html | 1 - dom/media/test/test_can_play_type_mpeg.html | 6 +- ...test_cloneElementVisually_ended_video.html | 2 - ...test_cloneElementVisually_mediastream.html | 2 - .../test_cloneElementVisually_no_suspend.html | 2 - .../test_cloneElementVisually_paused.html | 2 - .../test_cloneElementVisually_poster.html | 2 - ..._cloneElementVisually_resource_change.html | 2 - dom/media/test/test_clone_media_element.html | 16 +- dom/media/test/test_cueless_webm_seek-1.html | 10 +- dom/media/test/test_cueless_webm_seek-2.html | 6 +- dom/media/test/test_cueless_webm_seek-3.html | 8 +- dom/media/test/test_decoder_disable.html | 14 +- dom/media/test/test_eme_autoplay.html | 5 +- ...attach_same_mediakeys_during_playback.html | 1 - dom/media/test/test_eme_non_mse_fails.html | 6 +- dom/media/test/test_eme_playback.html | 19 +- dom/media/test/test_eme_pssh_in_moof.html | 8 +- .../test/test_eme_request_notifications.html | 1 + ...test_eme_stream_capture_blocked_case1.html | 3 +- ...test_eme_stream_capture_blocked_case2.html | 2 +- ...test_eme_stream_capture_blocked_case3.html | 2 +- .../test_eme_unsetMediaKeys_then_capture.html | 9 +- dom/media/test/test_eme_waitingforkey.html | 1 - dom/media/test/test_fastSeek-forwards.html | 2 +- dom/media/test/test_fastSeek.html | 2 +- dom/media/test/test_fragment_noplay.html | 30 +- dom/media/test/test_fragment_play.html | 30 +- dom/media/test/test_info_leak.html | 11 +- dom/media/test/test_load.html | 21 +- dom/media/test/test_load_same_resource.html | 8 +- dom/media/test/test_media_selection.html | 8 +- .../test/test_mediarecorder_bitrate.html | 1 + ...test_mediarecorder_pause_resume_video.html | 3 +- ...est_mediarecorder_playback_can_repeat.html | 1 - ...mediarecorder_record_4ch_audiocontext.html | 5 +- ...ediarecorder_record_addtracked_stream.html | 4 +- ...est_mediarecorder_record_audiocontext.html | 4 +- ...arecorder_record_canvas_captureStream.html | 3 +- ...iarecorder_record_downsize_resolution.html | 1 - ...iarecorder_record_gum_video_timeslice.html | 4 +- ...rder_record_gum_video_timeslice_mixed.html | 6 +- .../test_mediarecorder_record_timeslice.html | 2 +- ...ediarecorder_record_upsize_resolution.html | 1 - .../test/test_mediarecorder_reload_crash.html | 4 +- .../test_mediarecorder_state_transition.html | 5 +- ...test_mediatrack_consuming_mediastream.html | 10 + .../test/test_mediatrack_replay_from_end.html | 2 + dom/media/test/test_metadata.html | 11 +- .../test/test_midflight_redirect_blocked.html | 18 +- dom/media/test/test_play_twice.html | 64 +- dom/media/test/test_playback.html | 92 +- dom/media/test/test_playback_errors.html | 28 +- dom/media/test/test_playback_hls.html | 74 +- dom/media/test/test_playback_reactivate.html | 42 +- dom/media/test/test_played.html | 16 +- dom/media/test/test_preload_actions.html | 126 +- dom/media/test/test_preload_suspend.html | 6 +- dom/media/test/test_reset_events_async.html | 10 +- dom/media/test/test_reset_src.html | 3 +- dom/media/test/test_seamless_looping.html | 2 - dom/media/test/test_seek-3.html | 2 + dom/media/test/test_seek-6.html | 3 +- dom/media/test/test_seek-7.html | 1 + dom/media/test/test_seekToNextFrame.html | 60 +- dom/media/test/test_seek_negative.html | 4 +- dom/media/test/test_seekable1.html | 4 +- dom/media/test/test_source.html | 5 +- dom/media/test/test_standalone.html | 10 +- .../test/test_streams_capture_origin.html | 1 - .../test/test_streams_element_capture.html | 4 +- .../test_streams_element_capture_reset.html | 12 +- .../test_streams_element_capture_twice.html | 12 +- dom/media/test/test_streams_firstframe.html | 2 - dom/media/test/test_streams_tracks.html | 1 + .../test_temporary_file_blob_video_plays.html | 3 +- dom/media/test/test_texttrackcue.html | 3 +- .../test/test_texttrackevents_video.html | 3 +- dom/media/test/test_texttracklist.html | 4 +- .../test/test_timeupdate_small_files.html | 18 +- dom/media/test/test_trackelementsrc.html | 4 +- dom/media/test/test_trackevent.html | 5 +- ...test_videoPlaybackQuality_totalFrames.html | 8 +- dom/media/test/test_volume.html | 8 +- dom/media/test/test_vp9_superframes.html | 2 +- dom/media/test/test_webvtt_positionalign.html | 2 +- 127 files changed, 1891 insertions(+), 2389 deletions(-) diff --git a/.eslintignore b/.eslintignore index e183abefe829..c42d5279fc18 100644 --- a/.eslintignore +++ b/.eslintignore @@ -11,6 +11,10 @@ # Exclude expected objdirs. obj*/ +# dom/ exclusions which should be removed (aka ESLint enabled) +dom/media/test/ +!dom/media/test/marionette/yttest/*.js + # build/ third-party code build/pgo/js-input/ @@ -155,8 +159,6 @@ dom/encoding/test/file_utf16_be_bom.js dom/encoding/test/file_utf16_le_bom.js # Not parsable -dom/media/test/marionette/yttest/duration_test.js -dom/media/test/marionette/yttest/until_end_test.js dom/tests/mochitest/general/test_focusrings.xul dom/html/test/test_bug677658.html diff --git a/dom/media/test/AutoplayTestUtils.js b/dom/media/test/AutoplayTestUtils.js index 5f34f15b61b8..125a3244390d 100644 --- a/dom/media/test/AutoplayTestUtils.js +++ b/dom/media/test/AutoplayTestUtils.js @@ -1,5 +1,3 @@ -/* import-globals-from manifest.js */ - function playAndPostResult(muted, parent_window) { let element = document.createElement("video"); element.preload = "auto"; @@ -9,13 +7,13 @@ function playAndPostResult(muted, parent_window) { document.body.appendChild(element); let allowedToPlay = element.allowedToPlay; element.play().then( - () => { - parent_window.postMessage({ played: true, allowedToPlay }, "*"); - }, - () => { - parent_window.postMessage({ played: false, allowedToPlay }, "*"); - } - ); + () => { + parent_window.postMessage({played: true, allowedToPlay}, "*"); + }, + () => { + parent_window.postMessage({played: false, allowedToPlay}, "*"); + } + ); } function nextWindowMessage() { @@ -32,15 +30,10 @@ const autoplayPermission = "autoplay-media"; async function pushAutoplayAllowedPermission() { return new Promise((resolve, reject) => { - SpecialPowers.pushPermissions( - [ - { - type: autoplayPermission, - allow: true, - context: document, - }, - ], - resolve - ); + SpecialPowers.pushPermissions([{ + 'type': autoplayPermission, + 'allow': true, + 'context': document + }], resolve); }); } diff --git a/dom/media/test/background_video.js b/dom/media/test/background_video.js index 963aa1023bbc..66b36e58a9e8 100644 --- a/dom/media/test/background_video.js +++ b/dom/media/test/background_video.js @@ -1,35 +1,33 @@ /* 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/. */ - -// This file expects manager to be defined in the global scope. -/* global manager */ -/* import-globals-from manifest.js */ +/* jshint esversion: 6, -W097 */ +/* globals SimpleTest, SpecialPowers, document, info, is, manager, ok */ "use strict"; function startTest(test) { info(test.desc); SimpleTest.waitForExplicitFinish(); - SpecialPowers.pushPrefEnv({ set: test.prefs }, () => { + SpecialPowers.pushPrefEnv({ 'set': test.prefs }, () => { manager.runTests(test.tests, test.runTest); }); } function nextVideoEnded(video) { - return nextEvent(video, "ended"); + return nextEvent(video, 'ended'); } function nextVideoPlaying(video) { - return nextEvent(video, "playing"); + return nextEvent(video, 'playing'); } function nextVideoResumes(video) { - return nextEvent(video, "mozexitvideosuspend"); + return nextEvent(video, 'mozexitvideosuspend'); } function nextVideoSuspends(video) { - return nextEvent(video, "mozentervideosuspend"); + return nextEvent(video, 'mozentervideosuspend'); } /** @@ -38,14 +36,10 @@ function nextVideoSuspends(video) { */ function appendVideoToDoc(url, token, width, height) { // Default size of (160, 120) is used by other media tests. - if (width === undefined) { - width = 160; - } - if (height === undefined) { - height = (3 * width) / 4; - } + if (width === undefined) { width = 160; } + if (height === undefined) { height = 3 * width / 4; } - let v = document.createElement("video"); + let v = document.createElement('video'); v.token = token; v.width = width; v.height = height; @@ -56,14 +50,10 @@ function appendVideoToDoc(url, token, width, height) { function appendVideoToDocWithoutLoad(token, width, height) { // Default size of (160, 120) is used by other media tests. - if (width === undefined) { - width = 160; - } - if (height === undefined) { - height = (3 * width) / 4; - } + if (width === undefined) { width = 160; } + if (height === undefined) { height = 3*width/4; } - let v = document.createElement("video"); + let v = document.createElement('video'); v.token = token; document.body.appendChild(v); v.width = width; @@ -74,13 +64,7 @@ function appendVideoToDocWithoutLoad(token, width, height) { function loadAndWaitUntilLoadedmetadata(video, url, preloadType = "metadata") { return new Promise((resolve, reject) => { video.preload = preloadType; - video.addEventListener( - "loadedmetadata", - () => { - resolve(); - }, - true - ); + video.addEventListener("loadedmetadata", () => { resolve(); }, true); video.src = url; }); } @@ -111,9 +95,7 @@ function waitUntilVisible(video) { * @returns {Promise} Promise that is resolved when video 'playing' event fires. */ function waitUntilPlaying(video) { - var p = once(video, "playing", () => { - ok(true, `${video.token} played.`); - }); + var p = once(video, 'playing', () => { ok(true, `${video.token} played.`); }); Log(video.token, "Start playing"); video.play(); return p; @@ -130,9 +112,7 @@ function waitUntilEnded(video) { return Promise.resolve(); } - return once(video, "ended", () => { - ok(true, `${video.token} ended`); - }); + return once(video, 'ended', () => { ok(true, `${video.token} ended`); }); } /** @@ -141,10 +121,10 @@ function waitUntilEnded(video) { * suspend timer. */ function testSuspendTimerStartedWhenHidden(video) { - var p = once(video, "mozstartvideosuspendtimer").then(() => { - ok(true, `${video.token} suspend begins`); + var p = once(video, 'mozstartvideosuspendtimer').then(() => { + ok(true, `${video.token} suspend begins`) }); - Log(video.token, "Set Hidden"); + Log(video.token, 'Set Hidden'); video.setVisible(false); return p; } @@ -154,7 +134,7 @@ function testSuspendTimerStartedWhenHidden(video) { * @returns {Promise} Promise that is resolved when video decode suspends. */ function testVideoSuspendsWhenHidden(video) { - let p = once(video, "mozentervideosuspend").then(() => { + let p = once(video, 'mozentervideosuspend').then(() => { ok(true, `${video.token} suspends`); }); Log(video.token, "Set hidden"); @@ -167,7 +147,7 @@ function testVideoSuspendsWhenHidden(video) { * @returns {Promise} Promise that is resolved when video decode resumes. */ function testVideoResumesWhenShown(video) { - var p = once(video, "mozexitvideosuspend").then(() => { + var p = once(video, 'mozexitvideosuspend').then(() => { ok(true, `${video.token} resumes`); }); Log(video.token, "Set visible"); @@ -180,7 +160,7 @@ function testVideoResumesWhenShown(video) { * @returns {Promise} Promise that is resolved when video decode resumes. */ function testVideoOnlySeekCompletedWhenShown(video) { - var p = once(video, "mozvideoonlyseekcompleted").then(() => { + var p = once(video, 'mozvideoonlyseekcompleted').then(() => { ok(true, `${video.token} resumes`); }); Log(video.token, "Set visible"); @@ -194,12 +174,8 @@ function testVideoOnlySeekCompletedWhenShown(video) { */ function checkVideoDoesntSuspend(video) { let p = Promise.race([ - waitUntilEnded(video).then(() => { - ok(true, `${video.token} ended before decode was suspended`); - }), - once(video, "mozentervideosuspend", () => { - Promise.reject(new Error(`${video.token} suspended`)); - }), + waitUntilEnded(video).then(() => { ok(true, `${video.token} ended before decode was suspended`) }), + once(video, 'mozentervideosuspend', () => { Promise.reject(new Error(`${video.token} suspended`)) }) ]); Log(video.token, "Set hidden."); video.setVisible(false); @@ -214,7 +190,7 @@ function checkVideoDoesntSuspend(video) { function waitTil(video, time) { Log(video.token, `Waiting for time to reach ${time}s`); return new Promise(resolve => { - video.addEventListener("timeupdate", function timeUpdateEvent() { + video.addEventListener('timeupdate', function timeUpdateEvent() { if (video.currentTime > time) { video.removeEventListener(name, timeUpdateEvent); resolve(); diff --git a/dom/media/test/can_play_type_dash.js b/dom/media/test/can_play_type_dash.js index b4760545db7a..ec5764be23dd 100644 --- a/dom/media/test/can_play_type_dash.js +++ b/dom/media/test/can_play_type_dash.js @@ -11,10 +11,10 @@ function check_dash(v, enabled) { check("application/dash+xml; codecs=vorbis", "probably"); check("application/dash+xml; codecs=vorbis,vp8", "probably"); check("application/dash+xml; codecs=vorbis,vp8.0", "probably"); - check('application/dash+xml; codecs="vorbis,vp8"', "probably"); - check('application/dash+xml; codecs="vorbis,vp8.0"', "probably"); - check('application/dash+xml; codecs="vp8, vorbis"', "probably"); - check('application/dash+xml; codecs="vp8.0, vorbis"', "probably"); + check("application/dash+xml; codecs=\"vorbis,vp8\"", "probably"); + check("application/dash+xml; codecs=\"vorbis,vp8.0\"", "probably"); + check("application/dash+xml; codecs=\"vp8, vorbis\"", "probably"); + check("application/dash+xml; codecs=\"vp8.0, vorbis\"", "probably"); check("application/dash+xml; codecs=vp8", "probably"); check("application/dash+xml; codecs=vp8.0", "probably"); diff --git a/dom/media/test/can_play_type_ogg.js b/dom/media/test/can_play_type_ogg.js index c03f8b2d3efd..8f03b96aeb5e 100644 --- a/dom/media/test/can_play_type_ogg.js +++ b/dom/media/test/can_play_type_ogg.js @@ -1,3 +1,4 @@ + function check_ogg(v, enabled, finish) { function check(type, expected) { is(v.canPlayType(type), enabled ? expected : "", type); @@ -14,7 +15,7 @@ function check_ogg(v, enabled, finish) { check("audio/ogg; codecs=vorbis", "probably"); check("video/ogg; codecs=vorbis", "probably"); check("video/ogg; codecs=vorbis,theora", "probably"); - check('video/ogg; codecs="vorbis, theora"', "probably"); + check("video/ogg; codecs=\"vorbis, theora\"", "probably"); check("video/ogg; codecs=theora", "probably"); resolve(); @@ -24,35 +25,33 @@ function check_ogg(v, enabled, finish) { // Verify Opus support function verify_opus_support() { return new Promise(function(resolve, reject) { - var OpusEnabled = SpecialPowers.getBoolPref( - "media.opus.enabled", - undefined - ); + var OpusEnabled = undefined; + try { + OpusEnabled = SpecialPowers.getBoolPref("media.opus.enabled"); + } catch (ex) { + // SpecialPowers failed, perhaps because Opus isn't compiled in + console.log("media.opus.enabled pref not found; skipping Opus validation"); + } if (OpusEnabled != undefined) { resolve(); } else { - console.log( - "media.opus.enabled pref not found; skipping Opus validation" - ); reject(); } }); } function opus_enable() { - return SpecialPowers.pushPrefEnv({ - set: [["media.opus.enabled", true]], - }).then(function() { - check("audio/ogg; codecs=opus", "probably"); - }); + return SpecialPowers.pushPrefEnv({"set": [['media.opus.enabled', true]]}) + .then(function() { + check("audio/ogg; codecs=opus", "probably"); + }); } function opus_disable() { - return SpecialPowers.pushPrefEnv({ - set: [["media.opus.enabled", false]], - }).then(function() { - check("audio/ogg; codecs=opus", ""); - }); + return SpecialPowers.pushPrefEnv({"set": [['media.opus.enabled', false]]}) + .then(function() { + check("audio/ogg; codecs=opus", ""); + }); } function unspported_ogg() { @@ -65,8 +64,9 @@ function check_ogg(v, enabled, finish) { } basic_test() - .then(verify_opus_support) - .then(opus_enable) - .then(opus_disable) - .then(unspported_ogg, unspported_ogg); + .then(verify_opus_support) + .then(opus_enable) + .then(opus_disable) + .then(unspported_ogg, unspported_ogg); + } diff --git a/dom/media/test/can_play_type_wave.js b/dom/media/test/can_play_type_wave.js index 9c76eebbe109..4a2a48f42b42 100644 --- a/dom/media/test/can_play_type_wave.js +++ b/dom/media/test/can_play_type_wave.js @@ -15,15 +15,15 @@ function check_wave(v, enabled) { check("audio/wave; codecs=7", "probably"); // "no codecs" should be supported, I guess check("audio/wave; codecs=", "maybe"); - check('audio/wave; codecs=""', "maybe"); + check("audio/wave; codecs=\"\"", "maybe"); // Unsupported Wave codecs check("audio/wave; codecs=0", ""); check("audio/wave; codecs=2", ""); check("audio/wave; codecs=xyz,1", ""); check("audio/wave; codecs=1,xyz", ""); - check('audio/wave; codecs="xyz, 1"', ""); + check("audio/wave; codecs=\"xyz, 1\"", ""); // empty codec names check("audio/wave; codecs=,", ""); - check('audio/wave; codecs="0, 1,"', ""); + check("audio/wave; codecs=\"0, 1,\"", ""); } diff --git a/dom/media/test/can_play_type_webm.js b/dom/media/test/can_play_type_webm.js index ee57da66c6e2..8965ce63ce54 100644 --- a/dom/media/test/can_play_type_webm.js +++ b/dom/media/test/can_play_type_webm.js @@ -1,18 +1,14 @@ async function check_webm(v, enabled) { function check(type, expected) { - is( - v.canPlayType(type), - enabled ? expected : "", - type + "='" + expected + "'" - ); + is(v.canPlayType(type), enabled ? expected : "", type + "='" + expected + "'"); } // WebM types check("video/webm", "maybe"); check("audio/webm", "maybe"); - var video = ["vp8", "vp8.0", "vp9", "vp9.0"]; - var audio = ["vorbis", "opus"]; + var video = ['vp8', 'vp8.0', 'vp9', 'vp9.0']; + var audio = ['vorbis', 'opus']; audio.forEach(function(acodec) { check("audio/webm; codecs=" + acodec, "probably"); @@ -21,8 +17,8 @@ async function check_webm(v, enabled) { video.forEach(function(vcodec) { check("video/webm; codecs=" + vcodec, "probably"); audio.forEach(function(acodec) { - check('video/webm; codecs="' + vcodec + ", " + acodec + '"', "probably"); - check('video/webm; codecs="' + acodec + ", " + vcodec + '"', "probably"); + check("video/webm; codecs=\"" + vcodec + ", " + acodec + "\"", "probably"); + check("video/webm; codecs=\"" + acodec + ", " + vcodec + "\"", "probably"); }); }); @@ -31,9 +27,17 @@ async function check_webm(v, enabled) { check("video/webm; codecs=xyz,vorbis", ""); check("video/webm; codecs=vorbis,xyz", ""); - await SpecialPowers.pushPrefEnv({ set: [["media.av1.enabled", true]] }); - check('video/webm; codecs="av1"', "probably"); + function getPref(name) { + var pref = false; + try { + pref = SpecialPowers.getBoolPref(name); + } catch(ex) { } + return pref; + } - await SpecialPowers.pushPrefEnv({ set: [["media.av1.enabled", false]] }); - check('video/webm; codecs="av1"', ""); + await SpecialPowers.pushPrefEnv({"set": [["media.av1.enabled", true]]}); + check("video/webm; codecs=\"av1\"", "probably"); + + await SpecialPowers.pushPrefEnv({"set": [["media.av1.enabled", false]]}); + check("video/webm; codecs=\"av1\"", ""); } diff --git a/dom/media/test/chromeHelper.js b/dom/media/test/chromeHelper.js index ff83660fe2f7..cac77d51d5cb 100644 --- a/dom/media/test/chromeHelper.js +++ b/dom/media/test/chromeHelper.js @@ -4,20 +4,16 @@ * 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/. */ -/* eslint-env mozilla/frame-script */ - "use strict"; -// eslint-disable-next-line mozilla/use-services -const dirSvc = Cc["@mozilla.org/file/directory_service;1"].getService( - Ci.nsIProperties -); +const dirSvc = Cc["@mozilla.org/file/directory_service;1"]. + getService(Ci.nsIProperties); -addMessageListener("media-test:getcwd", () => { +addMessageListener('media-test:getcwd', () => { let cwd; try { cwd = dirSvc.get("CurWorkD", Ci.nsIFile).path; } finally { - sendAsyncMessage("media-test:cwd", cwd); + sendAsyncMessage('media-test:cwd', cwd); } }); diff --git a/dom/media/test/cloneElementVisually_helpers.js b/dom/media/test/cloneElementVisually_helpers.js index ab81aad9ed67..77cffc499de5 100644 --- a/dom/media/test/cloneElementVisually_helpers.js +++ b/dom/media/test/cloneElementVisually_helpers.js @@ -1,7 +1,5 @@ -const TEST_VIDEO_1 = - "http://mochi.test:8888/tests/dom/media/test/bipbop_225w_175kbps.mp4"; -const TEST_VIDEO_2 = - "http://mochi.test:8888/tests/dom/media/test/pixel_aspect_ratio.mp4"; +const TEST_VIDEO_1 = "http://mochi.test:8888/tests/dom/media/test/bipbop_225w_175kbps.mp4"; +const TEST_VIDEO_2 = "http://mochi.test:8888/tests/dom/media/test/pixel_aspect_ratio.mp4"; const LONG_VIDEO = "http://mochi.test:8888/tests/dom/media/test/gizmo.mp4"; /** @@ -11,11 +9,11 @@ const LONG_VIDEO = "http://mochi.test:8888/tests/dom/media/test/gizmo.mp4"; async function setup() { await SpecialPowers.pushPrefEnv({ set: [ - ["media.test.video-suspend", true], - ["media.suspend-bkgnd-video.enabled", true], - ["media.suspend-bkgnd-video.delay-ms", 500], - ["media.dormant-on-pause-timeout-ms", 0], - ["media.cloneElementVisually.testing", true], + [ "media.test.video-suspend", true ], + [ "media.suspend-bkgnd-video.enabled", true ], + [ "media.suspend-bkgnd-video.delay-ms", 500 ], + [ "media.dormant-on-pause-timeout-ms", 0 ], + [ "media.cloneElementVisually.testing", true ], ], }); @@ -91,19 +89,11 @@ async function assertVideosMatch(video1, video2) { let video2Frame = captureFrameImageData(video2); let left = document.getElementById("left"); - let leftCtx = getWrappedScaledCanvasContext( - left, - video1Frame.width, - video1Frame.height - ); + let leftCtx = getWrappedScaledCanvasContext(left, video1Frame.width, video1Frame.height); leftCtx.putImageData(video1Frame, 0, 0); let right = document.getElementById("right"); - let rightCtx = getWrappedScaledCanvasContext( - right, - video2Frame.width, - video2Frame.height - ); + let rightCtx = getWrappedScaledCanvasContext(right, video2Frame.width, video2Frame.height); rightCtx.putImageData(video2Frame, 0, 0); if (video1Frame.data.length != video2Frame.data.length) { @@ -220,7 +210,7 @@ async function ensureVideoSuspendable(video) { video.setVisible(false); await suspendPromise; ok(true, "Suspended after the video was made invisible."); - video.setVisible(true); + video.setVisible(true) ok(!video.hasSuspendTaint(), "Should still be suspendable."); @@ -230,3 +220,5 @@ async function ensureVideoSuspendable(video) { ok(true, "Shutdown decoder after the video was paused."); await video.play(); } + + diff --git a/dom/media/test/eme.js b/dom/media/test/eme.js index 4fac0440b372..5a062800de76 100644 --- a/dom/media/test/eme.js +++ b/dom/media/test/eme.js @@ -1,14 +1,10 @@ -/* import-globals-from manifest.js */ - const CLEARKEY_KEYSYSTEM = "org.w3.clearkey"; -const gCencMediaKeySystemConfig = [ - { - initDataTypes: ["cenc"], - videoCapabilities: [{ contentType: "video/mp4" }], - audioCapabilities: [{ contentType: "audio/mp4" }], - }, -]; +const gCencMediaKeySystemConfig = [{ + initDataTypes: ['cenc'], + videoCapabilities: [{ contentType: 'video/mp4' }], + audioCapabilities: [{ contentType: 'audio/mp4' }], +}]; function IsMacOSSnowLeopardOrEarlier() { var re = /Mac OS X (\d+)\.(\d+)/; @@ -21,21 +17,23 @@ function IsMacOSSnowLeopardOrEarlier() { return major == 10 && minor <= 6; } -function bail(message) { +function bail(message) +{ return function(err) { if (err) { - message += "; " + String(err); + message += "; " + String(err) } ok(false, message); if (err) { info(String(err)); } SimpleTest.finish(); - }; + } } -function ArrayBufferToString(arr) { - var str = ""; +function ArrayBufferToString(arr) +{ + var str = ''; var view = new Uint8Array(arr); for (var i = 0; i < view.length; i++) { str += String.fromCharCode(view[i]); @@ -43,7 +41,8 @@ function ArrayBufferToString(arr) { return str; } -function StringToArrayBuffer(str) { +function StringToArrayBuffer(str) +{ var arr = new ArrayBuffer(str.length); var view = new Uint8Array(arr); for (var i = 0; i < str.length; i++) { @@ -52,15 +51,16 @@ function StringToArrayBuffer(str) { return arr; } -function StringToHex(str) { +function StringToHex(str){ var res = ""; for (var i = 0; i < str.length; ++i) { - res += ("0" + str.charCodeAt(i).toString(16)).slice(-2); + res += ("0" + str.charCodeAt(i).toString(16)).slice(-2); } return res; } -function Base64ToHex(str) { +function Base64ToHex(str) +{ var bin = window.atob(str.replace(/-/g, "+").replace(/_/g, "/")); var res = ""; for (var i = 0; i < bin.length; i++) { @@ -69,56 +69,46 @@ function Base64ToHex(str) { return res; } -function HexToBase64(hex) { +function HexToBase64(hex) +{ var bin = ""; for (var i = 0; i < hex.length; i += 2) { bin += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); } - return window - .btoa(bin) - .replace(/=/g, "") - .replace(/\+/g, "-") - .replace(/\//g, "_"); + return window.btoa(bin).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); } -function TimeRangesToString(trs) { +function TimeRangesToString(trs) +{ var l = trs.length; - if (l === 0) { - return "-"; - } + if (l === 0) { return "-"; } var s = ""; var i = 0; for (;;) { s += trs.start(i) + "-" + trs.end(i); - if (++i === l) { - return s; - } + if (++i === l) { return s; } s += ","; } } -function SourceBufferToString(sb) { - return ( - "SourceBuffer{" + - "AppendMode=" + - (sb.AppendMode || "-") + - ", updating=" + - (sb.updating ? "true" : "false") + - ", buffered=" + - TimeRangesToString(sb.buffered) + - ", audioTracks=" + - (sb.audioTracks ? sb.audioTracks.length : "-") + - ", videoTracks=" + - (sb.videoTracks ? sb.videoTracks.length : "-") + - "}" - ); +function SourceBufferToString(sb) +{ + return ("SourceBuffer{" + + "AppendMode=" + (sb.AppendMode || "-") + + ", updating=" + (sb.updating ? "true" : "false") + + ", buffered=" + TimeRangesToString(sb.buffered) + + ", audioTracks=" + (sb.audioTracks ? sb.audioTracks.length : "-") + + ", videoTracks=" + (sb.videoTracks ? sb.videoTracks.length : "-") + + "}"); } -function SourceBufferListToString(sbl) { +function SourceBufferListToString(sbl) +{ return "SourceBufferList[" + sbl.map(SourceBufferToString).join(", ") + "]"; } -function GenerateClearKeyLicense(licenseRequest, keyStore) { +function GenerateClearKeyLicense(licenseRequest, keyStore) +{ var msgStr = ArrayBufferToString(licenseRequest); var msg = JSON.parse(msgStr); @@ -130,51 +120,47 @@ function GenerateClearKeyLicense(licenseRequest, keyStore) { if (key) { keys.push({ - kty: "oct", - kid: id64, - k: HexToBase64(key), + "kty": "oct", + "kid": id64, + "k": HexToBase64(key) }); } } - return new TextEncoder().encode( - JSON.stringify({ - keys, - type: msg.type || "temporary", - }) - ); + return new TextEncoder().encode(JSON.stringify({ + "keys" : keys, + "type" : msg.type || "temporary" + })); } function UpdateSessionFunc(test, token, sessionType, resolve, reject) { return function(ev) { var license = GenerateClearKeyLicense(ev.message, test.keys); - Log( - token, - "sending update message to CDM: " + new TextDecoder().decode(license) - ); - ev.target - .update(license) - .then(function() { - Log(token, "MediaKeySession update ok!"); - resolve(ev.target); - }) - .catch(function(reason) { - reject(`${token} MediaKeySession update failed: ${reason}`); - }); - }; + Log(token, "sending update message to CDM: " + (new TextDecoder().decode(license))); + ev.target.update(license).then(function() { + Log(token, "MediaKeySession update ok!"); + resolve(ev.target); + }).catch(function(reason) { + reject(`${token} MediaKeySession update failed: ${reason}`); + }); + } } -function MaybeCrossOriginURI(test, uri) { +function MaybeCrossOriginURI(test, uri) +{ if (test.crossOrigin) { return "https://example.com:443/tests/dom/media/test/allowed.sjs?" + uri; + } else { + return uri; } - return uri; } -function AppendTrack(test, ms, track, token) { +function AppendTrack(test, ms, track, token) +{ return new Promise(function(resolve, reject) { var sb; var curFragment = 0; + var resolved = false; var fragments = track.fragments; var fragmentFile; @@ -182,6 +168,7 @@ function AppendTrack(test, ms, track, token) { if (curFragment >= fragments.length) { Log(token, track.name + ": end of track"); resolve(); + resolved = true; return; } @@ -192,10 +179,7 @@ function AppendTrack(test, ms, track, token) { req.responseType = "arraybuffer"; req.addEventListener("load", function() { - Log( - token, - track.name + ": fetch of " + fragmentFile + " complete, appending" - ); + Log(token, track.name + ": fetch of " + fragmentFile + " complete, appending"); sb.appendBuffer(new Uint8Array(req.response)); }); @@ -206,26 +190,14 @@ function AppendTrack(test, ms, track, token) { reject(`${token} - ${track.name}: aborted fetching ${fragmentFile}`); }); - Log( - token, - track.name + - ": addNextFragment() fetching next fragment " + - fragmentFile - ); + Log(token, track.name + ": addNextFragment() fetching next fragment " + fragmentFile); req.send(null); } Log(token, track.name + ": addSourceBuffer(" + track.type + ")"); sb = ms.addSourceBuffer(track.type); sb.addEventListener("updateend", function() { - Log( - token, - track.name + - ": updateend for " + - fragmentFile + - ", " + - SourceBufferToString(sb) - ); + Log(token, track.name + ": updateend for " + fragmentFile + ", " + SourceBufferToString(sb)); addNextFragment(); }); @@ -235,7 +207,8 @@ function AppendTrack(test, ms, track, token) { //Returns a promise that is resolved when the media element is ready to have //its play() function called; when it's loaded MSE fragments. -function LoadTest(test, elem, token, endOfStream = true) { +function LoadTest(test, elem, token, endOfStream = true) +{ if (!test.tracks) { ok(false, token + " test does not have a tracks list"); return Promise.reject(); @@ -245,27 +218,19 @@ function LoadTest(test, elem, token, endOfStream = true) { elem.src = URL.createObjectURL(ms); elem.crossOrigin = test.crossOrigin || false; - return new Promise(function(resolve, reject) { - ms.addEventListener( - "sourceopen", - function() { - Log(token, "sourceopen"); - Promise.all( - test.tracks.map(function(track) { - return AppendTrack(test, ms, track, token); - }) - ) - .then(function() { - Log(token, "Tracks loaded, calling MediaSource.endOfStream()"); - if (endOfStream) { - ms.endOfStream(); - } - resolve(); - }) - .catch(reject); - }, - { once: true } - ); + return new Promise(function (resolve, reject) { + ms.addEventListener("sourceopen", function () { + Log(token, "sourceopen"); + Promise.all(test.tracks.map(function(track) { + return AppendTrack(test, ms, track, token); + })).then(function() { + Log(token, "Tracks loaded, calling MediaSource.endOfStream()"); + if (endOfStream) { + ms.endOfStream(); + } + resolve(); + }).catch(reject); + }, {once: true}); }); } @@ -283,7 +248,7 @@ function EMEPromise() { * or will be rejected with a string that describes the failure. */ function CreateMediaKeys(v, test, token) { - let p = new EMEPromise(); + let p = new EMEPromise; function streamType(type) { var x = test.tracks.find(o => o.name == type); @@ -293,24 +258,21 @@ function CreateMediaKeys(v, test, token) { function onencrypted(ev) { var options = { initDataTypes: [ev.initDataType] }; if (streamType("video")) { - options.videoCapabilities = [{ contentType: streamType("video") }]; + options.videoCapabilities = [{contentType: streamType("video")}]; } if (streamType("audio")) { - options.audioCapabilities = [{ contentType: streamType("audio") }]; + options.audioCapabilities = [{contentType: streamType("audio")}]; } - navigator.requestMediaKeySystemAccess(CLEARKEY_KEYSYSTEM, [options]).then( - keySystemAccess => { - keySystemAccess - .createMediaKeys() - .then(p.resolve, () => - p.reject(`${token} Failed to create MediaKeys object.`) - ); - }, - () => p.reject(`${token} Failed to request key system access.`) - ); + navigator.requestMediaKeySystemAccess(CLEARKEY_KEYSYSTEM, [options]) + .then(keySystemAccess => { + keySystemAccess.createMediaKeys().then( + p.resolve, + () => p.reject(`${token} Failed to create MediaKeys object.`) + ); + }, () => p.reject(`${token} Failed to request key system access.`)); } - v.addEventListener("encrypted", onencrypted, { once: true }); + v.addEventListener("encrypted", onencrypted, {once: true}); return p.promise; } @@ -320,13 +282,14 @@ function CreateMediaKeys(v, test, token) { * with a string that describes the failure. */ function CreateAndSetMediaKeys(v, test, token) { - let p = new EMEPromise(); + let p = new EMEPromise; CreateMediaKeys(v, test, token).then(mediaKeys => { - v.setMediaKeys(mediaKeys).then(p.resolve, () => - p.reject(`${token} Failed to set MediaKeys on