2011-12-15 15:19:51 -08:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
|
|
|
|
<p id="display">
|
|
|
|
<input id="fileList" type="file"></input>
|
|
|
|
</p>
|
|
|
|
<div id="content" style="display: none">
|
|
|
|
</div>
|
|
|
|
<pre id="test">
|
|
|
|
|
|
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
|
|
|
|
function startsWith(target, prefix)
|
|
|
|
{
|
|
|
|
return target.indexOf(prefix) === 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
function createDOMFile(fileName, fileData)
|
|
|
|
{
|
|
|
|
// enablePrivilege is picky about where it's called? if I put it in global
|
|
|
|
// scope at start of <script> it doesn't work...
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
|
|
|
|
|
|
|
// create File in profile dir
|
|
|
|
var dirSvc = Components.classes["@mozilla.org/file/directory_service;1"]
|
|
|
|
.getService(Components.interfaces.nsIProperties);
|
|
|
|
var testFile = dirSvc.get("ProfD", Components.interfaces.nsIFile);
|
|
|
|
testFile.append(fileName);
|
|
|
|
var outStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
|
|
|
|
.createInstance(Components.interfaces.nsIFileOutputStream);
|
|
|
|
outStream.init(testFile, 0x02 | 0x08 | 0x20, 0666, 0);
|
|
|
|
if (fileData) {
|
|
|
|
outStream.write(fileData, fileData.length);
|
|
|
|
outStream.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set filename into DOM <input> field, as if selected by user
|
|
|
|
var fileList = document.getElementById('fileList');
|
|
|
|
fileList.value = testFile.path;
|
|
|
|
|
|
|
|
// return JS File object, aka Blob
|
|
|
|
return fileList.files[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function createBlobContainingHelloWorld()
|
|
|
|
{
|
|
|
|
return createDOMFile("hellofile", "Hello, world!");
|
|
|
|
}
|
|
|
|
|
|
|
|
function createEmptyBlob()
|
|
|
|
{
|
|
|
|
return createDOMFile("emptyfile");
|
|
|
|
}
|
|
|
|
|
|
|
|
function createBlobContainingAllDistinctBytes()
|
|
|
|
{
|
|
|
|
var array = new Array();
|
|
|
|
for (var i = 0; i < 256; ++i)
|
|
|
|
array[i] = i;
|
|
|
|
// Concatenates chars into a single binary string
|
|
|
|
binaryString = String.fromCharCode.apply(null, array);
|
|
|
|
return createDOMFile("allchars", binaryString);
|
|
|
|
}
|
|
|
|
|
2011-12-20 00:20:12 -08:00
|
|
|
var ws = new WebSocket("ws://mochi.test:8888/tests/content/base/test/websocket_hybi/file_check-binary-messages");
|
2011-12-15 15:19:51 -08:00
|
|
|
var closeEvent;
|
|
|
|
|
|
|
|
ws.onopen = function()
|
|
|
|
{
|
|
|
|
ws.send(createBlobContainingHelloWorld());
|
|
|
|
ws.send(createEmptyBlob());
|
|
|
|
ws.send(createBlobContainingAllDistinctBytes());
|
|
|
|
};
|
|
|
|
|
|
|
|
ws.onmessage = function(event)
|
|
|
|
{
|
|
|
|
var message = event.data;
|
|
|
|
if (startsWith(message, "PASS"))
|
|
|
|
ok(true, message);
|
|
|
|
else
|
|
|
|
ok(false, message);
|
|
|
|
};
|
|
|
|
|
|
|
|
ws.onclose = function(event)
|
|
|
|
{
|
|
|
|
ok(event.wasClean, "should have closed cleanly");
|
|
|
|
SimpleTest.finish();
|
|
|
|
};
|
|
|
|
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|