vineetbhargav86
9 years ago
1 changed files with 155 additions and 0 deletions
@ -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.'); |
|||
} |
|||
} |
Loading…
Reference in new issue