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

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

Issue 10134008: Add bind(), recvFrom(), sendTo() for UDP socket. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Update Created 8 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // net/tools/testserver/testserver.py is picky about the format of what it 5 // net/tools/testserver/testserver.py is picky about the format of what it
6 // calls its "echo" messages. One might go so far as to mutter to oneself that 6 // calls its "echo" messages. One might go so far as to mutter to oneself that
7 // it isn't an echo server at all. 7 // it isn't an echo server at all.
8 // 8 //
9 // The response is based on the request but obfuscated using a random key. 9 // The response is based on the request but obfuscated using a random key.
10 const request = "0100000005320000005hello"; 10 const request = "0100000005320000005hello";
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 chrome.test.assertTrue(socketInfo.socketId > 0); 65 chrome.test.assertTrue(socketInfo.socketId > 0);
66 66
67 // TODO(miket): this doesn't work yet. It's possible this will become 67 // TODO(miket): this doesn't work yet. It's possible this will become
68 // automatic, but either way we can't forget to clean up. 68 // automatic, but either way we can't forget to clean up.
69 // 69 //
70 //socket.destroy(socketInfo.socketId); 70 //socket.destroy(socketInfo.socketId);
71 71
72 chrome.test.succeed(); 72 chrome.test.succeed();
73 } 73 }
74 74
75 socket.create(protocol, address, port, {onEvent: function(e) {}}, onCreate); 75 socket.create(protocol, {onEvent: function(e) {}}, onCreate);
76 }; 76 };
77 77
78 function onDataRead(readInfo) { 78 function onDataRead(readInfo) {
79 if (readInfo.resultCode > 0 || readInfo.data.length > 0) { 79 if (readInfo.resultCode > 0 || readInfo.data.length > 0) {
80 chrome.test.assertEq(readInfo.resultCode, readInfo.data.length); 80 chrome.test.assertEq(readInfo.resultCode, readInfo.data.length);
81 } 81 }
82 82
83 // TODO(miket): this isn't correct for multiple calls of onDataRead. 83 // TODO(miket): this isn't correct for multiple calls of onDataRead.
84 arrayBuffer2String(arrayOfLongsToArrayBuffer(readInfo.data), function(s) { 84 arrayBuffer2String(arrayOfLongsToArrayBuffer(readInfo.data), function(s) {
85 dataAsString = s; // save this for error reporting 85 dataAsString = s; // save this for error reporting
86 if (s.match(expectedResponsePattern)) { 86 if (s.match(expectedResponsePattern)) {
87 succeeded = true; 87 succeeded = true;
88 chrome.test.succeed(); 88 chrome.test.succeed();
89 } 89 }
90 }); 90 });
91 // Blocked. Wait for onEvent. 91 // Blocked. Wait for onEvent.
92 } 92 }
93 93
94 function onWriteComplete(writeInfo) { 94 function onWriteOrSendToComplete(writeInfo) {
95 bytesWritten += writeInfo.bytesWritten; 95 bytesWritten += writeInfo.bytesWritten;
96 if (bytesWritten == request.length) { 96 if (bytesWritten == request.length) {
97 socket.read(socketId, onDataRead); 97 if (protocol == "tcp")
98 socket.read(socketId, onDataRead);
99 else
100 socket.recvFrom(socketId, onDataRead);
98 } 101 }
99 // Blocked. Wait for onEvent. 102 // Blocked. Wait for onEvent.
100 } 103 }
101 104
102 function onConnectComplete(connectResult) { 105 function onConnectOrBindComplete(connectResult) {
103 if (connectResult == 0) { 106 if (connectResult == 0) {
104 string2ArrayBuffer(request, function(arrayBuffer) { 107 string2ArrayBuffer(request, function(arrayBuffer) {
105 var longs = arrayBufferToArrayOfLongs(arrayBuffer); 108 var longs = arrayBufferToArrayOfLongs(arrayBuffer);
106 socket.write(socketId, longs, onWriteComplete); 109 if (protocol == "tcp")
110 socket.write(socketId, longs, onWriteOrSendToComplete);
111 else
112 socket.sendTo(socketId, longs, address, port,
113 onWriteOrSendToComplete);
107 }); 114 });
108 } 115 }
109 // Blocked. Wait for onEvent. 116 // Blocked. Wait for onEvent.
110 } 117 }
111 118
112 function onCreate(socketInfo) { 119 function onCreate(socketInfo) {
113 socketId = socketInfo.socketId; 120 socketId = socketInfo.socketId;
114 chrome.test.assertTrue(socketId > 0, "failed to create socket"); 121 chrome.test.assertTrue(socketId > 0, "failed to create socket");
115 socket.connect(socketId, onConnectComplete); 122 if (protocol == "tcp")
123 socket.connect(socketId, address, port, onConnectOrBindComplete);
124 else
125 socket.bind(socketId, "0.0.0.0", 0, onConnectOrBindComplete);
116 } 126 }
117 127
118 function onEvent(socketEvent) { 128 function onEvent(socketEvent) {
119 if (socketEvent.type == "connectComplete") { 129 if (socketEvent.type == "connectComplete") {
120 onConnectComplete(socketEvent.resultCode); 130 onConnectOrBindComplete(socketEvent.resultCode);
121 } else if (socketEvent.type == "dataRead") { 131 } else if (socketEvent.type == "dataRead") {
122 onDataRead({resultCode: socketEvent.resultCode, data: socketEvent.data}); 132 onDataRead({resultCode: socketEvent.resultCode, data: socketEvent.data});
123 } else if (socketEvent.type == "writeComplete") { 133 } else if (socketEvent.type == "writeComplete") {
124 onWriteComplete(socketEvent.resultCode); 134 onWriteOnSendToComplete(socketEvent.resultCode);
125 } else { 135 } else {
126 console.log("Received unhandled socketEvent of type " + socketEvent.type); 136 console.log("Received unhandled socketEvent of type " + socketEvent.type);
127 } 137 }
128 }; 138 };
129 139
130 function waitForBlockingOperation() { 140 function waitForBlockingOperation() {
131 if (++waitCount < 10) { 141 if (++waitCount < 10) {
132 setTimeout(waitForBlockingOperation, 1000); 142 setTimeout(waitForBlockingOperation, 1000);
133 } else { 143 } else {
134 // We weren't able to succeed in the given time. 144 // We weren't able to succeed in the given time.
135 chrome.test.fail("Operations didn't complete after " + waitCount + " " + 145 chrome.test.fail("Operations didn't complete after " + waitCount + " " +
136 "seconds. Response so far was <" + dataAsString + ">."); 146 "seconds. Response so far was <" + dataAsString + ">.");
137 } 147 }
138 } 148 }
139 149
140 var testSending = function() { 150 var testSending = function() {
141 dataRead = ""; 151 dataRead = "";
142 succeeded = false; 152 succeeded = false;
143 waitCount = 0; 153 waitCount = 0;
144 154
145 setTimeout(waitForBlockingOperation, 1000); 155 setTimeout(waitForBlockingOperation, 1000);
146 socket.create(protocol, address, port, { onEvent: onEvent }, onCreate); 156 socket.create(protocol, {onEvent: onEvent}, onCreate);
147 }; 157 };
148 158
149 var onMessageReply = function(message) { 159 var onMessageReply = function(message) {
150 var parts = message.split(":"); 160 var parts = message.split(":");
151 protocol = parts[0]; 161 protocol = parts[0];
152 address = parts[1]; 162 address = parts[1];
153 port = parseInt(parts[2]); 163 port = parseInt(parts[2]);
154 console.log("Running tests, protocol " + protocol + ", echo server " + 164 console.log("Running tests, protocol " + protocol + ", echo server " +
155 address + ":" + port); 165 address + ":" + port);
156 chrome.test.runTests([ testSocketCreation, testSending ]); 166 chrome.test.runTests([ testSocketCreation, testSending ]);
157 }; 167 };
158 168
159 // Find out which protocol we're supposed to test, and which echo server we 169 // Find out which protocol we're supposed to test, and which echo server we
160 // should be using, then kick off the tests. 170 // should be using, then kick off the tests.
161 chrome.test.sendMessage("info_please", onMessageReply); 171 chrome.test.sendMessage("info_please", onMessageReply);
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/experimental.socket_custom_bindings.js ('k') | net/udp/udp_socket_libevent.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698