dom/browser-element/mochitest/browserElement_BackForward.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* Any copyright is dedicated to the public domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 // Bug 741755 - Test that canGo{Back,Forward} and go{Forward,Back} work with
     5 // <iframe mozbrowser>.
     7 "use strict";
     8 SimpleTest.waitForExplicitFinish();
     9 browserElementTestHelpers.setEnabledPref(true);
    10 browserElementTestHelpers.addPermission();
    12 var iframe;
    13 function addOneShotIframeEventListener(event, fn) {
    14   function wrapper(e) {
    15     iframe.removeEventListener(event, wrapper);
    16     fn(e);
    17   };
    19   iframe.addEventListener(event, wrapper);
    20 }
    22 function runTest() {
    23   iframe = document.createElement('iframe');
    24   SpecialPowers.wrap(iframe).mozbrowser = true;
    26   addOneShotIframeEventListener('mozbrowserloadend', function() {
    27     SimpleTest.executeSoon(test2);
    28   });
    30   iframe.src = browserElementTestHelpers.emptyPage1;
    31   document.body.appendChild(iframe);
    32 }
    34 function checkCanGoBackAndForward(canGoBack, canGoForward, nextTest) {
    35   var seenCanGoBackResult = false;
    36   iframe.getCanGoBack().onsuccess = function(e) {
    37     is(seenCanGoBackResult, false, "onsuccess handler shouldn't be called twice.");
    38     seenCanGoBackResult = true;
    39     is(e.target.result, canGoBack);
    40     maybeRunNextTest();
    41   };
    43   var seenCanGoForwardResult = false;
    44   iframe.getCanGoForward().onsuccess = function(e) {
    45     is(seenCanGoForwardResult, false, "onsuccess handler shouldn't be called twice.");
    46     seenCanGoForwardResult = true;
    47     is(e.target.result, canGoForward);
    48     maybeRunNextTest();
    49   };
    51   function maybeRunNextTest() {
    52     if (seenCanGoBackResult && seenCanGoForwardResult) {
    53       nextTest();
    54     }
    55   }
    56 }
    58 function test2() {
    59   checkCanGoBackAndForward(false, false, test3);
    60 }
    62 function test3() {
    63   addOneShotIframeEventListener('mozbrowserloadend', function() {
    64     checkCanGoBackAndForward(true, false, test4);
    65   });
    67   SimpleTest.executeSoon(function() {
    68     iframe.src = browserElementTestHelpers.emptyPage2;
    69   });
    70 }
    72 function test4() {
    73   addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
    74     is(e.detail, browserElementTestHelpers.emptyPage3);
    75     checkCanGoBackAndForward(true, false, test5);
    76   });
    78   SimpleTest.executeSoon(function() {
    79     iframe.src = browserElementTestHelpers.emptyPage3;
    80   });
    81 }
    83 function test5() {
    84   addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
    85     is(e.detail, browserElementTestHelpers.emptyPage2);
    86     checkCanGoBackAndForward(true, true, test6);
    87   });
    88   iframe.goBack();
    89 }
    91 function test6() {
    92   addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
    93     is(e.detail, browserElementTestHelpers.emptyPage1);
    94     checkCanGoBackAndForward(false, true, SimpleTest.finish);
    95   });
    96   iframe.goBack();
    97 }
    99 addEventListener('testready', runTest);

mercurial