summaryrefslogtreecommitdiffstats
path: root/devtools/client/styleeditor/test/browser_styleeditor_opentab.js
blob: c16e9d51b0bb28f7c6e75cefd7b9cbe29cc70405 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// A test to check the 'Open Link in new tab' functionality in the
// context menu item for stylesheets (bug 992947).
const TESTCASE_URI = TEST_BASE_HTTPS + "simple.html";

add_task(function* () {
  let { ui } = yield openStyleEditorForURL(TESTCASE_URI);

  yield rightClickStyleSheet(ui, ui.editors[0]);
  is(ui._openLinkNewTabItem.getAttribute("disabled"), "false",
    "The menu item is not disabled");
  is(ui._openLinkNewTabItem.getAttribute("hidden"), "false",
    "The menu item is not hidden");

  let url = "https://example.com/browser/devtools/client/styleeditor/test/" +
    "simple.css";
  is(ui._contextMenuStyleSheet.href, url, "Correct URL for sheet");

  let originalOpenUILinkIn = ui._window.openUILinkIn;
  let tabOpenedDefer = defer();

  ui._window.openUILinkIn = newUrl => {
    // Reset the actual openUILinkIn function before proceeding.
    ui._window.openUILinkIn = originalOpenUILinkIn;

    is(newUrl, url, "The correct tab has been opened");
    tabOpenedDefer.resolve();
  };

  ui._openLinkNewTabItem.click();

  info(`Waiting for a tab to open - ${url}`);
  yield tabOpenedDefer.promise;

  yield rightClickInlineStyleSheet(ui, ui.editors[1]);
  is(ui._openLinkNewTabItem.getAttribute("disabled"), "true",
    "The menu item is disabled");
  is(ui._openLinkNewTabItem.getAttribute("hidden"), "false",
    "The menu item is not hidden");

  yield rightClickNoStyleSheet(ui);
  is(ui._openLinkNewTabItem.getAttribute("hidden"), "true",
    "The menu item is not hidden");
});

function onPopupShow(contextMenu) {
  let deferred = defer();
  contextMenu.addEventListener("popupshown", function onpopupshown() {
    contextMenu.removeEventListener("popupshown", onpopupshown);
    deferred.resolve();
  });
  return deferred.promise;
}

function onPopupHide(contextMenu) {
  let deferred = defer();
  contextMenu.addEventListener("popuphidden", function popuphidden() {
    contextMenu.removeEventListener("popuphidden", popuphidden);
    deferred.resolve();
  });
  return deferred.promise;
}

function rightClickStyleSheet(ui, editor) {
  let deferred = defer();

  onPopupShow(ui._contextMenu).then(()=> {
    onPopupHide(ui._contextMenu).then(() => {
      deferred.resolve();
    });
    ui._contextMenu.hidePopup();
  });

  EventUtils.synthesizeMouseAtCenter(
    editor.summary.querySelector(".stylesheet-name"),
    {button: 2, type: "contextmenu"},
    ui._window);

  return deferred.promise;
}

function rightClickInlineStyleSheet(ui, editor) {
  let deferred = defer();

  onPopupShow(ui._contextMenu).then(()=> {
    onPopupHide(ui._contextMenu).then(() => {
      deferred.resolve();
    });
    ui._contextMenu.hidePopup();
  });

  EventUtils.synthesizeMouseAtCenter(
    editor.summary.querySelector(".stylesheet-name"),
    {button: 2, type: "contextmenu"},
    ui._window);

  return deferred.promise;
}

function rightClickNoStyleSheet(ui) {
  let deferred = defer();

  onPopupShow(ui._contextMenu).then(()=> {
    onPopupHide(ui._contextMenu).then(() => {
      deferred.resolve();
    });
    ui._contextMenu.hidePopup();
  });

  EventUtils.synthesizeMouseAtCenter(
    ui._panelDoc.querySelector("#splitview-tpl-summary-stylesheet"),
    {button: 2, type: "contextmenu"},
    ui._window);

  return deferred.promise;
}