PageRenderTime 43ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/chrome-cordova/chrome-apps-api-tests/tests/manual/manual.chrome.socket.js

https://github.com/engmsaleh/mobile-chrome-apps
JavaScript | 315 lines | 257 code | 55 blank | 3 comment | 29 complexity | 18f1748f5e3da93885ce1e72e49f0558 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0
  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
  3. // found in the LICENSE file.
  4. registerManualTests('chrome.socket', function(rootEl, addButton) {
  5. var addr = '127.0.0.1';
  6. var port = 1234;
  7. function connectAndWrite(type, data) {
  8. chrome.socket.create(type, {}, function(socketInfo) {
  9. chrome.socket.connect(socketInfo.socketId, addr, port, function(connectResult) {
  10. var connected = (connectResult === 0);
  11. if (connected) {
  12. chrome.socket.write(socketInfo.socketId, data, function(writeResult) {
  13. logger('connectAndWrite: success');
  14. chrome.socket.disconnect(socketInfo.socketId);
  15. chrome.socket.destroy(socketInfo.socketId);
  16. });
  17. }
  18. });
  19. });
  20. }
  21. function connectAndRead(type, data) {
  22. chrome.socket.create(type, {}, function(socketInfo) {
  23. chrome.socket.connect(socketInfo.socketId, addr, port, function(connectResult) {
  24. var connected = (connectResult === 0);
  25. if (connected) {
  26. chrome.socket.write(socketInfo.socketId, data, function(writeResult) {
  27. chrome.socket.read(socketInfo.socketId, function(readResult) {
  28. logger('connectAndRead: success');
  29. chrome.socket.disconnect(socketInfo.socketId);
  30. chrome.socket.destroy(socketInfo.socketId);
  31. });
  32. });
  33. }
  34. });
  35. });
  36. }
  37. function acceptAndWrite() {
  38. }
  39. function acceptAndRead() {
  40. chrome.socket.create('tcp', {}, function(socketInfo) {
  41. chrome.socket.listen(socketInfo.socketId, addr, port, function(listenResult) {
  42. chrome.socket.accept(socketInfo.socketId, function(acceptInfo) {
  43. chrome.socket.read(acceptInfo.socketId, function(readResult) {
  44. logger('acceptAndRead: success');
  45. chrome.socket.disconnect(acceptInfo.socketId);
  46. chrome.socket.destroy(acceptInfo.socketId);
  47. chrome.socket.disconnect(socketInfo.socketId);
  48. chrome.socket.destroy(socketInfo.socketId);
  49. });
  50. });
  51. });
  52. });
  53. }
  54. function acceptConnectReadWrite(data) {
  55. chrome.socket.create('tcp', {}, function(socketInfo) {
  56. chrome.socket.listen(socketInfo.socketId, addr, port, function(listenResult) {
  57. chrome.socket.accept(socketInfo.socketId, function(acceptInfo) {
  58. chrome.socket.read(acceptInfo.socketId, function(readResult) {
  59. var sent = new Uint8Array(data);
  60. var recv = new Uint8Array(readResult.data);
  61. chrome.socket.disconnect(acceptInfo.socketId);
  62. chrome.socket.destroy(acceptInfo.socketId);
  63. chrome.socket.disconnect(socketInfo.socketId);
  64. chrome.socket.destroy(socketInfo.socketId);
  65. if (recv.length != sent.length) {
  66. return;
  67. }
  68. for (var i = 0; i < recv.length; i++) {
  69. if (recv[i] != sent[i]) {
  70. return;
  71. }
  72. }
  73. logger('acceptConnectReadWrite: success');
  74. });
  75. });
  76. chrome.socket.create('tcp', {}, function(socketInfo) {
  77. chrome.socket.connect(socketInfo.socketId, addr, port, function(connectResult) {
  78. var connected = (connectResult === 0);
  79. if (connected) {
  80. chrome.socket.write(socketInfo.socketId, data, function(writeResult) {
  81. chrome.socket.disconnect(socketInfo.socketId);
  82. chrome.socket.destroy(socketInfo.socketId);
  83. });
  84. }
  85. });
  86. });
  87. });
  88. });
  89. }
  90. function acceptConnectReadWriteGetInfo(data) {
  91. chrome.socket.create('tcp', {}, function(socketInfo) {
  92. chrome.socket.listen(socketInfo.socketId, addr, port, function(listenResult) {
  93. chrome.socket.accept(socketInfo.socketId, function(acceptInfo) {
  94. chrome.socket.read(acceptInfo.socketId, function(readResult) {
  95. var sent = new Uint8Array(data);
  96. var recv = new Uint8Array(readResult.data);
  97. chrome.socket.disconnect(acceptInfo.socketId);
  98. chrome.socket.destroy(acceptInfo.socketId);
  99. chrome.socket.disconnect(socketInfo.socketId);
  100. chrome.socket.destroy(socketInfo.socketId);
  101. if (recv.length != sent.length) {
  102. return;
  103. }
  104. for (var i = 0; i < recv.length; i++) {
  105. if (recv[i] != sent[i]) {
  106. return;
  107. }
  108. }
  109. logger('acceptConnectReadWrite: success');
  110. });
  111. });
  112. chrome.socket.create('tcp', {}, function(socketInfo) {
  113. chrome.socket.connect(socketInfo.socketId, addr, port, function(connectResult) {
  114. var connected = (connectResult === 0);
  115. if (connected) {
  116. chrome.socket.getInfo(socketInfo.socketId, function(info) {
  117. if (info) {
  118. logger(info.socketType + ': connected(' + info.connected + ') ' + (info.connected ? info.peerAddress + ':' + info.peerPort + ' -> ' + info.localAddress + ':' + info.localPort : ''));
  119. }
  120. chrome.socket.write(socketInfo.socketId, data, function(writeResult) {
  121. chrome.socket.disconnect(socketInfo.socketId);
  122. chrome.socket.destroy(socketInfo.socketId);
  123. });
  124. });
  125. }
  126. });
  127. });
  128. });
  129. });
  130. }
  131. function sendTo(data) {
  132. chrome.socket.create('udp', {}, function(socketInfo) {
  133. chrome.socket.sendTo(socketInfo.socketId, data, addr, port, function(result) {
  134. logger('sendTo: success');
  135. chrome.socket.destroy(socketInfo.socketId);
  136. });
  137. });
  138. }
  139. function bindAndRecvFrom(data) {
  140. chrome.socket.create('udp', {}, function(socketInfo) {
  141. chrome.socket.bind(socketInfo.socketId, addr, port, function(result) {
  142. chrome.socket.recvFrom(socketInfo.socketId, function(readResult) {
  143. logger('recvFrom: success');
  144. chrome.socket.destroy(socketInfo.socketId);
  145. });
  146. });
  147. });
  148. }
  149. function bindRecvFromSendTo(data) {
  150. chrome.socket.create('udp', {}, function(socketInfo) {
  151. chrome.socket.bind(socketInfo.socketId, addr, port, function(result) {
  152. chrome.socket.recvFrom(socketInfo.socketId, function(readResult) {
  153. var sent = new Uint8Array(data);
  154. var recv = new Uint8Array(readResult.data);
  155. if (recv.length != sent.length) {
  156. return;
  157. }
  158. for (var i = 0; i < recv.length; i++) {
  159. if (recv[i] != sent[i]) {
  160. return;
  161. }
  162. }
  163. logger('bindRecvFromSendTo: success');
  164. chrome.socket.destroy(socketInfo.socketId);
  165. });
  166. chrome.socket.create('udp', {}, function(socketInfo) {
  167. chrome.socket.sendTo(socketInfo.socketId, data, addr, port, function(result) {
  168. chrome.socket.destroy(socketInfo.socketId);
  169. });
  170. });
  171. });
  172. });
  173. }
  174. function bindConnectReadWrite(data) {
  175. chrome.socket.create('udp', {}, function(socketInfo1) {
  176. chrome.socket.bind(socketInfo1.socketId, addr, port, function(result) {
  177. chrome.socket.create('udp', {}, function(socketInfo2) {
  178. chrome.socket.bind(socketInfo2.socketId, addr, port+1, function(result) {
  179. chrome.socket.connect(socketInfo1.socketId, addr, port+1, function(result) {
  180. chrome.socket.connect(socketInfo2.socketId, addr, port, function(result) {
  181. chrome.socket.read(socketInfo1.socketId, function(readResult) {
  182. var sent = new Uint8Array(data);
  183. var recv = new Uint8Array(readResult.data);
  184. if (recv.length != sent.length) {
  185. return;
  186. }
  187. for (var i = 0; i < recv.length; i++) {
  188. if (recv[i] != sent[i]) {
  189. return;
  190. }
  191. }
  192. logger('bindConnectReadWrite: success');
  193. chrome.socket.destroy(socketInfo1.socketId);
  194. });
  195. chrome.socket.write(socketInfo2.socketId, data, function(result) {
  196. chrome.socket.destroy(socketInfo2.socketId);
  197. });
  198. });
  199. });
  200. });
  201. });
  202. });
  203. });
  204. }
  205. function getNetworkList() {
  206. chrome.socket.getNetworkList(function(info) {
  207. if (!info) return;
  208. for (var i = 0; i < info.length; i++) {
  209. logger(info[i].name + ': ' + info[i].address);
  210. }
  211. });
  212. }
  213. function initPage() {
  214. logger('Run this in terminal:');
  215. logger('while true; do');
  216. logger(' (nc -lv 1234 | xxd) || break; echo;');
  217. logger('done');
  218. var arr = new Uint8Array(256);
  219. for (var i = 0; i < arr.length; i++) {
  220. arr[i] = i;
  221. }
  222. addButton('TCP: connect & write', function() {
  223. connectAndWrite('tcp', arr.buffer);
  224. });
  225. addButton('TCP: connect & read', function() {
  226. connectAndRead('tcp', arr.buffer);
  227. });
  228. addButton('TCP: accept & read', function() {
  229. acceptAndRead();
  230. });
  231. addButton('TCP: all-in-one', function() {
  232. acceptConnectReadWrite(arr.buffer);
  233. });
  234. addButton('TCP: all-in-one with getInfo', function() {
  235. acceptConnectReadWriteGetInfo(arr.buffer);
  236. });
  237. addButton('UDP: connect & write', function() {
  238. connectAndWrite('udp', arr.buffer);
  239. });
  240. addButton('UDP: connect & read', function() {
  241. connectAndRead('udp', arr.buffer);
  242. });
  243. addButton('UDP: sendTo', function() {
  244. sendTo(arr.buffer);
  245. });
  246. addButton('UDP: bind & recvFrom', function() {
  247. bindAndRecvFrom(arr.buffer);
  248. });
  249. addButton('UDP: all-in-one connectionless', function() {
  250. bindRecvFromSendTo(arr.buffer);
  251. });
  252. addButton('UDP: all-in-one w/ connections', function() {
  253. bindConnectReadWrite(arr.buffer);
  254. });
  255. addButton('getNetworkList', function() {
  256. getNetworkList();
  257. });
  258. }
  259. initPage();
  260. });