15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called by the common.js module. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function domContentLoaded(name, tc, config, width, height) { 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var listener = document.getElementById('listener'); 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('loadstart', moduleDidStartLoad, true); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('progress', moduleLoadProgress, true); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('error', moduleLoadError, true); 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('abort', moduleLoadAbort, true); 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('load', moduleDidLoad, true); 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('loadend', moduleDidEndLoad, true); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) listener.addEventListener('message', handleMessage, true); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) common.createNaClModule(name, tc, config, width, height); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handler that gets called when the NaCl module starts loading. This 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// event is always triggered when an <EMBED> tag has a MIME type of 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// application/x-nacl. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleDidStartLoad() { 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('loadstart'); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Progress event handler. |event| contains a couple of interesting 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// properties that are used in this example: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// total The size of the NaCl module in bytes. Note that this value 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is 0 until |lengthComputable| is true. In particular, this 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// value is 0 for the first 'progress' event. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// loaded The number of bytes loaded so far. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// lengthComputable A boolean indicating that the |total| field 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// represents a valid length. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// event The ProgressEvent that triggered this handler. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleLoadProgress(event) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var loadPercent = 0.0; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var loadPercentString; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (event.lengthComputable && event.total > 0) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadPercent = event.loaded / event.total * 100.0; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadPercentString = loadPercent + '%'; 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) common.logMessage('progress: ' + event.url + ' ' + loadPercentString + 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ' (' + event.loaded + ' of ' + event.total + ' bytes)'); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The total length is not yet known. 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) common.logMessage('progress: Computing...'); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handler that gets called if an error occurred while loading the NaCl 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// module. Note that the event does not carry any meaningful data about 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the error, you have to check lastError on the <EMBED> element to find 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// out what happened. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleLoadError() { 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('error: ' + common.naclModule.lastError); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handler that gets called if the NaCl module load is aborted. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleLoadAbort() { 60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('abort'); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When the NaCl module has loaded indicate success. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleDidLoad() { 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('load'); 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch common.updateStatus('LOADED'); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handler that gets called when the NaCl module loading has completed. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// You will always get one of these events, regardless of whether the NaCl 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// module loaded successfully or not. For example, if there is an error 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// during load, you will get an 'error' event and a 'loadend' event. Note 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that if the NaCl module loads successfully, you will get both a 'load' 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// event and a 'loadend' event. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleDidEndLoad() { 76a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('loadend'); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var lastError = event.target.lastError; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (lastError == undefined || lastError.length == 0) { 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) lastError = '<none>'; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('lastError: ' + lastError); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Handle a message coming from the NaCl module. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function handleMessage(message_event) { 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) common.logMessage('Received PostMessage: ' + message_event.data); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 88