summaryrefslogtreecommitdiffstats
path: root/dom/html/test/browser_content_contextmenu_userinput.js
blob: 845ba718e30a57aaf40b3bf2090dd8e33c1c3de9 (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
"use strict";

const kPage = "http://example.org/browser/" +
              "dom/html/test/file_content_contextmenu.html";

add_task(function* () {
  yield SpecialPowers.pushPrefEnv({
    set: [["dom.menuitem.enabled", true]],
  });
  yield BrowserTestUtils.withNewTab({
    gBrowser,
    url: kPage
  }, function*(aBrowser) {
    let contextMenu = document.getElementById("contentAreaContextMenu");
    ok(contextMenu, "Got context menu");

    info("Open context menu");
    is(contextMenu.state, "closed", "Should not have opened context menu");
    let popupShownPromise = promiseWaitForEvent(window, "popupshown");
    EventUtils.synthesizeMouse(aBrowser, window.innerWidth / 3,
                               window.innerHeight / 3,
                               {type: "contextmenu", button: 2}, window);
    yield popupShownPromise;
    is(contextMenu.state, "open", "Should have opened context menu");

    let pageMenuSep = document.getElementById("page-menu-separator");
    ok(pageMenuSep && !pageMenuSep.hidden,
       "Page menu separator should be shown");

    let testMenuSep = pageMenuSep.previousSibling;
    ok(testMenuSep && !testMenuSep.hidden,
       "User-added menu separator should be shown");

    let testMenuItem = testMenuSep.previousSibling;
    is(testMenuItem.label, "Test Context Menu Click", "Got context menu item");

    let promiseCtxMenuClick = ContentTask.spawn(aBrowser, null, function*() {
      yield new Promise(resolve => {
        let Ci = Components.interfaces;
        let windowUtils = content.QueryInterface(Ci.nsIInterfaceRequestor)
                                 .getInterface(Ci.nsIDOMWindowUtils);
        let menuitem = content.document.getElementById("menuitem");
        menuitem.addEventListener("click", function() {
          Assert.ok(windowUtils.isHandlingUserInput,
                    "Content menu click should be a user input");
          resolve();
        });
      });
    });
    EventUtils.synthesizeMouseAtCenter(testMenuItem, {}, window);
    yield promiseCtxMenuClick;
  });
});