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

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

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

Powered by Google App Engine
This is Rietveld 408576698