diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js')
-rw-r--r-- | devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js b/devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js new file mode 100644 index 000000000..ade87eaac --- /dev/null +++ b/devtools/client/scratchpad/test/browser_scratchpad_edit_ui_updates.js @@ -0,0 +1,206 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +/* Bug 699130 */ + +"use strict"; + +var WebConsoleUtils = require("devtools/client/webconsole/utils").Utils; +var DEVTOOLS_CHROME_ENABLED = "devtools.chrome.enabled"; + +function test() +{ + waitForExplicitFinish(); + gBrowser.selectedTab = gBrowser.addTab(); + Services.prefs.setBoolPref(DEVTOOLS_CHROME_ENABLED, false); + gBrowser.selectedBrowser.addEventListener("load", function onLoad() { + gBrowser.selectedBrowser.removeEventListener("load", onLoad, true); + openScratchpad(runTests); + }, true); + + content.location = "data:text/html,test Edit menu updates Scratchpad - bug 699130"; +} + +function runTests() +{ + let sp = gScratchpadWindow.Scratchpad; + let doc = gScratchpadWindow.document; + let winUtils = gScratchpadWindow.QueryInterface(Ci.nsIInterfaceRequestor). + getInterface(Ci.nsIDOMWindowUtils); + let OS = Services.appinfo.OS; + + info("will test the Edit menu"); + + let pass = 0; + + sp.setText("bug 699130: hello world! (edit menu)"); + + let editMenu = doc.getElementById("sp-edit-menu"); + ok(editMenu, "the Edit menu"); + let menubar = editMenu.parentNode; + ok(menubar, "menubar found"); + + let editMenuIndex = -1; + for (let i = 0; i < menubar.children.length; i++) { + if (menubar.children[i] === editMenu) { + editMenuIndex = i; + break; + } + } + isnot(editMenuIndex, -1, "Edit menu index is correct"); + + let menuPopup = editMenu.menupopup; + ok(menuPopup, "the Edit menupopup"); + let cutItem = doc.getElementById("menu_cut"); + ok(cutItem, "the Cut menuitem"); + let pasteItem = doc.getElementById("menu_paste"); + ok(pasteItem, "the Paste menuitem"); + + let anchor = doc.documentElement; + let isContextMenu = false; + + let oldVal = sp.editor.getText(); + + let testSelfXss = function (oldVal) { + // Self xss prevention tests (bug 994134) + info("Self xss paste tests"); + is(WebConsoleUtils.usageCount, 0, "Test for usage count getter"); + let notificationbox = doc.getElementById("scratchpad-notificationbox"); + let notification = notificationbox.getNotificationWithValue("selfxss-notification"); + ok(notification, "Self-xss notification shown"); + is(oldVal, sp.editor.getText(), "Paste blocked by self-xss prevention"); + Services.prefs.setIntPref("devtools.selfxss.count", 10); + notificationbox.removeAllNotifications(true); + openMenu(10, 10, firstShow); + }; + + let openMenu = function (aX, aY, aCallback) { + if (!editMenu || OS != "Darwin") { + menuPopup.addEventListener("popupshown", function onPopupShown() { + menuPopup.removeEventListener("popupshown", onPopupShown, false); + executeSoon(aCallback); + }, false); + } + + executeSoon(function () { + if (editMenu) { + if (OS == "Darwin") { + winUtils.forceUpdateNativeMenuAt(editMenuIndex); + executeSoon(aCallback); + } else { + editMenu.open = true; + } + } else { + menuPopup.openPopup(anchor, "overlap", aX, aY, isContextMenu, false); + } + }); + }; + + let closeMenu = function (aCallback) { + if (!editMenu || OS != "Darwin") { + menuPopup.addEventListener("popuphidden", function onPopupHidden() { + menuPopup.removeEventListener("popuphidden", onPopupHidden, false); + executeSoon(aCallback); + }, false); + } + + executeSoon(function () { + if (editMenu) { + if (OS == "Darwin") { + winUtils.forceUpdateNativeMenuAt(editMenuIndex); + executeSoon(aCallback); + } else { + editMenu.open = false; + } + } else { + menuPopup.hidePopup(); + } + }); + }; + + let firstShow = function () { + ok(!cutItem.hasAttribute("disabled"), "cut menuitem is enabled"); + closeMenu(firstHide); + }; + + let firstHide = function () { + sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 10 }); + openMenu(11, 11, showAfterSelect); + }; + + let showAfterSelect = function () { + ok(!cutItem.hasAttribute("disabled"), "cut menuitem is enabled after select"); + closeMenu(hideAfterSelect); + }; + + let hideAfterSelect = function () { + sp.editor.on("change", onCut); + waitForFocus(function () { + let selectedText = sp.editor.getSelection(); + ok(selectedText.length > 0, "non-empty selected text will be cut"); + + EventUtils.synthesizeKey("x", {accelKey: true}, gScratchpadWindow); + }, gScratchpadWindow); + }; + + let onCut = function () { + sp.editor.off("change", onCut); + openMenu(12, 12, showAfterCut); + }; + + let showAfterCut = function () { + ok(!cutItem.hasAttribute("disabled"), "cut menuitem is enabled after cut"); + ok(!pasteItem.hasAttribute("disabled"), "paste menuitem is enabled after cut"); + closeMenu(hideAfterCut); + }; + + let hideAfterCut = function () { + waitForFocus(function () { + sp.editor.on("change", onPaste); + EventUtils.synthesizeKey("v", {accelKey: true}, gScratchpadWindow); + }, gScratchpadWindow); + }; + + let onPaste = function () { + sp.editor.off("change", onPaste); + openMenu(13, 13, showAfterPaste); + }; + + let showAfterPaste = function () { + ok(!cutItem.hasAttribute("disabled"), "cut menuitem is enabled after paste"); + ok(!pasteItem.hasAttribute("disabled"), "paste menuitem is enabled after paste"); + closeMenu(hideAfterPaste); + }; + + let hideAfterPaste = function () { + if (pass == 0) { + pass++; + testContextMenu(); + } else { + Services.prefs.clearUserPref(DEVTOOLS_CHROME_ENABLED); + finish(); + } + }; + + let testContextMenu = function () { + info("will test the context menu"); + + editMenu = null; + isContextMenu = true; + + menuPopup = doc.getElementById("scratchpad-text-popup"); + ok(menuPopup, "the context menupopup"); + cutItem = doc.getElementById("cMenu_cut"); + ok(cutItem, "the Cut menuitem"); + pasteItem = doc.getElementById("cMenu_paste"); + ok(pasteItem, "the Paste menuitem"); + + sp.setText("bug 699130: hello world! (context menu)"); + openMenu(10, 10, firstShow); + }; + waitForFocus(function () { + WebConsoleUtils.usageCount = 0; + EventUtils.synthesizeKey("v", {accelKey: true}, gScratchpadWindow); + testSelfXss(oldVal); + }, gScratchpadWindow); +} |