gecko-dev/dom/browser-element/mochitest/browserElement_Auth.js

96 строки
3.2 KiB
JavaScript

/* Any copyright is dedicated to the public domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
// Test that auth prompt works.
"use strict";
SimpleTest.waitForExplicitFinish();
function testFail(msg) {
ok(false, JSON.stringify(msg));
}
var iframe;
function runTest() {
browserElementTestHelpers.setEnabledPref(true);
browserElementTestHelpers.addPermission();
iframe = document.createElement('iframe');
iframe.mozbrowser = true;
document.body.appendChild(iframe);
// Wait for the initial load to finish, then navigate the page, then start test
// by loading SJS with http 401 response.
iframe.addEventListener('mozbrowserloadend', function loadend() {
iframe.removeEventListener('mozbrowserloadend', loadend);
iframe.addEventListener('mozbrowserusernameandpasswordrequired', testHttpAuthCancel);
SimpleTest.executeSoon(function() {
// Use absolute path because we need to specify host.
iframe.src = 'http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs';
});
});
}
function testHttpAuthCancel(e) {
iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testHttpAuthCancel);
// Will cancel authentication, but prompt should not be shown again. Instead,
// we will be led to fail message
iframe.addEventListener("mozbrowserusernameandpasswordrequired", testFail);
iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) {
iframe.removeEventListener("mozbrowsertitlechange", onTitleChange);
iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testFail);
is(e.detail, 'http auth failed');
iframe.addEventListener('mozbrowserusernameandpasswordrequired', testHttpAuth);
SimpleTest.executeSoon(function() {
// Use absolute path because we need to specify host.
iframe.src = 'http://test/tests/dom/browser-element/mochitest/file_http_401_response.sjs';
});
});
is(e.detail.realm, 'http_realm');
is(e.detail.host, 'http://test');
e.preventDefault();
SimpleTest.executeSoon(function() {
e.detail.cancel();
});
}
function testHttpAuth(e) {
iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testHttpAuth);
// Will authenticate with correct password, prompt should not be
// called again.
iframe.addEventListener("mozbrowserusernameandpasswordrequired", testFail);
iframe.addEventListener("mozbrowsertitlechange", function onTitleChange(e) {
iframe.removeEventListener("mozbrowsertitlechange", onTitleChange);
iframe.removeEventListener("mozbrowserusernameandpasswordrequired", testFail);
is(e.detail, 'http auth success');
SimpleTest.executeSoon(testFinish);
});
is(e.detail.realm, 'http_realm');
is(e.detail.host, 'http://test');
e.preventDefault();
SimpleTest.executeSoon(function() {
e.detail.authenticate("httpuser", "httppass");
});
}
function testFinish() {
// Clear login information stored in password manager.
var authMgr = SpecialPowers.Cc['@mozilla.org/network/http-auth-manager;1']
.getService(SpecialPowers.Ci.nsIHttpAuthManager);
authMgr.clearAll();
var pwmgr = SpecialPowers.Cc["@mozilla.org/login-manager;1"]
.getService(SpecialPowers.Ci.nsILoginManager);
pwmgr.removeAllLogins();
SimpleTest.finish();
}
runTest();