Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>
<html>
<!--
-->
<head>
<title>XMLHttpRequest return document URIs</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<base href="http://example.org/">
</head>
<body onload="startTest();">
<a target="_blank"
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=859095">Mozilla Bug 859095</a>
<p id="display">
<iframe id=loader></iframe>
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="application/javascript">
SimpleTest.waitForExplicitFinish();
var gen;
function startTest() {
// The test uses history API, so don't do anything before load event has been
// handled.
SimpleTest.executeSoon(function() {
gen = runTest();
gen.next();
});
}
function testXMLDocURI(aDoc, aExpects) {
is(aDoc.documentURI, aExpects.documentURI, "wrong url");
is(aDoc.baseURI, aExpects.baseURI, "wrong base");
}
function testChromeXMLDocURI(aDoc, aExpects) {
is(aDoc.documentURI, aExpects.documentURI, "wrong url");
is(aDoc.documentURIObject.spec, aExpects.documentURI,
"wrong url (.documentObjectURI)");
is(aDoc.baseURI, aExpects.baseURI, "wrong base");
is(aDoc.baseURIObject.spec, aExpects.baseURI,
"wrong base (.baseURIObject)");
}
function testHTMLDocURI(aDoc, aExpects) {
is(aDoc.documentURI, aExpects.documentURI, "wrong url");
is(aDoc.baseURI, aExpects.baseURI, "wrong base");
var base = aDoc.createElement("base");
var newBaseURI = "http://www.example.com/";
base.href = newBaseURI;
aDoc.head.appendChild(base);
is(aDoc.baseURI, newBaseURI, "wrong base (after <base> changed)");
}
function testChromeHTMLDocURI(aDoc, aNonChromeBaseURI, aExpects) {
is(aDoc.documentURI, aExpects.documentURI, "wrong url");
is(aDoc.documentURIObject.spec, aExpects.documentURI,
"wrong url (.documentURIObject)");
is(aDoc.baseURI, aExpects.baseURI, "wrong base");
is(aDoc.baseURIObject.spec, aExpects.baseURI,
"wrong url (.baseURIObject)");
var base = aDoc.createElement("base");
var newBaseURI = "http://www.example.com/";
base.href = newBaseURI;
aDoc.head.appendChild(base);
is(aDoc.baseURI, newBaseURI, "wrong base (after <base> changed)");
is(aDoc.baseURIObject.spec, newBaseURI,
"wrong base (.baseURIObject, after <base> changed)");
}
function testCloneDocURI(aDoc) {
var clone = aDoc.cloneNode(true);
is(clone.documentURI, aDoc.documentURI, "wrong url (clone)");
is(clone.baseURI, aDoc.baseURI, "wrong base (clone)");
}
function* runTest() {
is(document.baseURI, "http://example.org/", "wrong doc baseURI");
// use content XHR and access URI properties from content privileged script
var xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
testXMLDocURI(xhr.responseXML, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
testHTMLDocURI(xhr.response, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
is(xhr.responseXML, null, "should not have document");
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
testXMLDocURI(xhr.responseXML, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
testHTMLDocURI(xhr.response, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
testXMLDocURI(xhr.responseXML, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
testHTMLDocURI(xhr.response, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
is(xhr.responseXML, null, "should not have document");
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
// use content XHR and access URI properties from chrome privileged script
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
var xml = SpecialPowers.wrap(xhr.responseXML);
testChromeXMLDocURI(xml, expects);
testCloneDocURI(xml);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
var doc = SpecialPowers.wrap(xhr.response);
testCloneDocURI(doc);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
documentURI: document.documentURI,
baseURI: document.baseURI
};
var xml = SpecialPowers.wrap(xhr.responseXML);
testChromeXMLDocURI(xml, expects);
testCloneDocURI(xml);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
documentURI: document.documentURI,
baseURI: document.baseURI
};
var doc = SpecialPowers.wrap(xhr.response);
testChromeHTMLDocURI(doc, "http://example.com/tests/dom/xhr/tests/file_XHRDocURI.html", expects);
testCloneDocURI(doc);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
documentURI: document.documentURI,
baseURI: document.baseURI
};
var xml = SpecialPowers.wrap(xhr.responseXML);
testChromeXMLDocURI(xml, expects);
testCloneDocURI(xml);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest;
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
documentURI: document.documentURI,
baseURI: document.baseURI
};
var doc = SpecialPowers.wrap(xhr.response);
testChromeHTMLDocURI(doc, "http://example.com/tests/dom/xhr/tests/file_XHRDocURI.html", expects);
testCloneDocURI(doc);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
// use the systemXHR special privilege
SpecialPowers.addPermission("systemXHR", true, document);
xhr = new XMLHttpRequest({mozAnon: false, mozSystem: true});
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
testXMLDocURI(xhr.responseXML, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest({mozAnon: false, mozSystem: true});
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
testHTMLDocURI(xhr.response, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest({mozAnon: false, mozSystem: true});
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
testXMLDocURI(xhr.responseXML, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest({mozAnon: false, mozSystem: true});
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
testHTMLDocURI(xhr.response, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest({mozAnon: false, mozSystem: true});
xhr.onreadystatechange = function() {
if (!xhr.responseXML) {
return;
}
var expects = {
};
testXMLDocURI(xhr.responseXML, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
xhr = new XMLHttpRequest({mozAnon: false, mozSystem: true});
xhr.responseType = "document";
xhr.onreadystatechange = function() {
if (!xhr.response) {
return;
}
var expects = {
};
testHTMLDocURI(xhr.response, expects);
if (xhr.readyState == 4) {
gen.next();
}
};
xhr.send();
yield undefined;
history.pushState({}, "pushStateTest", window.location.href + "/pushStateTest");
ok(document.documentURI.indexOf("pushStateTest") > -1);
var chromeDoc = SpecialPowers.wrap(document);
ok(chromeDoc.documentURI.indexOf("pushStateTest") > -1);
SimpleTest.executeSoon(function() { gen.next(); });
yield undefined;
window.onpopstate = function() {
gen.next();
}
history.back();
yield undefined;
SimpleTest.finish();
SpecialPowers.removePermission("systemXHR", document);
}
</script>
</pre>
</body>
</html>