michael@0: /* Any copyright is dedicated to the Public Domain.
michael@0: * http://creativecommons.org/publicdomain/zero/1.0/
michael@0: */
michael@0:
michael@0: let source = "data:text/html,textmore%20textemail";
michael@0: let gViewSourceWindow, gContextMenu, gCopyLinkMenuItem, gCopyEmailMenuItem;
michael@0:
michael@0: let expectedData = [];
michael@0: let currentTest = 0;
michael@0: let partialTestRunning = false;
michael@0:
michael@0: function test() {
michael@0: waitForExplicitFinish();
michael@0: openViewSourceWindow(source, onViewSourceWindowOpen);
michael@0: }
michael@0:
michael@0: function onViewSourceWindowOpen(aWindow) {
michael@0: gViewSourceWindow = aWindow;
michael@0:
michael@0: gContextMenu = aWindow.document.getElementById("viewSourceContextMenu");
michael@0: gCopyLinkMenuItem = aWindow.document.getElementById("context-copyLink");
michael@0: gCopyEmailMenuItem = aWindow.document.getElementById("context-copyEmail");
michael@0:
michael@0: let aTags = aWindow.gBrowser.contentDocument.querySelectorAll("a[href]");
michael@0: is(aTags[0].href, "view-source:http://example.com/", "Link has correct href");
michael@0: is(aTags[1].href, "mailto:abc@def.ghi", "Link has correct href");
michael@0: let spanTag = aWindow.gBrowser.contentDocument.querySelector("span");
michael@0:
michael@0: expectedData.push([aTags[0], true, false, "http://example.com/"]);
michael@0: expectedData.push([aTags[1], false, true, "abc@def.ghi"]);
michael@0: expectedData.push([spanTag, false, false, null]);
michael@0:
michael@0: waitForFocus(runNextTest, aWindow);
michael@0: }
michael@0:
michael@0: function runNextTest() {
michael@0: if (currentTest == expectedData.length) {
michael@0: closeViewSourceWindow(gViewSourceWindow, function() {
michael@0: if (partialTestRunning) {
michael@0: finish();
michael@0: return;
michael@0: }
michael@0: partialTestRunning = true;
michael@0: currentTest = 0;
michael@0: expectedData = [];
michael@0: openDocumentSelect(source, "body", onViewSourceWindowOpen);
michael@0: });
michael@0: return;
michael@0: }
michael@0: let test = expectedData[currentTest++];
michael@0: checkMenuItems(test[0], test[1], test[2], test[3]);
michael@0: }
michael@0:
michael@0: function checkMenuItems(popupNode, copyLinkExpected, copyEmailExpected, expectedClipboardContent) {
michael@0: popupNode.scrollIntoView();
michael@0:
michael@0: let cachedEvent = null;
michael@0: let mouseFn = function(event) {
michael@0: cachedEvent = event;
michael@0: };
michael@0:
michael@0: gViewSourceWindow.gBrowser.contentWindow.addEventListener("mousedown", mouseFn, false);
michael@0: EventUtils.synthesizeMouseAtCenter(popupNode, { button: 2 }, gViewSourceWindow.gBrowser.contentWindow);
michael@0: gViewSourceWindow.gBrowser.contentWindow.removeEventListener("mousedown", mouseFn, false);
michael@0:
michael@0: gContextMenu.openPopup(popupNode, "after_start", 0, 0, false, false, cachedEvent);
michael@0:
michael@0: is(gCopyLinkMenuItem.hidden, !copyLinkExpected, "Copy link menuitem is " + (copyLinkExpected ? "not hidden" : "hidden"));
michael@0: is(gCopyEmailMenuItem.hidden, !copyEmailExpected, "Copy email menuitem is " + (copyEmailExpected ? "not hidden" : "hidden"));
michael@0:
michael@0: if (!copyLinkExpected && !copyEmailExpected) {
michael@0: runNextTest();
michael@0: return;
michael@0: }
michael@0:
michael@0: waitForClipboard(expectedClipboardContent, function() {
michael@0: if (copyLinkExpected)
michael@0: gCopyLinkMenuItem.doCommand();
michael@0: else
michael@0: gCopyEmailMenuItem.doCommand();
michael@0: gContextMenu.hidePopup();
michael@0: }, runNextTest, runNextTest);
michael@0: }