|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 // That's a gecko! |
|
6 const iconURLSpec = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="; |
|
7 var testPage="data:text/plain,test bug 477014"; |
|
8 |
|
9 function test() { |
|
10 waitForExplicitFinish(); |
|
11 |
|
12 var newWindow; |
|
13 var tabToDetach; |
|
14 var documentToDetach; |
|
15 |
|
16 function onPageShow(event) { |
|
17 // we get here if the test is executed before the pageshow |
|
18 // event for the window's first tab |
|
19 if (!tabToDetach || documentToDetach != event.target) |
|
20 return; |
|
21 |
|
22 event.currentTarget.removeEventListener("pageshow", onPageShow, false); |
|
23 |
|
24 if (!newWindow) { |
|
25 // prepare the tab (set icon and busy state) |
|
26 // we have to set these only after onState* notification, otherwise |
|
27 // they're overriden |
|
28 setTimeout(function() { |
|
29 gBrowser.setIcon(tabToDetach, iconURLSpec); |
|
30 tabToDetach.setAttribute("busy", "true"); |
|
31 |
|
32 // detach and set the listener on the new window |
|
33 newWindow = gBrowser.replaceTabWithWindow(tabToDetach); |
|
34 // wait for gBrowser to come along |
|
35 newWindow.addEventListener("load", function () { |
|
36 newWindow.removeEventListener("load", arguments.callee, false); |
|
37 newWindow.gBrowser.addEventListener("pageshow", onPageShow, false); |
|
38 }, false); |
|
39 }, 0); |
|
40 return; |
|
41 } |
|
42 |
|
43 is(newWindow.gBrowser.selectedTab.hasAttribute("busy"), true); |
|
44 is(newWindow.gBrowser.getIcon(), iconURLSpec); |
|
45 newWindow.close(); |
|
46 finish(); |
|
47 } |
|
48 |
|
49 tabToDetach = gBrowser.addTab(testPage); |
|
50 tabToDetach.linkedBrowser.addEventListener("load", function onLoad() { |
|
51 tabToDetach.linkedBrowser.removeEventListener("load", onLoad, true); |
|
52 documentToDetach = tabToDetach.linkedBrowser.contentDocument; |
|
53 gBrowser.addEventListener("pageshow", onPageShow, false); |
|
54 }, true); |
|
55 } |