File: trusted-click.js

package info (click to toggle)
thunderbird 1%3A115.16.0esr-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,476,252 kB
  • sloc: cpp: 6,972,150; javascript: 5,209,211; ansic: 3,507,222; python: 1,137,609; asm: 432,531; xml: 205,149; java: 175,761; sh: 116,485; makefile: 22,152; perl: 13,971; objc: 12,561; yacc: 4,583; pascal: 2,840; lex: 1,720; ruby: 1,075; exp: 762; sql: 666; awk: 580; php: 436; lisp: 430; sed: 70; csh: 10
file content (65 lines) | stat: -rw-r--r-- 2,030 bytes parent folder | download | duplicates (18)
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
/**
 * Invokes callback from a trusted click event, avoiding interception by fullscreen element.
 *
 * @param {Element} container - Element where button will be created and clicked.
 */
function trusted_click(container = document.body) {
    var document = container.ownerDocument;
    var button = document.createElement("button");
    button.textContent = "click to continue test";
    button.style.display = "block";
    button.style.fontSize = "20px";
    button.style.padding = "10px";
    button.addEventListener("click", () => {
        button.remove();
    });
    container.appendChild(button);
    if (window.top !== window) test_driver.set_test_context(window.top);
    // Race them for manually testing...
    return Promise.race([
        test_driver.click(button),
        new Promise((resolve) => {
            button.addEventListener("click", resolve);
        }),
    ]);
}

// Invokes element.requestFullscreen() from a trusted click.
async function trusted_request(element = document.body, whereToCreateButton = null) {
    await trusted_click(whereToCreateButton ?? element.parentNode ?? element);
    return element.requestFullscreen();
}

/**
 * Used to await a fullscreen change event, once.
 *
 * @param {EventTarget} target
 * @returns
 */
function fullScreenChange(target = document) {
    return new Promise((resolve) =>
        target.addEventListener("fullscreenchange", resolve, { once: true })
    );
}

/**
 * Sets up a message event listener, and returns a promise that resolves
 * when the message from the iframe is received.
 *
 * @param {HTMLIFrameElement} iframe
 * @returns {Promise<object>}
 */
function promiseMessage(iframe) {
    return new Promise((resolve) => {
        window.addEventListener(
            "message",
            (e) => {
                if (e.data?.report.api === "fullscreen") {
                    resolve(e.data);
                }
            },
            { once: true }
        );
        iframe.contentWindow.postMessage({ action: "report" }, "*");
    });
}