Bug 1776680 [wpt PR 34603] - [@container] Test invalidation of font-relative units...
[gecko.git] / dom / events / test / browser_beforeinput_by_execCommand_in_contentscript.js
blob062aa73a4cdf3ab57ede3a2debabf4a8a452533b
1 "use strict";
3 async function installAndStartExtension() {
4   function contentScript() {
5     window.addEventListener("keydown", aEvent => {
6       console.log("keydown event is fired");
7       if (aEvent.defaultPrevented) {
8         return;
9       }
10       let selection = window.getSelection();
11       if (selection.isCollapsed) {
12         return;
13       }
14       if (aEvent.ctrlKey && aEvent.key === "k") {
15         document.execCommand("createLink", false, "http://example.com/");
16         aEvent.preventDefault();
17       }
18     });
19   }
21   let extension = ExtensionTestUtils.loadExtension({
22     manifest: {
23       content_scripts: [
24         {
25           js: ["content_script.js"],
26           matches: ["<all_urls>"],
27           run_at: "document_start",
28         },
29       ],
30     },
31     files: {
32       "content_script.js": contentScript,
33     },
34   });
36   await extension.startup();
38   return extension;
41 add_task(async function() {
42   const extension = await installAndStartExtension();
43   const tab = await BrowserTestUtils.openNewForegroundTab(
44     gBrowser,
45     "http://example.com/browser/dom/events/test/file_beforeinput_by_execCommand_in_contentscript.html",
46     true
47   );
49   function runTest() {
50     var editor = content.document.querySelector("[contenteditable]");
51     editor.focus();
52     content.document.getSelection().selectAllChildren(editor);
53     var beforeinput;
54     editor.addEventListener("beforeinput", aEvent => {
55       beforeinput = aEvent;
56     });
57     editor.addEventListener("input", aEvent => {
58       if (!beforeinput) {
59         sendAsyncMessage("Test:BeforeInputInContentEditable", {
60           succeeded: false,
61           message: "No beforeinput event is fired",
62         });
63         return;
64       }
65       sendAsyncMessage("Test:BeforeInputInContentEditable", {
66         succeeded:
67           editor.innerHTML === '<a href="http://example.com/">abcdef</a>',
68         message: `editor.innerHTML=${editor.innerHTML}`,
69       });
70     });
71   }
73   try {
74     tab.linkedBrowser.messageManager.loadFrameScript(
75       "data:,(" + runTest.toString() + ")();",
76       false
77     );
79     let received = false;
80     let testResult = new Promise(resolve => {
81       let mm = tab.linkedBrowser.messageManager;
82       mm.addMessageListener(
83         "Test:BeforeInputInContentEditable",
84         function onFinish(aMsg) {
85           mm.removeMessageListener(
86             "Test:BeforeInputInContentEditable",
87             onFinish
88           );
89           is(aMsg.data.succeeded, true, aMsg.data.message);
90           resolve();
91         }
92       );
93     });
94     info("Sending Ctrl+K...");
95     await BrowserTestUtils.synthesizeKey(
96       "k",
97       { ctrlKey: true },
98       tab.linkedBrowser
99     );
100     info("Waiting test result...");
101     await testResult;
102   } finally {
103     BrowserTestUtils.removeTab(tab);
104     await extension.unload();
105   }