browser/base/content/test/general/browser_tab_dragdrop.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

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 }

mercurial