michael@0: function test() michael@0: { michael@0: var embed = '' michael@0: michael@0: waitForExplicitFinish(); michael@0: setTestPluginEnabledState(Ci.nsIPluginTag.STATE_ENABLED); michael@0: michael@0: // create a few tabs michael@0: var tabs = [ michael@0: gBrowser.tabs[0], michael@0: gBrowser.addTab("about:blank", {skipAnimation: true}), michael@0: gBrowser.addTab("about:blank", {skipAnimation: true}), michael@0: gBrowser.addTab("about:blank", {skipAnimation: true}), michael@0: gBrowser.addTab("about:blank", {skipAnimation: true}) michael@0: ]; michael@0: michael@0: function setLocation(i, url) { michael@0: gBrowser.getBrowserForTab(tabs[i]).contentWindow.location = url; michael@0: } michael@0: function moveTabTo(a, b) { michael@0: gBrowser.swapBrowsersAndCloseOther(gBrowser.tabs[b], gBrowser.tabs[a]); michael@0: } michael@0: function clickTest(doc, win) { michael@0: var clicks = doc.defaultView.clicks; michael@0: EventUtils.synthesizeMouseAtCenter(doc.body, {}, win); michael@0: is(doc.defaultView.clicks, clicks+1, "adding 1 more click on BODY"); michael@0: } michael@0: function test1() { michael@0: moveTabTo(2, 3); // now: 0 1 2 4 michael@0: is(gBrowser.tabs[1], tabs[1], "tab1"); michael@0: is(gBrowser.tabs[2], tabs[3], "tab3"); michael@0: michael@0: var plugin = gBrowser.getBrowserForTab(tabs[4]).docShell.contentViewer.DOMDocument.wrappedJSObject.body.firstChild; michael@0: var tab4_plugin_object = plugin.getObjectValue(); michael@0: michael@0: gBrowser.selectedTab = gBrowser.tabs[2]; michael@0: moveTabTo(3, 2); // now: 0 1 4 michael@0: gBrowser.selectedTab = tabs[4]; michael@0: var doc = gBrowser.getBrowserForTab(gBrowser.tabs[2]).docShell.contentViewer.DOMDocument.wrappedJSObject; michael@0: plugin = doc.body.firstChild; michael@0: ok(plugin && plugin.checkObjectValue(tab4_plugin_object), "same plugin instance"); michael@0: is(gBrowser.tabs[1], tabs[1], "tab1"); michael@0: is(gBrowser.tabs[2], tabs[3], "tab4"); michael@0: is(doc.defaultView.clicks, 0, "no click on BODY so far"); michael@0: clickTest(doc, window); michael@0: michael@0: moveTabTo(2, 1); // now: 0 4 michael@0: is(gBrowser.tabs[1], tabs[1], "tab1"); michael@0: doc = gBrowser.getBrowserForTab(gBrowser.tabs[1]).docShell.contentViewer.DOMDocument.wrappedJSObject; michael@0: plugin = doc.body.firstChild; michael@0: ok(plugin && plugin.checkObjectValue(tab4_plugin_object), "same plugin instance"); michael@0: clickTest(doc, window); michael@0: michael@0: // Load a new document (about:blank) in tab4, then detach that tab into a new window. michael@0: // In the new window, navigate back to the original document and click on its , michael@0: // verify that its onclick was called. michael@0: var t = tabs[1]; michael@0: var b = gBrowser.getBrowserForTab(t); michael@0: gBrowser.selectedTab = t; michael@0: b.addEventListener("load", function() { michael@0: b.removeEventListener("load", arguments.callee, true); michael@0: michael@0: executeSoon(function () { michael@0: var win = gBrowser.replaceTabWithWindow(t); michael@0: whenDelayedStartupFinished(win, function () { michael@0: // Verify that the original window now only has the initial tab left in it. michael@0: is(gBrowser.tabs[0], tabs[0], "tab0"); michael@0: is(gBrowser.getBrowserForTab(gBrowser.tabs[0]).contentWindow.location, "about:blank", "tab0 uri"); michael@0: michael@0: executeSoon(function () { michael@0: win.gBrowser.addEventListener("pageshow", function () { michael@0: win.gBrowser.removeEventListener("pageshow", arguments.callee, false); michael@0: executeSoon(function () { michael@0: t = win.gBrowser.tabs[0]; michael@0: b = win.gBrowser.getBrowserForTab(t); michael@0: var doc = b.docShell.contentViewer.DOMDocument.wrappedJSObject; michael@0: clickTest(doc, win); michael@0: win.close(); michael@0: finish(); michael@0: }); michael@0: }, false); michael@0: win.gBrowser.goBack(); michael@0: }); michael@0: }); michael@0: }); michael@0: }, true); michael@0: b.loadURI("about:blank"); michael@0: michael@0: } michael@0: michael@0: var loads = 0; michael@0: function waitForLoad(event, tab, listenerContainer) { michael@0: var b = gBrowser.getBrowserForTab(gBrowser.tabs[tab]); michael@0: if (b.contentDocument != event.target) { michael@0: return; michael@0: } michael@0: gBrowser.getBrowserForTab(gBrowser.tabs[tab]).removeEventListener("load", listenerContainer.listener, true); michael@0: ++loads; michael@0: if (loads == tabs.length - 1) { michael@0: executeSoon(test1); michael@0: } michael@0: } michael@0: michael@0: function fn(f, arg) { michael@0: var listenerContainer = { listener: null } michael@0: listenerContainer.listener = function (event) { return f(event, arg, listenerContainer); }; michael@0: return listenerContainer.listener; michael@0: } michael@0: for (var i = 1; i < tabs.length; ++i) { michael@0: gBrowser.getBrowserForTab(tabs[i]).addEventListener("load", fn(waitForLoad,i), true); michael@0: } michael@0: michael@0: setLocation(1, "data:text/html;charset=utf-8,tab1tab1