diff -r 000000000000 -r 6474c204b198 browser/base/content/test/general/browser_bug432599.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/base/content/test/general/browser_bug432599.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,127 @@ +function invokeUsingCtrlD(phase) { + switch (phase) { + case 1: + EventUtils.synthesizeKey("d", { accelKey: true }); + break; + case 2: + case 4: + EventUtils.synthesizeKey("VK_ESCAPE", {}); + break; + case 3: + EventUtils.synthesizeKey("d", { accelKey: true }); + EventUtils.synthesizeKey("d", { accelKey: true }); + break; + } +} + +function invokeUsingStarButton(phase) { + switch (phase) { + case 1: + EventUtils.synthesizeMouseAtCenter(BookmarkingUI.star, {}); + break; + case 2: + case 4: + EventUtils.synthesizeKey("VK_ESCAPE", {}); + break; + case 3: + EventUtils.synthesizeMouseAtCenter(BookmarkingUI.star, + { clickCount: 2 }); + break; + } +} + +var testURL = "data:text/plain,Content"; +var bookmarkId; + +function add_bookmark(aURI, aTitle) { + return PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId, + aURI, PlacesUtils.bookmarks.DEFAULT_INDEX, + aTitle); +} + +// test bug 432599 +function test() { + waitForExplicitFinish(); + + gBrowser.selectedTab = gBrowser.addTab(); + gBrowser.selectedBrowser.addEventListener("load", function onLoad() { + gBrowser.selectedBrowser.removeEventListener("load", onLoad, true); + waitForStarChange(false, initTest); + }, true); + + content.location = testURL; +} + +function initTest() { + // First, bookmark the page. + bookmarkId = add_bookmark(makeURI(testURL), "Bug 432599 Test"); + + checkBookmarksPanel(invokers[currentInvoker], 1); +} + +function waitForStarChange(aValue, aCallback) { + let expectedStatus = aValue ? BookmarkingUI.STATUS_STARRED + : BookmarkingUI.STATUS_UNSTARRED; + if (BookmarkingUI.status == BookmarkingUI.STATUS_UPDATING || + BookmarkingUI.status != expectedStatus) { + info("Waiting for star button change."); + setTimeout(waitForStarChange, 50, aValue, aCallback); + return; + } + aCallback(); +} + +let invokers = [invokeUsingStarButton, invokeUsingCtrlD]; +let currentInvoker = 0; + +let initialValue; +let initialRemoveHidden; + +let popupElement = document.getElementById("editBookmarkPanel"); +let titleElement = document.getElementById("editBookmarkPanelTitle"); +let removeElement = document.getElementById("editBookmarkPanelRemoveButton"); + +function checkBookmarksPanel(invoker, phase) +{ + let onPopupShown = function(aEvent) { + if (aEvent.originalTarget == popupElement) { + popupElement.removeEventListener("popupshown", arguments.callee, false); + checkBookmarksPanel(invoker, phase + 1); + } + }; + let onPopupHidden = function(aEvent) { + if (aEvent.originalTarget == popupElement) { + popupElement.removeEventListener("popuphidden", arguments.callee, false); + if (phase < 4) { + checkBookmarksPanel(invoker, phase + 1); + } else { + ++currentInvoker; + if (currentInvoker < invokers.length) { + checkBookmarksPanel(invokers[currentInvoker], 1); + } else { + gBrowser.removeCurrentTab(); + PlacesUtils.bookmarks.removeItem(bookmarkId); + executeSoon(finish); + } + } + } + }; + + switch (phase) { + case 1: + case 3: + popupElement.addEventListener("popupshown", onPopupShown, false); + break; + case 2: + popupElement.addEventListener("popuphidden", onPopupHidden, false); + initialValue = titleElement.value; + initialRemoveHidden = removeElement.hidden; + break; + case 4: + popupElement.addEventListener("popuphidden", onPopupHidden, false); + is(titleElement.value, initialValue, "The bookmark panel's title should be the same"); + is(removeElement.hidden, initialRemoveHidden, "The bookmark panel's visibility should not change"); + break; + } + invoker(phase); +}