Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 function test()
2 {
3 var embed = '<embed type="application/x-test" allowscriptaccess="always" allowfullscreen="true" wmode="window" width="640" height="480"></embed>'
5 waitForExplicitFinish();
6 setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED);
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 ];
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");
33 var plugin = gBrowser.getBrowserForTab(tabs[4]).docShell.contentViewer.DOMDocument.wrappedJSObject.body.firstChild;
34 var tab4_plugin_object = plugin.getObjectValue();
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);
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);
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);
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");
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");
89 }
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 }
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 }
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];
119 }