|
1 function test() |
|
2 { |
|
3 var embed = '<embed type="application/x-test" allowscriptaccess="always" allowfullscreen="true" wmode="window" width="640" height="480"></embed>' |
|
4 |
|
5 waitForExplicitFinish(); |
|
6 setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED); |
|
7 |
|
8 // create a few tabs |
|
9 var tabs = [ |
|
10 gBrowser.tabs[0], |
|
11 gBrowser.addTab("about:blank", {skipAnimation: true}), |
|
12 gBrowser.addTab("about:blank", {skipAnimation: true}), |
|
13 gBrowser.addTab("about:blank", {skipAnimation: true}), |
|
14 gBrowser.addTab("about:blank", {skipAnimation: true}) |
|
15 ]; |
|
16 |
|
17 function setLocation(i, url) { |
|
18 gBrowser.getBrowserForTab(tabs[i]).contentWindow.location = url; |
|
19 } |
|
20 function moveTabTo(a, b) { |
|
21 gBrowser.swapBrowsersAndCloseOther(gBrowser.tabs[b], gBrowser.tabs[a]); |
|
22 } |
|
23 function clickTest(doc, win) { |
|
24 var clicks = doc.defaultView.clicks; |
|
25 EventUtils.synthesizeMouseAtCenter(doc.body, {}, win); |
|
26 is(doc.defaultView.clicks, clicks+1, "adding 1 more click on BODY"); |
|
27 } |
|
28 function test1() { |
|
29 moveTabTo(2, 3); // now: 0 1 2 4 |
|
30 is(gBrowser.tabs[1], tabs[1], "tab1"); |
|
31 is(gBrowser.tabs[2], tabs[3], "tab3"); |
|
32 |
|
33 var plugin = gBrowser.getBrowserForTab(tabs[4]).docShell.contentViewer.DOMDocument.wrappedJSObject.body.firstChild; |
|
34 var tab4_plugin_object = plugin.getObjectValue(); |
|
35 |
|
36 gBrowser.selectedTab = gBrowser.tabs[2]; |
|
37 moveTabTo(3, 2); // now: 0 1 4 |
|
38 gBrowser.selectedTab = tabs[4]; |
|
39 var doc = gBrowser.getBrowserForTab(gBrowser.tabs[2]).docShell.contentViewer.DOMDocument.wrappedJSObject; |
|
40 plugin = doc.body.firstChild; |
|
41 ok(plugin && plugin.checkObjectValue(tab4_plugin_object), "same plugin instance"); |
|
42 is(gBrowser.tabs[1], tabs[1], "tab1"); |
|
43 is(gBrowser.tabs[2], tabs[3], "tab4"); |
|
44 is(doc.defaultView.clicks, 0, "no click on BODY so far"); |
|
45 clickTest(doc, window); |
|
46 |
|
47 moveTabTo(2, 1); // now: 0 4 |
|
48 is(gBrowser.tabs[1], tabs[1], "tab1"); |
|
49 doc = gBrowser.getBrowserForTab(gBrowser.tabs[1]).docShell.contentViewer.DOMDocument.wrappedJSObject; |
|
50 plugin = doc.body.firstChild; |
|
51 ok(plugin && plugin.checkObjectValue(tab4_plugin_object), "same plugin instance"); |
|
52 clickTest(doc, window); |
|
53 |
|
54 // Load a new document (about:blank) in tab4, then detach that tab into a new window. |
|
55 // In the new window, navigate back to the original document and click on its <body>, |
|
56 // verify that its onclick was called. |
|
57 var t = tabs[1]; |
|
58 var b = gBrowser.getBrowserForTab(t); |
|
59 gBrowser.selectedTab = t; |
|
60 b.addEventListener("load", function() { |
|
61 b.removeEventListener("load", arguments.callee, true); |
|
62 |
|
63 executeSoon(function () { |
|
64 var win = gBrowser.replaceTabWithWindow(t); |
|
65 whenDelayedStartupFinished(win, function () { |
|
66 // Verify that the original window now only has the initial tab left in it. |
|
67 is(gBrowser.tabs[0], tabs[0], "tab0"); |
|
68 is(gBrowser.getBrowserForTab(gBrowser.tabs[0]).contentWindow.location, "about:blank", "tab0 uri"); |
|
69 |
|
70 executeSoon(function () { |
|
71 win.gBrowser.addEventListener("pageshow", function () { |
|
72 win.gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
73 executeSoon(function () { |
|
74 t = win.gBrowser.tabs[0]; |
|
75 b = win.gBrowser.getBrowserForTab(t); |
|
76 var doc = b.docShell.contentViewer.DOMDocument.wrappedJSObject; |
|
77 clickTest(doc, win); |
|
78 win.close(); |
|
79 finish(); |
|
80 }); |
|
81 }, false); |
|
82 win.gBrowser.goBack(); |
|
83 }); |
|
84 }); |
|
85 }); |
|
86 }, true); |
|
87 b.loadURI("about:blank"); |
|
88 |
|
89 } |
|
90 |
|
91 var loads = 0; |
|
92 function waitForLoad(event, tab, listenerContainer) { |
|
93 var b = gBrowser.getBrowserForTab(gBrowser.tabs[tab]); |
|
94 if (b.contentDocument != event.target) { |
|
95 return; |
|
96 } |
|
97 gBrowser.getBrowserForTab(gBrowser.tabs[tab]).removeEventListener("load", listenerContainer.listener, true); |
|
98 ++loads; |
|
99 if (loads == tabs.length - 1) { |
|
100 executeSoon(test1); |
|
101 } |
|
102 } |
|
103 |
|
104 function fn(f, arg) { |
|
105 var listenerContainer = { listener: null } |
|
106 listenerContainer.listener = function (event) { return f(event, arg, listenerContainer); }; |
|
107 return listenerContainer.listener; |
|
108 } |
|
109 for (var i = 1; i < tabs.length; ++i) { |
|
110 gBrowser.getBrowserForTab(tabs[i]).addEventListener("load", fn(waitForLoad,i), true); |
|
111 } |
|
112 |
|
113 setLocation(1, "data:text/html;charset=utf-8,<title>tab1</title><body>tab1<iframe>"); |
|
114 setLocation(2, "data:text/plain;charset=utf-8,tab2"); |
|
115 setLocation(3, "data:text/html;charset=utf-8,<title>tab3</title><body>tab3<iframe>"); |
|
116 setLocation(4, "data:text/html;charset=utf-8,<body onload='clicks=0' onclick='++clicks'>"+embed); |
|
117 gBrowser.selectedTab = tabs[3]; |
|
118 |
|
119 } |