File: helper.js

package info (click to toggle)
thunderbird 1%3A143.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 4,703,968 kB
  • sloc: cpp: 7,770,492; javascript: 5,943,842; ansic: 3,918,754; python: 1,418,263; xml: 653,354; asm: 474,045; java: 183,079; sh: 111,238; makefile: 20,410; perl: 14,359; objc: 13,059; yacc: 4,583; pascal: 3,405; lex: 1,720; ruby: 999; exp: 762; sql: 715; awk: 580; php: 436; lisp: 430; sed: 69; csh: 10
file content (100 lines) | stat: -rw-r--r-- 2,829 bytes parent folder | download | duplicates (10)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
 * Create a new promise that resolves when the window receives
 * the MessagePort and starts it.
 *
 * @param {Window} window - The window to wait for the MessagePort.
 * @returns {Promise<MessagePort>} A promise you should await to ensure the
 *     window
 * receives the MessagePort.
 */
function expectMessagePortFromWindow(window) {
  return new Promise(resolve => {
    window.onmessage = e => {
      try {
        assert_true(e.ports[0] instanceof window.MessagePort);
        e.ports[0].start();
        resolve(e.ports[0]);
      } catch (e) {
        reject(e);
      }
    };
  });
}

/**
 * Create a new promise that resolves when the window receives
 * the MessagePort and does not start it.
 *
 * @param {Window} window - The window to wait for the MessagePort.
 * @returns {Promise<MessagePort>} A promise you should await to ensure the
 *     window
 * receives the MessagePort.
 */
function expectMessagePortFromWindowWithoutStartingIt(window) {
  return new Promise(resolve => {
    window.onmessage = e => {
      try {
        assert_true(e.ports[0] instanceof window.MessagePort);
        resolve(e.ports[0]);
      } catch (e) {
        reject(e);
      }
    };
  });
}

/**
 * Create a new MessageChannel and transfers one of the ports to
 * the window which opened the window with a remote context provided
 * as an argument, and immediately closes the entangled port.
 *
 * @param {RemoteContextWrapper} remoteContextWrapper
 */
async function createMessageChannelAndSendPortFollowedByClose(remoteContextWrapper) {
  await remoteContextWrapper.executeScript(() => {
    const {port1, port2} = new MessageChannel();
    port1.start();
    window.opener.postMessage({}, '*', [port2]);
    port1.close();
  });
}

/**
 * Create a new MessageChannel and transfers one of the ports to
 * the window which opened the window with a remote context provided
 * as an argument.
 *
 * @param {RemoteContextWrapper} remoteContextWrapper
 */
async function createMessageChannelAndSendPort(remoteContextWrapper) {
  await remoteContextWrapper.executeScript(() => {
    const {port1, port2} = new MessageChannel();
    port1.start();
    window.opener.postMessage({}, '*', [port2]);
    window.closePort = () => {
      port1.close();
    }
  });
}

/**
 * Creates a window with a remote context.
 *
 * @returns {Promise<RemoteContextWrapper>}
 */
async function addWindow() {
  const helper = new RemoteContextHelper();
  return helper.addWindow();
}

/**
 * Creates a new promise that resolves when the close event is fired.
 *
 * @param {MessagePort} port - MessagePort on which the close event will
 * be fired.
 * @returns {Promise} A promise you should await to ensure the close event
 * is dispatched.
 */
function createCloseEventPromise(port) {
  return new Promise(resolve => port.onclose = resolve);
}