2012-06-21 11:23:48 -07:00
|
|
|
/* Any copyright is dedicated to the public domain.
|
|
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
|
2012-06-21 11:23:48 -07:00
|
|
|
// Bug 741755 - Test that canGo{Back,Forward} and go{Forward,Back} work with
|
|
|
|
// <iframe mozbrowser>.
|
2012-06-21 11:23:48 -07:00
|
|
|
|
|
|
|
"use strict";
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
|
|
|
|
var iframe;
|
2012-06-21 11:23:48 -07:00
|
|
|
function addOneShotIframeEventListener(event, fn) {
|
|
|
|
function wrapper(e) {
|
|
|
|
iframe.removeEventListener(event, wrapper);
|
|
|
|
fn(e);
|
|
|
|
};
|
|
|
|
|
|
|
|
iframe.addEventListener(event, wrapper);
|
|
|
|
}
|
|
|
|
|
2012-06-21 11:23:48 -07:00
|
|
|
function runTest() {
|
|
|
|
browserElementTestHelpers.setEnabledPref(true);
|
2012-08-15 10:22:30 -07:00
|
|
|
browserElementTestHelpers.addPermission();
|
2012-06-21 11:23:48 -07:00
|
|
|
|
|
|
|
iframe = document.createElement('iframe');
|
|
|
|
iframe.mozbrowser = true;
|
|
|
|
|
2012-06-21 11:23:48 -07:00
|
|
|
addOneShotIframeEventListener('mozbrowserloadend', function() {
|
2012-06-21 11:23:48 -07:00
|
|
|
SimpleTest.executeSoon(test2);
|
|
|
|
});
|
|
|
|
|
|
|
|
iframe.src = browserElementTestHelpers.emptyPage1;
|
|
|
|
document.body.appendChild(iframe);
|
|
|
|
}
|
|
|
|
|
|
|
|
function checkCanGoBackAndForward(canGoBack, canGoForward, nextTest) {
|
|
|
|
var seenCanGoBackResult = false;
|
|
|
|
iframe.getCanGoBack().onsuccess = function(e) {
|
|
|
|
is(seenCanGoBackResult, false, "onsuccess handler shouldn't be called twice.");
|
|
|
|
seenCanGoBackResult = true;
|
|
|
|
is(e.target.result, canGoBack);
|
|
|
|
maybeRunNextTest();
|
|
|
|
};
|
|
|
|
|
|
|
|
var seenCanGoForwardResult = false;
|
|
|
|
iframe.getCanGoForward().onsuccess = function(e) {
|
|
|
|
is(seenCanGoForwardResult, false, "onsuccess handler shouldn't be called twice.");
|
|
|
|
seenCanGoForwardResult = true;
|
|
|
|
is(e.target.result, canGoForward);
|
|
|
|
maybeRunNextTest();
|
|
|
|
};
|
|
|
|
|
|
|
|
function maybeRunNextTest() {
|
|
|
|
if (seenCanGoBackResult && seenCanGoForwardResult) {
|
|
|
|
nextTest();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function test2() {
|
2012-06-21 11:23:48 -07:00
|
|
|
checkCanGoBackAndForward(false, false, test3);
|
2012-06-21 11:23:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
function test3() {
|
2012-06-21 11:23:48 -07:00
|
|
|
addOneShotIframeEventListener('mozbrowserloadend', function() {
|
|
|
|
checkCanGoBackAndForward(true, false, test4);
|
|
|
|
});
|
|
|
|
|
|
|
|
SimpleTest.executeSoon(function() {
|
|
|
|
iframe.src = browserElementTestHelpers.emptyPage2;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function test4() {
|
|
|
|
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
|
|
|
|
is(e.detail, browserElementTestHelpers.emptyPage3);
|
|
|
|
checkCanGoBackAndForward(true, false, test5);
|
|
|
|
});
|
|
|
|
|
|
|
|
SimpleTest.executeSoon(function() {
|
|
|
|
iframe.src = browserElementTestHelpers.emptyPage3;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function test5() {
|
|
|
|
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
|
|
|
|
is(e.detail, browserElementTestHelpers.emptyPage2);
|
|
|
|
checkCanGoBackAndForward(true, true, test6);
|
|
|
|
});
|
|
|
|
iframe.goBack();
|
|
|
|
}
|
|
|
|
|
|
|
|
function test6() {
|
|
|
|
addOneShotIframeEventListener('mozbrowserlocationchange', function(e) {
|
|
|
|
is(e.detail, browserElementTestHelpers.emptyPage1);
|
|
|
|
checkCanGoBackAndForward(false, true, SimpleTest.finish);
|
2012-06-21 11:23:48 -07:00
|
|
|
});
|
2012-06-21 11:23:48 -07:00
|
|
|
iframe.goBack();
|
2012-06-21 11:23:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
runTest();
|