summaryrefslogtreecommitdiffstats
path: root/toolkit/components/viewsource/test/browser/browser_contextmenu.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/viewsource/test/browser/browser_contextmenu.js')
-rw-r--r--toolkit/components/viewsource/test/browser/browser_contextmenu.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/toolkit/components/viewsource/test/browser/browser_contextmenu.js b/toolkit/components/viewsource/test/browser/browser_contextmenu.js
new file mode 100644
index 000000000..72b8a40be
--- /dev/null
+++ b/toolkit/components/viewsource/test/browser/browser_contextmenu.js
@@ -0,0 +1,107 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+var source = "data:text/html,text<link%20href='http://example.com/'%20/>more%20text<a%20href='mailto:abc@def.ghi'>email</a>";
+var gViewSourceWindow, gContextMenu, gCopyLinkMenuItem, gCopyEmailMenuItem;
+
+var expectedData = [];
+
+add_task(function *() {
+ // Full source in view source window
+ let newWindow = yield loadViewSourceWindow(source);
+ yield SimpleTest.promiseFocus(newWindow);
+
+ yield* onViewSourceWindowOpen(newWindow, false);
+
+ let contextMenu = gViewSourceWindow.document.getElementById("viewSourceContextMenu");
+
+ for (let test of expectedData) {
+ yield* checkMenuItems(contextMenu, false, test[0], test[1], test[2], test[3]);
+ }
+
+ yield new Promise(resolve => {
+ closeViewSourceWindow(newWindow, resolve);
+ });
+
+ // Selection source in view source tab
+ expectedData = [];
+ let newTab = yield openDocumentSelect(source, "body");
+ yield* onViewSourceWindowOpen(window, true);
+
+ contextMenu = document.getElementById("contentAreaContextMenu");
+
+ for (let test of expectedData) {
+ yield* checkMenuItems(contextMenu, true, test[0], test[1], test[2], test[3]);
+ }
+
+ gBrowser.removeTab(newTab);
+
+ // Selection source in view source window
+ yield pushPrefs(["view_source.tab", false]);
+
+ expectedData = [];
+ newWindow = yield openDocumentSelect(source, "body");
+ yield SimpleTest.promiseFocus(newWindow);
+
+ yield* onViewSourceWindowOpen(newWindow, false);
+
+ contextMenu = newWindow.document.getElementById("viewSourceContextMenu");
+
+ for (let test of expectedData) {
+ yield* checkMenuItems(contextMenu, false, test[0], test[1], test[2], test[3]);
+ }
+
+ yield new Promise(resolve => {
+ closeViewSourceWindow(newWindow, resolve);
+ });
+});
+
+function* onViewSourceWindowOpen(aWindow, aIsTab) {
+ gViewSourceWindow = aWindow;
+
+ gCopyLinkMenuItem = aWindow.document.getElementById(aIsTab ? "context-copylink" : "context-copyLink");
+ gCopyEmailMenuItem = aWindow.document.getElementById(aIsTab ? "context-copyemail" : "context-copyEmail");
+
+ let browser = aIsTab ? gBrowser.selectedBrowser : gViewSourceWindow.gBrowser;
+ yield ContentTask.spawn(browser, null, function* (arg) {
+ let tags = content.document.querySelectorAll("a[href]");
+ Assert.equal(tags[0].href, "view-source:http://example.com/", "Link has correct href");
+ Assert.equal(tags[1].href, "mailto:abc@def.ghi", "Link has correct href");
+ });
+
+ expectedData.push(["a[href]", true, false, "http://example.com/"]);
+ expectedData.push(["a[href^=mailto]", false, true, "abc@def.ghi"]);
+ expectedData.push(["span", false, false, null]);
+}
+
+function* checkMenuItems(contextMenu, isTab, selector, copyLinkExpected, copyEmailExpected, expectedClipboardContent) {
+
+ let browser = isTab ? gBrowser.selectedBrowser : gViewSourceWindow.gBrowser;
+ yield ContentTask.spawn(browser, { selector: selector }, function* (arg) {
+ content.document.querySelector(arg.selector).scrollIntoView();
+ });
+
+ let popupShownPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
+ yield BrowserTestUtils.synthesizeMouseAtCenter(selector,
+ { type: "contextmenu", button: 2}, browser);
+ yield popupShownPromise;
+
+ is(gCopyLinkMenuItem.hidden, !copyLinkExpected, "Copy link menuitem is " + (copyLinkExpected ? "not hidden" : "hidden"));
+ is(gCopyEmailMenuItem.hidden, !copyEmailExpected, "Copy email menuitem is " + (copyEmailExpected ? "not hidden" : "hidden"));
+
+ if (copyLinkExpected || copyEmailExpected) {
+ yield new Promise((resolve, reject) => {
+ waitForClipboard(expectedClipboardContent, function() {
+ if (copyLinkExpected)
+ gCopyLinkMenuItem.click();
+ else
+ gCopyEmailMenuItem.click();
+ }, resolve, reject);
+ });
+ }
+
+ let popupHiddenPromise = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
+ contextMenu.hidePopup();
+ yield popupHiddenPromise;
+}