michael@0: 'use strict'; michael@0: michael@0: // resolve multiple promise in parallel michael@0: function expectAll(aValue) { michael@0: let deferred = new Promise(function(resolve, reject) { michael@0: let countdown = aValue.length; michael@0: let resolutionValues = new Array(countdown); michael@0: michael@0: for (let i = 0; i < aValue.length; i++) { michael@0: let index = i; michael@0: aValue[i].then(function(val) { michael@0: resolutionValues[index] = val; michael@0: if (--countdown === 0) { michael@0: resolve(resolutionValues); michael@0: } michael@0: }, reject); michael@0: } michael@0: }); michael@0: michael@0: return deferred; michael@0: } michael@0: michael@0: function TestInit() { michael@0: let url = SimpleTest.getTestFileURL("RecordingStatusChromeScript.js") michael@0: let script = SpecialPowers.loadChromeScript(url); michael@0: michael@0: let helper = { michael@0: finish: function () { michael@0: script.destroy(); michael@0: }, michael@0: fakeShutdown: function () { michael@0: script.sendAsyncMessage('fake-content-shutdown', {}); michael@0: } michael@0: }; michael@0: michael@0: script.addMessageListener('chrome-event', function (message) { michael@0: if (helper.hasOwnProperty('onEvent')) { michael@0: helper.onEvent(message); michael@0: } else { michael@0: ok(false, 'unexpected message: ' + JSON.stringify(message)); michael@0: } michael@0: }); michael@0: michael@0: script.sendAsyncMessage("init-chrome-event", { michael@0: type: 'recording-status' michael@0: }); michael@0: michael@0: return Promise.resolve(helper); michael@0: } michael@0: michael@0: function expectEvent(expected, eventHelper) { michael@0: return new Promise(function(resolve, reject) { michael@0: eventHelper.onEvent = function(message) { michael@0: delete eventHelper.onEvent; michael@0: ok(message, JSON.stringify(message)); michael@0: is(message.type, 'recording-status', 'event type: ' + message.type); michael@0: is(message.active, expected.active, 'recording active: ' + message.active); michael@0: is(message.isAudio, expected.isAudio, 'audio recording active: ' + message.isAudio); michael@0: is(message.isVideo, expected.isVideo, 'video recording active: ' + message.isVideo); michael@0: resolve(eventHelper); michael@0: }; michael@0: info('waiting for recording-status'); michael@0: }); michael@0: } michael@0: michael@0: function expectStream(params, callback) { michael@0: return new Promise(function(resolve, reject) { michael@0: var req = navigator.mozGetUserMedia( michael@0: params, michael@0: function(stream) { michael@0: ok(true, 'create media stream'); michael@0: callback(stream); michael@0: resolve(); michael@0: }, michael@0: function(err) { michael@0: ok(false, 'fail to create media stream'); michael@0: reject(err); michael@0: } michael@0: ); michael@0: info('waiting for gUM result'); michael@0: }); michael@0: }