| Index: LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-blob.html
|
| diff --git a/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-blob.html b/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-blob.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c696db2ef7a9f160f7049d165049e916baf236ed
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/mediastream/RTCPeerConnection-datachannel-blob.html
|
| @@ -0,0 +1,176 @@
|
| +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
| +<html>
|
| +<head>
|
| +<script src="../../resources/js-test.js"></script>
|
| +</head>
|
| +<body>
|
| +<script>
|
| +description("Tests RTCDataChannel sending blob data.");
|
| +
|
| +var pc = null;
|
| +var dc = null;
|
| +var fileSystemSize = 1024;
|
| +var fileName = "rtcdatachannel-send-file-blob.txt";
|
| +var messageToWrite = "Hello, world!";
|
| +var data;
|
| +var blob;
|
| +var fileEntry = null;
|
| +
|
| +function createBlobContainingAllDistinctBytes() {
|
| + var blobData = new Uint8Array(256);
|
| + for (var i = 0; i < 256; ++i)
|
| + blobData[i] = i;
|
| + return new Blob([blobData]);
|
| +}
|
| +
|
| +function checkReceivedBlobData(arrayBuffer) {
|
| + if (arrayBuffer.byteLength != 256)
|
| + return false;
|
| + var result = new Uint8Array(arrayBuffer, 0, arrayBuffer.byteLength);
|
| +
|
| + for (var i = 0; i < 256; ++i) {
|
| + if (result[i] != i)
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +function dc_onmessage_file(e) {
|
| + testPassed("dc_onmessage_file was called");
|
| + data = e.data;
|
| + shouldBeTrue("data instanceof window.Blob");
|
| +
|
| + var reader = new FileReader();
|
| + reader.onload = function(event) {
|
| + if (event.target.result === messageToWrite) {
|
| + testPassed("File data is received correctly.");
|
| + } else {
|
| + testFailed("File data is not received correctly.");
|
| + }
|
| + endTest();
|
| + };
|
| + reader.readAsText(data);
|
| +}
|
| +
|
| +function testSendFileBlob() {
|
| + if (!window.webkitRequestFileSystem) {
|
| + testFailed("window.webkitRequestFileSystem is not available.");
|
| + finishJSTest();
|
| + return;
|
| + }
|
| +
|
| + webkitRequestFileSystem(TEMPORARY, fileSystemSize, didGetFileSystem, didFail);
|
| +}
|
| +
|
| +function didGetFileSystem(fileSystem) {
|
| + testPassed("Got fileSystem");
|
| + fileSystem.root.getFile(fileName, {create: true}, didCreateFile, didFail);
|
| +}
|
| +
|
| +function didCreateFile(entry) {
|
| + testPassed("File created.");
|
| + fileEntry = entry;
|
| + shouldBeTrue("fileEntry.isFile");
|
| + fileEntry.createWriter(didGetFileWriter, didFail);
|
| +}
|
| +
|
| +function didGetFileWriter(writer) {
|
| + writer.truncate(0);
|
| + writer.onerror = function() {
|
| + testFailed("FileWriter operation failed.");
|
| + endTest();
|
| + };
|
| + writer.onwrite = function() {
|
| + writer.write(new Blob([messageToWrite]));
|
| + writer.onwrite = didWriteFile;
|
| + };
|
| +}
|
| +
|
| +function didWriteFile() {
|
| + testPassed("Wrote to file.");
|
| + fileEntry.file(didGetFile, didFail);
|
| +}
|
| +
|
| +var fileObject;
|
| +
|
| +function didGetFile(file) {
|
| + testPassed("Got File object successfully.");
|
| +
|
| + fileObject = file;
|
| + dc.onmessage = dc_onmessage_file;
|
| + shouldNotThrow("dc.send(fileObject);");
|
| +}
|
| +
|
| +function dc_onmessage_blob(e) {
|
| + testPassed("dc_onmessage_blob was called");
|
| + data = e.data;
|
| + shouldBeTrue("data instanceof window.Blob");
|
| +
|
| + var reader = new FileReader();
|
| + reader.onload = function(event) {
|
| + if (checkReceivedBlobData(event.target.result)) {
|
| + testPassed("Blob data was reveived correctly.");
|
| + testSendFileBlob();
|
| + } else {
|
| + testFailed("Blob data should be received correctly");
|
| + endTest();
|
| + }
|
| + };
|
| + reader.readAsArrayBuffer(data);
|
| +}
|
| +
|
| +function dc_onclose() {
|
| + testPassed("dc_onclose was called");
|
| + shouldBe("dc.readyState", "'closed'");
|
| +
|
| + finishJSTest();
|
| +}
|
| +
|
| +function dc_onopen() {
|
| + testPassed("dc_onopen was called");
|
| + shouldBe("dc.readyState", "'open'");
|
| + shouldBe("dc.label", "'label'");
|
| +
|
| + dc.onmessage = dc_onmessage_blob;
|
| + blob = createBlobContainingAllDistinctBytes();
|
| + shouldNotThrow("dc.send(blob);");
|
| +}
|
| +
|
| +function pc_onicechange() {
|
| + if (pc.iceConnectionState === "completed") {
|
| + testPassed("pc is connected");
|
| + shouldNotThrow('dc = pc.createDataChannel("label");');
|
| + shouldBe("dc.readyState", "'connecting'");
|
| + shouldBeEqualToString("dc.binaryType", "blob");
|
| + dc.onopen = dc_onopen;
|
| + dc.onclose = dc_onclose;
|
| + }
|
| +}
|
| +
|
| +function pc_ondatachannel(e) {
|
| + testPassed("pc_ondatachannel was called");
|
| +}
|
| +
|
| +function didFail(fileError) {
|
| + testFailed("FileSystem API operation failed: error code = " + fileError.code);
|
| + endTest();
|
| +}
|
| +
|
| +function endTest() {
|
| + if (fileEntry) {
|
| + testPassed("Deleting the file.");
|
| + fileEntry.remove(finishJSTest, finishJSTest);
|
| + }
|
| + dc.onclose = dc_onclose;
|
| + dc.close();
|
| +}
|
| +
|
| +pc = new webkitRTCPeerConnection(null, null);
|
| +pc.oniceconnectionstatechange = pc_onicechange;
|
| +pc.ondatachannel = pc_ondatachannel;
|
| +
|
| +window.jsTestIsAsync = true;
|
| +window.successfullyParsed = true;
|
| +</script>
|
| +</body>
|
| +</html>
|
|
|