summaryrefslogtreecommitdiffstats
path: root/b2g/chrome/content/test/mochitest/RecordingStatusHelper.js
blob: 5e3e6814e1fd30a38355a55a99b42a269e3b0bf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
'use strict';

// resolve multiple promise in parallel
function expectAll(aValue) {
  let deferred = new Promise(function(resolve, reject) {
    let countdown = aValue.length;
    let resolutionValues = new Array(countdown);

    for (let i = 0; i < aValue.length; i++) {
      let index = i;
      aValue[i].then(function(val) {
        resolutionValues[index] = val;
        if (--countdown === 0) {
          resolve(resolutionValues);
        }
      }, reject);
    }
  });

  return deferred;
}

function TestInit() {
  let url = SimpleTest.getTestFileURL("RecordingStatusChromeScript.js")
  let script = SpecialPowers.loadChromeScript(url);

  let helper = {
    finish: function () {
      script.destroy();
    },
    fakeShutdown: function () {
      script.sendAsyncMessage('fake-content-shutdown', {});
    }
  };

  script.addMessageListener('chrome-event', function (message) {
    if (helper.hasOwnProperty('onEvent')) {
      helper.onEvent(message);
    } else {
      ok(false, 'unexpected message: ' + JSON.stringify(message));
    }
  });

  script.sendAsyncMessage("init-chrome-event", {
    type: 'recording-status'
  });

  return Promise.resolve(helper);
}

function expectEvent(expected, eventHelper) {
  return new Promise(function(resolve, reject) {
    eventHelper.onEvent = function(message) {
      delete eventHelper.onEvent;
      ok(message, JSON.stringify(message));
      is(message.type, 'recording-status', 'event type: ' + message.type);
      is(message.active, expected.active, 'recording active: ' + message.active);
      is(message.isAudio, expected.isAudio, 'audio recording active: ' + message.isAudio);
      is(message.isVideo, expected.isVideo, 'video recording active: ' + message.isVideo);
      resolve(eventHelper);
    };
    info('waiting for recording-status');
  });
}

function expectStream(params, callback) {
  return new Promise(function(resolve, reject) {
    var req = navigator.mozGetUserMedia(
      params,
      function(stream) {
        ok(true, 'create media stream');
        callback(stream);
        resolve();
      },
      function(err) {
        ok(false, 'fail to create media stream');
        reject(err);
      }
    );
    info('waiting for gUM result');
  });
}