forked from mirrors/gecko-dev
Depends on D21215 Differential Revision: https://phabricator.services.mozilla.com/D14130 --HG-- extra : moz-landing-system : lando
117 lines
3.7 KiB
JavaScript
117 lines
3.7 KiB
JavaScript
/* Any copyright is dedicated to the public domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Bug 793644, fire an event when attempting to reloads browser element after
|
|
// POST respest.
|
|
|
|
"use strict";
|
|
|
|
/* global browserElementTestHelpers */
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
SimpleTest.requestFlakyTimeout("untriaged");
|
|
browserElementTestHelpers.setEnabledPref(true);
|
|
|
|
var iframe;
|
|
var gotConfirmRepost = false;
|
|
var doRepost = true;
|
|
var timer;
|
|
var isPostRequestSubmitted;
|
|
|
|
function getExpectedStrings() {
|
|
let result = {};
|
|
let appBundle = Services.strings.createBundle("chrome://global/locale/appstrings.properties");
|
|
let brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
|
|
try {
|
|
let brandName = brandBundle.GetStringFromName("brandShortName");
|
|
result.message = appBundle.formatStringFromName("confirmRepostPrompt",
|
|
[brandName], 1);
|
|
} catch (e) {
|
|
// for the case that we don't have brandShortName
|
|
result.message = appBundle.GetStringFromName("confirmRepostPrompt");
|
|
}
|
|
result.resend = appBundle.GetStringFromName("resendButton.label");
|
|
|
|
return result;
|
|
}
|
|
|
|
function failBecauseReloaded() {
|
|
window.clearTimeout(timer);
|
|
timer = null;
|
|
iframe.removeEventListener("mozbrowserloadend", failBecauseReloaded);
|
|
ok(false, "We don't expect browser element to reload, but it did");
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
function reloadDone() {
|
|
iframe.removeEventListener("mozbrowserloadend", reloadDone);
|
|
ok(gotConfirmRepost, "Didn't get confirmEx prompt before reload");
|
|
|
|
// Run again, with repost disallowed.
|
|
doRepost = false;
|
|
isPostRequestSubmitted = false;
|
|
iframe.src = "file_post_request.html";
|
|
iframe.addEventListener("mozbrowserloadend", pageLoadDone);
|
|
}
|
|
|
|
function pageLoadDone() {
|
|
if (!isPostRequestSubmitted) {
|
|
// This loadend is done by setting url in address bar, so we don't need to
|
|
// do anything. The test page will submit a POST request.
|
|
isPostRequestSubmitted = true;
|
|
return;
|
|
}
|
|
|
|
gotConfirmRepost = false;
|
|
iframe.removeEventListener("mozbrowserloadend", pageLoadDone);
|
|
if (doRepost) {
|
|
iframe.addEventListener("mozbrowserloadend", reloadDone);
|
|
} else {
|
|
// We don't expect browserelement to reload; use a timer to make sure
|
|
// it is not reloaded.
|
|
iframe.addEventListener("mozbrowserloadend", failBecauseReloaded);
|
|
}
|
|
iframe.reload();
|
|
}
|
|
|
|
function runTest() {
|
|
iframe = document.createElement("iframe");
|
|
iframe.setAttribute("mozbrowser", "true");
|
|
|
|
isPostRequestSubmitted = false;
|
|
iframe.src = "file_post_request.html";
|
|
document.body.appendChild(iframe);
|
|
|
|
iframe.addEventListener("mozbrowserloadend", pageLoadDone);
|
|
|
|
let expectedMessage = getExpectedStrings();
|
|
iframe.addEventListener("mozbrowsershowmodalprompt", function(e) {
|
|
if (e.detail.promptType == "custom-prompt") {
|
|
gotConfirmRepost = true;
|
|
e.preventDefault();
|
|
e.detail.returnValue = {
|
|
selectedButton: doRepost ? 0 : 1,
|
|
};
|
|
is(e.detail.returnValue.checked, undefined);
|
|
is(e.detail.buttons[0].messageType, "custom");
|
|
is(e.detail.buttons[0].message, expectedMessage.resend);
|
|
is(e.detail.buttons[1].messageType, "builtin");
|
|
is(e.detail.buttons[1].message, "cancel");
|
|
is(e.detail.message, expectedMessage.message);
|
|
is(e.detail.buttons.length, 2);
|
|
is(e.detail.showCheckbox, false);
|
|
is(e.detail.checkboxMessage, null);
|
|
e.detail.unblock();
|
|
|
|
if (!doRepost) {
|
|
// To make sure the page doesn't reload in 1 sec.
|
|
timer = window.setTimeout(function() {
|
|
iframe.removeEventListener("mozbrowserloadend", failBecauseReloaded);
|
|
SimpleTest.finish();
|
|
}, 1000);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
addEventListener("testready", runTest);
|