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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/examples/hello_nacl_mounts/example.js
diff --git a/native_client_sdk/src/examples/hello_nacl_mounts/example.js b/native_client_sdk/src/examples/hello_nacl_mounts/example.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d1206b9f2ebc6afd1b3300b31ecba93fba4894d
--- /dev/null
+++ b/native_client_sdk/src/examples/hello_nacl_mounts/example.js
@@ -0,0 +1,164 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Start up the paint timer when the NaCl module has loaded.
+function moduleDidLoad() {
+ common.hideModule();
+}
+
+// Called by the common.js module.
+function attachListeners() {
+ var radioEls = document.querySelectorAll('input[type="radio"]');
+ for (var i = 0; i < radioEls.length; ++i) {
+ radioEls[i].addEventListener('click', onRadioClicked);
+ }
+
+ document.getElementById('fopenExecute').addEventListener('click', fopen);
+ document.getElementById('fcloseExecute').addEventListener('click', fclose);
+ document.getElementById('freadExecute').addEventListener('click', fread);
+ document.getElementById('fwriteExecute').addEventListener('click', fwrite);
+ document.getElementById('fseekExecute').addEventListener('click', fseek);
+}
+
+function onRadioClicked(e) {
+ var divId = this.id.slice(5); // skip "radio"
+ var functionEls = document.querySelectorAll('.function');
+ for (var i = 0; i < functionEls.length; ++i) {
+ var visible = functionEls[i].id === divId;
+ if (functionEls[i].id === divId)
+ functionEls[i].removeAttribute('hidden');
+ else
+ functionEls[i].setAttribute('hidden');
+ }
+}
+
+function addFilenameToSelectElements(filehandle, filename) {
+ var text = '[' + filehandle + '] ' + filename;
+ var selectEls = document.querySelectorAll('select.file-handle');
+ for (var i = 0; i < selectEls.length; ++i) {
+ var optionEl = document.createElement('option');
+ optionEl.setAttribute('value', filehandle);
+ optionEl.appendChild(document.createTextNode(text));
+ selectEls[i].appendChild(optionEl);
+ }
+}
+
+function removeFilenameFromSelectElements(filehandle) {
+ var optionEls = document.querySelectorAll('select.file-handle > option');
+ for (var i = 0; i < optionEls.length; ++i) {
+ var optionEl = optionEls[i];
+ if (optionEl.value == filehandle) {
+ var selectEl = optionEl.parentNode;
+ selectEl.removeChild(optionEl);
+ }
+ }
+}
+
+var filehandle_map = {};
+
+function fopen(e) {
+ var filename = document.getElementById('fopenFilename').value;
+
+ var access = '';
+ if (document.getElementById('fopenWrite').checked)
+ access += 'w';
+ if (document.getElementById('fopenRead').checked)
+ access += 'r';
+
+ nacl_module.postMessage(makeCall('fopen', filename, access));
+}
+
+function fopen_result(filename, filehandle) {
+ filehandle_map[filehandle] = filename;
+
+ addFilenameToSelectElements(filehandle, filename)
+ logMessage('File ' + filename + ' opened successfully.');
+}
+
+function fclose(e) {
+ var filehandle = document.getElementById('fcloseHandle').value;
+ nacl_module.postMessage(makeCall('fclose', filehandle));
+}
+
+function fclose_result(filehandle) {
+ var filename = filehandle_map[filehandle];
+ removeFilenameFromSelectElements(filehandle, filename);
+ logMessage('File ' + filename + ' closed successfully.');
+}
+
+function fread(e) {
+ var filehandle = document.getElementById('freadHandle').value;
+ var numBytes = document.getElementById('freadBytes').value;
+ nacl_module.postMessage(makeCall('fread', filehandle, numBytes));
+}
+
+function fread_result(filehandle, data) {
+ var filename = filehandle_map[filehandle];
+ logMessage('Read "' + data + '" from file ' + filename + '.');
+}
+
+function fwrite(e) {
+ var filehandle = document.getElementById('fwriteHandle').value;
+ var data = document.getElementById('fwriteData').value;
+ nacl_module.postMessage(makeCall('fwrite', filehandle, data));
+}
+
+function fwrite_result(filehandle, bytes_written) {
+ var filename = filehandle_map[filehandle];
+ logMessage('Wrote ' + bytes_written + ' bytes to file ' + filename + '.');
+}
+
+function fseek(e) {
+ var filehandle = document.getElementById('fseekHandle').value;
+ var offset = document.getElementById('fseekOffset').value;
+ var whence = document.getElementById('fseekWhence').value;
+ nacl_module.postMessage(makeCall('fseek', filehandle, offset, whence));
+}
+
+/**
+ * Return true when |s| starts with the string |prefix|.
+ *
+ * @param {string} s The string to search.
+ * @param {string} prefix The prefix to search for in |s|.
+ */
+function startsWith(s, prefix) {
+ // indexOf would search the entire string, lastIndexOf(p, 0) only checks at
+ // the first index. See: http://stackoverflow.com/a/4579228
+ return s.lastIndexOf(prefix, 0) === 0;
+}
+
+function logMessage(msg) {
+ var logEl = document.getElementById('log');
+ logEl.innerHTML += msg + '<br>';
+}
+
+function makeCall(func) {
+ var message = func;
+ for (var i = 1; i < arguments.length; ++i) {
+ message += '\1' + arguments[i];
+ }
+
+ return message;
+}
+
+// Called by the common.js module.
+function handleMessage(message_event) {
+ var msg = message_event.data;
+ if (startsWith(msg, 'Error:')) {
+ logMessage(msg);
+ } else {
+ // Result from a function call.
+ var params = msg.split('\1');
+ var func_name = params[0];
+ var func_result_name = func_name + '_result';
+ var result_func = window[func_result_name];
+
+ if (!result_func) {
+ logMessage('Error: Bad message received from NaCl module.');
+ return;
+ }
+
+ result_func.apply(null, params.slice(1));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698