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

Side by Side Diff: native_client_sdk/src/examples/hello_nacl_mounts/example.js

Issue 11190066: [NaCl SDK] nacl-mounts example. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix windows Created 8 years, 1 month 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 // Start up the paint timer when the NaCl module has loaded.
6 function moduleDidLoad() {
7 common.hideModule();
8 }
9
10 // Called by the common.js module.
11 function attachListeners() {
12 var radioEls = document.querySelectorAll('input[type="radio"]');
13 for (var i = 0; i < radioEls.length; ++i) {
14 radioEls[i].addEventListener('click', onRadioClicked);
15 }
16
17 document.getElementById('fopenExecute').addEventListener('click', fopen);
18 document.getElementById('fcloseExecute').addEventListener('click', fclose);
19 document.getElementById('freadExecute').addEventListener('click', fread);
20 document.getElementById('fwriteExecute').addEventListener('click', fwrite);
21 document.getElementById('fseekExecute').addEventListener('click', fseek);
22 }
23
24 function onRadioClicked(e) {
25 var divId = this.id.slice(5); // skip "radio"
26 var functionEls = document.querySelectorAll('.function');
27 for (var i = 0; i < functionEls.length; ++i) {
28 var visible = functionEls[i].id === divId;
29 if (functionEls[i].id === divId)
30 functionEls[i].removeAttribute('hidden');
31 else
32 functionEls[i].setAttribute('hidden');
33 }
34 }
35
36 function addFilenameToSelectElements(filehandle, filename) {
37 var text = '[' + filehandle + '] ' + filename;
38 var selectEls = document.querySelectorAll('select.file-handle');
39 for (var i = 0; i < selectEls.length; ++i) {
40 var optionEl = document.createElement('option');
41 optionEl.setAttribute('value', filehandle);
42 optionEl.appendChild(document.createTextNode(text));
43 selectEls[i].appendChild(optionEl);
44 }
45 }
46
47 function removeFilenameFromSelectElements(filehandle) {
48 var optionEls = document.querySelectorAll('select.file-handle > option');
49 for (var i = 0; i < optionEls.length; ++i) {
50 var optionEl = optionEls[i];
51 if (optionEl.value == filehandle) {
52 var selectEl = optionEl.parentNode;
53 selectEl.removeChild(optionEl);
54 }
55 }
56 }
57
58 var filehandle_map = {};
59
60 function fopen(e) {
61 var filename = document.getElementById('fopenFilename').value;
62
63 var access = '';
64 if (document.getElementById('fopenWrite').checked)
65 access += 'w';
66 if (document.getElementById('fopenRead').checked)
67 access += 'r';
68
69 nacl_module.postMessage(makeCall('fopen', filename, access));
70 }
71
72 function fopen_result(filename, filehandle) {
73 filehandle_map[filehandle] = filename;
74
75 addFilenameToSelectElements(filehandle, filename)
76 logMessage('File ' + filename + ' opened successfully.');
77 }
78
79 function fclose(e) {
80 var filehandle = document.getElementById('fcloseHandle').value;
81 nacl_module.postMessage(makeCall('fclose', filehandle));
82 }
83
84 function fclose_result(filehandle) {
85 var filename = filehandle_map[filehandle];
86 removeFilenameFromSelectElements(filehandle, filename);
87 logMessage('File ' + filename + ' closed successfully.');
88 }
89
90 function fread(e) {
91 var filehandle = document.getElementById('freadHandle').value;
92 var numBytes = document.getElementById('freadBytes').value;
93 nacl_module.postMessage(makeCall('fread', filehandle, numBytes));
94 }
95
96 function fread_result(filehandle, data) {
97 var filename = filehandle_map[filehandle];
98 logMessage('Read "' + data + '" from file ' + filename + '.');
99 }
100
101 function fwrite(e) {
102 var filehandle = document.getElementById('fwriteHandle').value;
103 var data = document.getElementById('fwriteData').value;
104 nacl_module.postMessage(makeCall('fwrite', filehandle, data));
105 }
106
107 function fwrite_result(filehandle, bytes_written) {
108 var filename = filehandle_map[filehandle];
109 logMessage('Wrote ' + bytes_written + ' bytes to file ' + filename + '.');
110 }
111
112 function fseek(e) {
113 var filehandle = document.getElementById('fseekHandle').value;
114 var offset = document.getElementById('fseekOffset').value;
115 var whence = document.getElementById('fseekWhence').value;
116 nacl_module.postMessage(makeCall('fseek', filehandle, offset, whence));
117 }
118
119 /**
120 * Return true when |s| starts with the string |prefix|.
121 *
122 * @param {string} s The string to search.
123 * @param {string} prefix The prefix to search for in |s|.
124 */
125 function startsWith(s, prefix) {
126 // indexOf would search the entire string, lastIndexOf(p, 0) only checks at
127 // the first index. See: http://stackoverflow.com/a/4579228
128 return s.lastIndexOf(prefix, 0) === 0;
129 }
130
131 function logMessage(msg) {
132 var logEl = document.getElementById('log');
133 logEl.innerHTML += msg + '<br>';
134 }
135
136 function makeCall(func) {
137 var message = func;
138 for (var i = 1; i < arguments.length; ++i) {
139 message += '\1' + arguments[i];
140 }
141
142 return message;
143 }
144
145 // Called by the common.js module.
146 function handleMessage(message_event) {
147 var msg = message_event.data;
148 if (startsWith(msg, 'Error:')) {
149 logMessage(msg);
150 } else {
151 // Result from a function call.
152 var params = msg.split('\1');
153 var func_name = params[0];
154 var func_result_name = func_name + '_result';
155 var result_func = window[func_result_name];
156
157 if (!result_func) {
158 logMessage('Error: Bad message received from NaCl module.');
159 return;
160 }
161
162 result_func.apply(null, params.slice(1));
163 }
164 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698