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

Side by Side Diff: native_client_sdk/src/examples/demo/nacl_io/example.js

Issue 306973002: [NaCl SDK] rename nacl_io demo. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
5 function moduleDidLoad() {
6 common.hideModule();
7 }
8
9 function $(id) {
10 return document.getElementById(id);
11 }
12
13 // Called by the common.js module.
14 function domContentLoaded(name, tc, config, width, height) {
15 navigator.webkitPersistentStorage.requestQuota(1024 * 1024,
16 function(bytes) {
17 common.updateStatus(
18 'Allocated ' + bytes + ' bytes of persistant storage.');
19 common.attachDefaultListeners();
20 common.createNaClModule(name, tc, config, width, height);
21 },
22 function(e) { alert('Failed to allocate space') });
23 }
24
25 // Called by the common.js module.
26 function attachListeners() {
27 var radioEls = document.querySelectorAll('input[type="radio"]');
28 for (var i = 0; i < radioEls.length; ++i) {
29 radioEls[i].addEventListener('click', onRadioClicked);
30 }
31
32 // Wire up the 'click' event for each function's button.
33 var functionEls = document.querySelectorAll('.function');
34 for (var i = 0; i < functionEls.length; ++i) {
35 var functionEl = functionEls[i];
36 var id = functionEl.getAttribute('id');
37 var buttonEl = functionEl.querySelector('button');
38
39 // The function name matches the element id.
40 var func = window[id];
41 buttonEl.addEventListener('click', func);
42 }
43
44 $('pipe_input_box').addEventListener('keypress', onPipeInput)
45 $('pipe_output').disabled = true;
46
47 $('pipe_name').addEventListener('change',
48 function() { $('pipe_output').value = ''; })
49 }
50
51 // Called with keypress events on the pipe input box
52 function onPipeInput(e) {
53 // Create an arraybuffer containing the 16-bit char code
54 // from the keypress event.
55 var buffer = new ArrayBuffer(1*2);
56 var bufferView = new Uint16Array(buffer);
57 bufferView[0] = e.charCode;
58
59 // Pass the buffer in a dictionary over the NaCl module
60 var pipeSelect = $('pipe_name');
61 var pipeName = pipeSelect[pipeSelect.selectedIndex].value;
62 var message = {
63 pipe: pipeName,
64 operation: 'write',
65 payload: buffer,
66 };
67 nacl_module.postMessage(message);
68 e.preventDefault();
69 return false;
70 }
71
72 function onRadioClicked(e) {
73 var divId = this.id.slice(5); // skip "radio"
74 var functionEls = document.querySelectorAll('.function');
75 for (var i = 0; i < functionEls.length; ++i) {
76 var visible = functionEls[i].id === divId;
77 if (functionEls[i].id === divId)
78 functionEls[i].removeAttribute('hidden');
79 else
80 functionEls[i].setAttribute('hidden', '');
81 }
82 }
83
84 function addNameToSelectElements(cssClass, handle, name) {
85 var text = '[' + handle + '] ' + name;
86 var selectEls = document.querySelectorAll(cssClass);
87 for (var i = 0; i < selectEls.length; ++i) {
88 var optionEl = document.createElement('option');
89 optionEl.setAttribute('value', handle);
90 optionEl.appendChild(document.createTextNode(text));
91 selectEls[i].appendChild(optionEl);
92 }
93 }
94
95 function removeNameFromSelectElements(cssClass, handle) {
96 var optionEls = document.querySelectorAll(cssClass + ' > option');
97 for (var i = 0; i < optionEls.length; ++i) {
98 var optionEl = optionEls[i];
99 if (optionEl.value == handle) {
100 var selectEl = optionEl.parentNode;
101 selectEl.removeChild(optionEl);
102 }
103 }
104 }
105
106 var filehandle_map = {};
107 var dirhandle_map = {};
108
109 function fopen(e) {
110 var filename = $('fopenFilename').value;
111 var access = $('fopenMode').value;
112 postCall('fopen', filename, access, function(filename, filehandle) {
113 filehandle_map[filehandle] = filename;
114
115 addNameToSelectElements('.file-handle', filehandle, filename);
116 common.logMessage('File ' + filename + ' opened successfully.');
117 });
118 }
119
120 function fclose(e) {
121 var filehandle = parseInt($('fcloseHandle').value, 10);
122 postCall('fclose', filehandle, function(filehandle) {
123 var filename = filehandle_map[filehandle];
124 removeNameFromSelectElements('.file-handle', filehandle, filename);
125 common.logMessage('File ' + filename + ' closed successfully.');
126 });
127 }
128
129 function fread(e) {
130 var filehandle = parseInt($('freadHandle').value, 10);
131 var numBytes = parseInt($('freadBytes').value, 10);
132 postCall('fread', filehandle, numBytes, function(filehandle, data) {
133 var filename = filehandle_map[filehandle];
134 common.logMessage('Read "' + data + '" from file ' + filename + '.');
135 });
136 }
137
138 function fwrite(e) {
139 var filehandle = parseInt($('fwriteHandle').value, 10);
140 var data = $('fwriteData').value;
141 postCall('fwrite', filehandle, data, function(filehandle, bytesWritten) {
142 var filename = filehandle_map[filehandle];
143 common.logMessage('Wrote ' + bytesWritten + ' bytes to file ' + filename +
144 '.');
145 });
146 }
147
148 function fseek(e) {
149 var filehandle = parseInt($('fseekHandle').value, 10);
150 var offset = parseInt($('fseekOffset').value, 10);
151 var whence = parseInt($('fseekWhence').value, 10);
152 postCall('fseek', filehandle, offset, whence, function(filehandle, filepos) {
153 var filename = filehandle_map[filehandle];
154 common.logMessage('Seeked to location ' + filepos + ' in file ' + filename +
155 '.');
156 });
157 }
158
159 function fflush(e) {
160 var filehandle = parseInt($('fflushHandle').value, 10);
161 postCall('fflush', filehandle, function(filehandle, filepos) {
162 var filename = filehandle_map[filehandle];
163 common.logMessage('flushed ' + filename + '.');
164 });
165 }
166
167 function stat(e) {
168 var filename = $('statFilename').value;
169 postCall('stat', filename, function(filename, size) {
170 common.logMessage('File ' + filename + ' has size ' + size + '.');
171 });
172 }
173
174 function opendir(e) {
175 var dirname = $('opendirDirname').value;
176 postCall('opendir', dirname, function(dirname, dirhandle) {
177 dirhandle_map[dirhandle] = dirname;
178
179 addNameToSelectElements('.dir-handle', dirhandle, dirname);
180 common.logMessage('Directory ' + dirname + ' opened successfully.');
181 });
182 }
183
184 function readdir(e) {
185 var dirhandle = parseInt($('readdirHandle').value, 10);
186 postCall('readdir', dirhandle, function(dirhandle, ino, name) {
187 var dirname = dirhandle_map[dirhandle];
188 if (ino === undefined) {
189 common.logMessage('End of directory.');
190 } else {
191 common.logMessage('Read entry ("' + name + '", ino = ' + ino +
192 ') from directory ' + dirname + '.');
193 }
194 });
195 }
196
197 function closedir(e) {
198 var dirhandle = parseInt($('closedirHandle').value, 10);
199 postCall('closedir', dirhandle, function(dirhandle) {
200 var dirname = dirhandle_map[dirhandle];
201 delete dirhandle_map[dirhandle];
202
203 removeNameFromSelectElements('.dir-handle', dirhandle, dirname);
204 common.logMessage('Directory ' + dirname + ' closed successfully.');
205 });
206 }
207
208 function mkdir(e) {
209 var dirname = $('mkdirDirname').value;
210 var mode = parseInt($('mkdirMode').value, 10);
211 postCall('mkdir', dirname, mode, function(dirname) {
212 common.logMessage('Directory ' + dirname + ' created successfully.');
213 });
214 }
215
216 function rmdir(e) {
217 var dirname = $('rmdirDirname').value;
218 postCall('rmdir', dirname, function(dirname) {
219 common.logMessage('Directory ' + dirname + ' removed successfully.');
220 });
221 }
222
223 function chdir(e) {
224 var dirname = $('chdirDirname').value;
225 postCall('chdir', dirname, function(dirname) {
226 common.logMessage('Changed directory to: ' + dirname + '.');
227 });
228 }
229
230 function getcwd(e) {
231 postCall('getcwd', function(dirname) {
232 common.logMessage('getcwd: ' + dirname + '.');
233 });
234 }
235
236 function getaddrinfo(e) {
237 var name = $('getaddrinfoName').value;
238 var family = $('getaddrinfoFamily').value;
239 postCall('getaddrinfo', name, family, function(name, addrType) {
240 common.logMessage('getaddrinfo returned successfully');
241 common.logMessage('ai_cannonname = ' + name + '.');
242 var count = 1;
243 for (var i = 1; i < arguments.length; i+=2) {
244 var msg = 'Address number ' + count + ' = ' + arguments[i] +
245 ' (' + arguments[i+1] + ')';
246 common.logMessage(msg);
247 count += 1;
248 }
249 });
250 }
251
252 function gethostbyname(e) {
253 var name = $('gethostbynameName').value;
254 postCall('gethostbyname', name, function(name, addrType) {
255 common.logMessage('gethostbyname returned successfully');
256 common.logMessage('h_name = ' + name + '.');
257 common.logMessage('h_addr_type = ' + addrType + '.');
258 for (var i = 2; i < arguments.length; i++) {
259 common.logMessage('Address number ' + (i-1) + ' = ' + arguments[i] + '.');
260 }
261 });
262 }
263
264 function connect(e) {
265 var host = $('connectHost').value;
266 var port = parseInt($('connectPort').value, 10);
267 postCall('connect', host, port, function(sockhandle) {
268 common.logMessage('connected');
269 addNameToSelectElements('.sock-handle', sockhandle, '[socket]');
270 });
271 }
272
273 function recv(e) {
274 var handle = parseInt($('recvHandle').value, 10);
275 var bufferSize = parseInt($('recvBufferSize').value, 10);
276 postCall('recv', handle, bufferSize, function(messageLen, message) {
277 common.logMessage("received " + messageLen + ' bytes: ' + message);
278 });
279 }
280
281 function send(e) {
282 var handle = parseInt($('sendHandle').value, 10);
283 var message = $('sendMessage').value;
284 postCall('send', handle, message, function(sentBytes) {
285 common.logMessage("sent bytes: " + sentBytes);
286 });
287 }
288
289 function close(e) {
290 var handle = parseInt($('closeHandle').value, 10);
291 postCall('close', handle, function(sock) {
292 removeNameFromSelectElements('.sock-handle', sock, "[socket]");
293 common.logMessage("closed socket: " + sock);
294 });
295 }
296
297 var funcToCallback = {};
298
299 function postCall(func) {
300 var callback = arguments[arguments.length - 1];
301 funcToCallback[func] = callback;
302
303 nacl_module.postMessage({
304 cmd: func,
305 args: Array.prototype.slice.call(arguments, 1, -1)
306 });
307 }
308
309 function ArrayBufferToString(buf) {
310 return String.fromCharCode.apply(null, new Uint16Array(buf));
311 }
312
313 // Called by the common.js module.
314 function handleMessage(message_event) {
315 var data = message_event.data;
316 if ((typeof(data) === 'string' || data instanceof String)) {
317 common.logMessage(data);
318 } else if (data instanceof Object) {
319 var pipeName = data['pipe']
320 if (pipeName !== undefined) {
321 // Message for JavaScript I/O pipe
322 var operation = data['operation'];
323 if (operation == 'write') {
324 $('pipe_output').value += ArrayBufferToString(data['payload']);
325 } else if (operation == 'ack') {
326 common.logMessage(pipeName + ": ack:" + data['payload']);
327 } else {
328 common.logMessage('Got unexpected pipe operation: ' + operation);
329 }
330 } else {
331 // Result from a function call.
332 var params = data.args;
333 var funcName = data.cmd;
334 var callback = funcToCallback[funcName];
335
336 if (!callback) {
337 common.logMessage('Error: Bad message ' + funcName +
338 ' received from NaCl module.');
339 return;
340 }
341
342 delete funcToCallback[funcName];
343 callback.apply(null, params);
344 }
345 } else {
346 common.logMessage('Error: Unknow message `' + data +
347 '` received from NaCl module.');
348 }
349 }
OLDNEW
« no previous file with comments | « native_client_sdk/src/examples/demo/nacl_io/example.dsc ('k') | native_client_sdk/src/examples/demo/nacl_io/handlers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698