Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10716)

Unified Diff: chrome/test/data/extensions/api_test/socket/api/background.js

Issue 10095020: Allow socket API to send binary data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Jeremy's judgments. Antonits. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/api/experimental.socket.idl ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/data/extensions/api_test/socket/api/background.js
diff --git a/chrome/test/data/extensions/api_test/socket/api/background.js b/chrome/test/data/extensions/api_test/socket/api/background.js
index cb799a762fbf6ac26894470ebcaf5656470ca030..576fd2e0112326304312dc0f21def97160fa4a09 100644
--- a/chrome/test/data/extensions/api_test/socket/api/background.js
+++ b/chrome/test/data/extensions/api_test/socket/api/background.js
@@ -2,47 +2,63 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// net/tools/testserver/testserver.py is picky about the format of what it
+// calls its "echo" messages. One might go so far as to mutter to oneself that
+// it isn't an echo server at all.
+//
+// The response is based on the request but obfuscated using a random key.
+const request = "0100000005320000005hello";
+var expectedResponsePattern = /0100000005320000005.{11}/;
+
const socket = chrome.experimental.socket;
-const message = "helloECHO";
-const address = "127.0.0.1";
-var protocol = "none";
+var address;
+var bytesWritten = 0;
+var dataAsString;
+var dataRead = [];
var port = -1;
+var protocol = "none";
var socketId = 0;
-var dataRead = "";
var succeeded = false;
var waitCount = 0;
-var testSocketCreation = function() {
- function onCreate(socketInfo) {
- chrome.test.assertTrue(socketInfo.socketId > 0);
+// Many thanks to Dennis for his StackOverflow answer: http://goo.gl/UDanx
+function string2ArrayBuffer(string, callback) {
+ var bb = new WebKitBlobBuilder();
+ bb.append(string);
+ var f = new FileReader();
+ f.onload = function(e) {
+ callback(e.target.result);
+ };
+ f.readAsArrayBuffer(bb.getBlob());
+}
- // TODO(miket): this doesn't work yet. It's possible this will become
- // automatic, but either way we can't forget to clean up.
- //socket.destroy(socketInfo.socketId);
+function arrayBuffer2String(buf, callback) {
+ var bb = new WebKitBlobBuilder();
+ bb.append(buf);
+ var f = new FileReader();
+ f.onload = function(e) {
+ callback(e.target.result);
+ };
+ f.readAsText(bb.getBlob());
+}
- chrome.test.succeed();
+function arrayBufferToArrayOfLongs(arrayBuffer) {
+ var longs = [];
+ var arrayBufferView = new Uint8Array(arrayBuffer);
+ for (var i = 0; i < arrayBufferView.length; ++i) {
+ longs[i] = arrayBufferView[i];
}
+ return longs;
+}
- socket.create(protocol, address, port, {}, onCreate);
-};
-
-// net/tools/testserver/testserver.py is picky about the format of what
-// it calls its "echo" messages. One might go so far as to mutter to
-// oneself that it isn't an echo server at all.
-//
-// The response is based on the request but obfuscated using a random
-// key.
-const request = "0100000005320000005hello";
-var expectedResponsePattern = /0100000005320000005.{11}/;
-
-var address;
-var protocol;
-var port;
-var socketId = 0;
-var bytesWritten = 0;
-var dataRead = "";
-var succeeded = false;
-var waitCount = 0;
+function arrayOfLongsToArrayBuffer(longs) {
+ var arrayBuffer = new ArrayBuffer(longs.length);
+ var arrayBufferView = new Uint8Array(arrayBuffer);
+ for (var i = 0; i < longs.length; ++i) {
+ arrayBufferView[i] = longs[i];
+ }
+ return arrayBuffer;
+}
var testSocketCreation = function() {
function onCreate(socketInfo) {
@@ -50,6 +66,7 @@ var testSocketCreation = function() {
// TODO(miket): this doesn't work yet. It's possible this will become
// automatic, but either way we can't forget to clean up.
+ //
//socket.destroy(socketInfo.socketId);
chrome.test.succeed();
@@ -59,11 +76,14 @@ var testSocketCreation = function() {
};
function onDataRead(readInfo) {
- dataRead += readInfo.message;
- if (dataRead.match(expectedResponsePattern)) {
- succeeded = true;
- chrome.test.succeed();
- }
+ // TODO(miket): this isn't correct for multiple calls of onDataRead.
+ arrayBuffer2String(arrayOfLongsToArrayBuffer(readInfo.data), function(s) {
+ dataAsString = s; // save this for error reporting
+ if (s.match(expectedResponsePattern)) {
+ succeeded = true;
+ chrome.test.succeed();
+ }
+ });
// Blocked. Wait for onEvent.
}
@@ -77,7 +97,10 @@ function onWriteComplete(writeInfo) {
function onConnectComplete(connectResult) {
if (connectResult == 0) {
- socket.write(socketId, request, onWriteComplete);
+ string2ArrayBuffer(request, function(arrayBuffer) {
+ var longs = arrayBufferToArrayOfLongs(arrayBuffer);
+ socket.write(socketId, longs, onWriteComplete);
+ });
}
// Blocked. Wait for onEvent.
}
@@ -92,8 +115,7 @@ function onEvent(socketEvent) {
if (socketEvent.type == "connectComplete") {
onConnectComplete(socketEvent.resultCode);
} else if (socketEvent.type == "dataRead") {
- // TODO(miket): why one "message" and the other "data"?
- onDataRead({message: socketEvent.data});
+ onDataRead({data: socketEvent.data});
} else if (socketEvent.type == "writeComplete") {
onWriteComplete(socketEvent.resultCode);
} else {
@@ -101,33 +123,13 @@ function onEvent(socketEvent) {
}
};
-function onRead(readInfo) {
- if (readInfo.message == message) {
- succeeded = true;
- chrome.test.succeed();
- } else {
- // The read blocked. Save what we've got so far, and wait for onEvent.
- dataRead = readInfo.message;
- }
-}
-
-function onWrite(writeInfo) {
- chrome.test.assertTrue(writeInfo.bytesWritten == message.length);
- socket.read(socketId, onRead);
-}
-
-function onConnect(connectResult) {
- chrome.test.assertTrue(connectResult);
- socket.write(socketId, message, onWrite);
-}
-
function waitForBlockingOperation() {
if (++waitCount < 10) {
setTimeout(waitForBlockingOperation, 1000);
} else {
// We weren't able to succeed in the given time.
chrome.test.fail("Operations didn't complete after " + waitCount + " " +
- "seconds. Response so far was <" + dataRead + ">.");
+ "seconds. Response so far was <" + dataAsString + ">.");
}
}
« no previous file with comments | « chrome/common/extensions/api/experimental.socket.idl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698