mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
98 lines
2.9 KiB
JavaScript
98 lines
2.9 KiB
JavaScript
|
|
var cu = Components.utils;
|
|
cu.import("resource://testing-common/httpd.js");
|
|
|
|
var httpserver = new HttpServer();
|
|
var httpserver2 = new HttpServer();
|
|
var testpath = "/simple";
|
|
var negativetestpath = "/negative";
|
|
var httpbody = "<?xml version='1.0' ?><root>0123456789</root>";
|
|
|
|
var sb = cu.Sandbox(["http://www.example.com",
|
|
"http://localhost:4444/simple"],
|
|
{ wantGlobalProperties: ["XMLHttpRequest"] });
|
|
|
|
function createXHR(loc, async)
|
|
{
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("GET", "http://localhost:" + loc, async);
|
|
return xhr;
|
|
}
|
|
|
|
function checkResults(xhr)
|
|
{
|
|
if (xhr.readyState != 4)
|
|
return false;
|
|
|
|
do_check_eq(xhr.status, 200);
|
|
do_check_eq(xhr.responseText, httpbody);
|
|
|
|
var root_node = xhr.responseXML.getElementsByTagName('root').item(0);
|
|
do_check_eq(root_node.firstChild.data, "0123456789");
|
|
return true;
|
|
}
|
|
|
|
var httpServersClosed = 0;
|
|
function finishIfDone()
|
|
{
|
|
if (++httpServersClosed == 2)
|
|
do_test_finished();
|
|
}
|
|
|
|
function run_test()
|
|
{
|
|
do_test_pending();
|
|
|
|
httpserver.registerPathHandler(testpath, serverHandler);
|
|
httpserver.start(4444);
|
|
|
|
httpserver2.registerPathHandler(negativetestpath, serverHandler);
|
|
httpserver2.start(4445);
|
|
|
|
// Test sync XHR sending
|
|
cu.evalInSandbox('var createXHR = ' + createXHR.toString(), sb);
|
|
var res = cu.evalInSandbox('var sync = createXHR("4444/simple"); sync.send(null); sync', sb);
|
|
do_check_true(checkResults(res));
|
|
|
|
// negative test sync XHR sending (to ensure that the xhr do not have chrome caps, see bug 779821)
|
|
try {
|
|
cu.evalInSandbox('var createXHR = ' + createXHR.toString(), sb);
|
|
var res = cu.evalInSandbox('var sync = createXHR("4445/negative"); sync.send(null); sync', sb);
|
|
do_check_false(true, "XHR created from sandbox should not have chrome caps");
|
|
} catch (e) {
|
|
do_check_true(true);
|
|
}
|
|
|
|
httpserver2.stop(finishIfDone);
|
|
|
|
// Test async XHR sending
|
|
sb.finish = function(){
|
|
httpserver.stop(finishIfDone);
|
|
}
|
|
|
|
// We want to execute checkResults from the scope of the sandbox as well to
|
|
// make sure that there are no permission errors related to nsEP. For that
|
|
// we need to clone the function into the sandbox and make a few things
|
|
// available for it.
|
|
cu.evalInSandbox('var checkResults = ' + checkResults.toSource(), sb);
|
|
sb.do_check_eq = do_check_eq;
|
|
sb.httpbody = httpbody;
|
|
|
|
function changeListener(event) {
|
|
if (checkResults(async))
|
|
finish();
|
|
}
|
|
|
|
var async = cu.evalInSandbox('var async = createXHR("4444/simple", true);' +
|
|
'async.addEventListener("readystatechange", ' +
|
|
changeListener.toString() + ', false);' +
|
|
'async', sb);
|
|
async.send(null);
|
|
}
|
|
|
|
function serverHandler(metadata, response)
|
|
{
|
|
response.setHeader("Content-Type", "text/xml", false);
|
|
response.bodyOutputStream.write(httpbody, httpbody.length);
|
|
}
|