bug 841350 - register pageshow handler earlier in browser.js r=ttaubert
[gecko.git] / browser / base / content / test / browser_bug432599.js
blob2fd667d9c553bbcb24d05a5dcb5c37a924c11e1b
1 function invokeUsingCtrlD(phase) {
2   switch (phase) {
3   case 1:
4     EventUtils.synthesizeKey("d", { accelKey: true });
5     break;
6   case 2:
7   case 4:
8     EventUtils.synthesizeKey("VK_ESCAPE", {});
9     break;
10   case 3:
11     EventUtils.synthesizeKey("d", { accelKey: true });
12     EventUtils.synthesizeKey("d", { accelKey: true });
13     break;
14   }
17 function invokeUsingStarButton(phase) {
18   switch (phase) {
19   case 1:
20     EventUtils.sendMouseEvent({ type: "click" }, "star-button");
21     break;
22   case 2:
23   case 4:
24     EventUtils.synthesizeKey("VK_ESCAPE", {});
25     break;
26   case 3:
27     EventUtils.synthesizeMouse(document.getElementById("star-button"),
28                                1, 1, { clickCount: 2 });
29     break;
30   }
33 var testURL = "data:text/plain,Content";
34 var bookmarkId;
36 function add_bookmark(aURI, aTitle) {
37   return PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
38                                               aURI, PlacesUtils.bookmarks.DEFAULT_INDEX,
39                                               aTitle);
42 // test bug 432599
43 function test() {
44   waitForExplicitFinish();
46   gBrowser.selectedTab = gBrowser.addTab();
47   gBrowser.selectedBrowser.addEventListener("load", function () {
48     gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
49     waitForStarChange(false, initTest);
50   }, true);
52   content.location = testURL;
55 function initTest() {
56   // First, bookmark the page.
57   bookmarkId = add_bookmark(makeURI(testURL), "Bug 432599 Test");
59   checkBookmarksPanel(invokers[currentInvoker], 1);
62 function waitForStarChange(aValue, aCallback) {
63   let starButton = document.getElementById("star-button");
64   if (PlacesStarButton._pendingStmt || starButton.hasAttribute("starred") != aValue) {
65     info("Waiting for star button change.");
66     setTimeout(arguments.callee, 50, aValue, aCallback);
67     return;
68   }
69   aCallback();
72 let invokers = [invokeUsingStarButton, invokeUsingCtrlD];
73 let currentInvoker = 0;
75 let initialValue;
76 let initialRemoveHidden;
78 let popupElement = document.getElementById("editBookmarkPanel");
79 let titleElement = document.getElementById("editBookmarkPanelTitle");
80 let removeElement = document.getElementById("editBookmarkPanelRemoveButton");
82 function checkBookmarksPanel(invoker, phase)
84   let onPopupShown = function(aEvent) {
85     if (aEvent.originalTarget == popupElement) {
86       popupElement.removeEventListener("popupshown", arguments.callee, false);
87       checkBookmarksPanel(invoker, phase + 1);
88     }
89   };
90   let onPopupHidden = function(aEvent) {
91     if (aEvent.originalTarget == popupElement) {
92       popupElement.removeEventListener("popuphidden", arguments.callee, false);
93       if (phase < 4) {
94         checkBookmarksPanel(invoker, phase + 1);
95       } else {
96         ++currentInvoker;
97         if (currentInvoker < invokers.length) {
98           checkBookmarksPanel(invokers[currentInvoker], 1);
99         } else {
100           gBrowser.removeCurrentTab();
101           PlacesUtils.bookmarks.removeItem(bookmarkId);
102           executeSoon(finish);
103         }
104       }
105     }
106   };
108   switch (phase) {
109   case 1:
110   case 3:
111     popupElement.addEventListener("popupshown", onPopupShown, false);
112     break;
113   case 2:
114     popupElement.addEventListener("popuphidden", onPopupHidden, false);
115     initialValue = titleElement.value;
116     initialRemoveHidden = removeElement.hidden;
117     break;
118   case 4:
119     popupElement.addEventListener("popuphidden", onPopupHidden, false);
120     is(titleElement.value, initialValue, "The bookmark panel's title should be the same");
121     is(removeElement.hidden, initialRemoveHidden, "The bookmark panel's visibility should not change");
122     break;
123   }
124   invoker(phase);