From 8f7d1bebe94c73c60c3a717da7de21975da0bbbb Mon Sep 17 00:00:00 2001 From: vineetbhargav86 Date: Tue, 26 Jan 2016 11:55:09 +0545 Subject: [PATCH] Updated peer mgt tab and native iguana exe --- iguana/example.js | 155 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100755 iguana/example.js diff --git a/iguana/example.js b/iguana/example.js new file mode 100755 index 000000000..9622a11e5 --- /dev/null +++ b/iguana/example.js @@ -0,0 +1,155 @@ +// 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. + +function moduleDidLoad() { + common.hideModule(); + } + +function $(id) { + return document.getElementById(id); +} + +// Called by the common.js module. +function domContentLoaded(name, tc, config, width, height) { + navigator.webkitPersistentStorage.requestQuota(10000000000, + function(bytes) { + common.updateStatus( + 'Allocated ' + bytes + ' bytes of persistent storage. Running the first time will take 17 seconds to load'); + common.attachDefaultListeners(); + common.createNaClModule(name, tc, config, width, height); + }, + function(e) { alert('Failed to allocate space') }); +} + +// 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); + } + + // Wire up the 'click' event for each function's button. + var functionEls = document.querySelectorAll('.function'); + for (var i = 0; i < functionEls.length; ++i) { + var functionEl = functionEls[i]; + var id = functionEl.getAttribute('id'); + var buttonEl = functionEl.querySelector('button'); + + // The function name matches the element id. + var func = window[id]; + buttonEl.addEventListener('click', func); + } + //$('pipe_input_box').addEventListener('keypress', onPipeInput) + //$('pipe_output').disabled = true; + //$('pipe_name').addEventListener('change', function() { $('pipe_output').value = ''; }) +} + +// Called with keypress events on the pipe input box +function onPipeInput(e) { + // Create an arraybuffer containing the 16-bit char code + // from the keypress event. + var buffer = new ArrayBuffer(1*2); + var bufferView = new Uint16Array(buffer); + bufferView[0] = e.charCode; + + // Pass the buffer in a dictionary over the NaCl module + var pipeSelect = $('pipe_name'); + var pipeName = pipeSelect[pipeSelect.selectedIndex].value; + var message = { + pipe: pipeName, + operation: 'write', + payload: buffer, + }; + nacl_module.postMessage(message); + e.preventDefault(); + return false; +} + +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 addNameToSelectElements(cssClass, handle, name) { + var text = '[' + handle + '] ' + name; + var selectEls = document.querySelectorAll(cssClass); + for (var i = 0; i < selectEls.length; ++i) { + var optionEl = document.createElement('option'); + optionEl.setAttribute('value', handle); + optionEl.appendChild(document.createTextNode(text)); + selectEls[i].appendChild(optionEl); + } +} + +function removeNameFromSelectElements(cssClass, handle) { + var optionEls = document.querySelectorAll(cssClass + ' > option'); + for (var i = 0; i < optionEls.length; ++i) { + var optionEl = optionEls[i]; + if (optionEl.value == handle) { + var selectEl = optionEl.parentNode; + selectEl.removeChild(optionEl); + } + } +} + +var funcToCallback = {}; + +function postCall(func) { + var callback = arguments[arguments.length - 1]; + funcToCallback[func] = callback; + + nacl_module.postMessage({ + cmd: func, + args: Array.prototype.slice.call(arguments, 1, -1) + }); +} + +function ArrayBufferToString(buf) { return String.fromCharCode.apply(null, new Uint16Array(buf)); } + +// Called by the common.js module. +function handleMessage(message_event) { + var data = message_event.data; + if ((typeof(data) === 'string' || data instanceof String)) { + common.logMessage(data); + } + else if (data instanceof Object) + { + var pipeName = data['pipe'] + if ( pipeName !== undefined ) + { + // Message for JavaScript I/O pipe + var operation = data['operation']; + if (operation == 'write') { + $('pipe_output').value += ArrayBufferToString(data['payload']); + } else if (operation == 'ack') { + common.logMessage(pipeName + ": ack:" + data['payload']); + } else { + common.logMessage('Got unexpected pipe operation: ' + operation); + } + } + else + { + // Result from a function call. + var params = data.args; + var funcName = data.cmd; + var callback = funcToCallback[funcName]; + if (!callback) + { + common.logMessage('Error: Bad message ' + funcName + ' received from NaCl module.'); + return; + } + delete funcToCallback[funcName]; + callback.apply(null, params); + } + } else { + common.logMessage('Error: Unknow message `' + data + '` received from NaCl module.'); + } +}