| <!DOCTYPE html> | 
 | <html> | 
 |   <!-- | 
 |   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. | 
 |   --> | 
 | <head> | 
 |   <title>Audio Input Example</title> | 
 |   <script type="text/javascript"> | 
 |     var monitor_device_array = []; | 
 |     var enumerate_device_array = []; | 
 |     var monitor_notification_count = 0; | 
 |  | 
 |     function HandleMessage(message_event) { | 
 |       if (message_event.data) { | 
 |         var status = document.getElementById('status'); | 
 |         if (message_event.data == 'EnumerationFailed') { | 
 |           status.innerText = 'Device enumeration failed!'; | 
 |         } else if (message_event.data == 'MonitorDeviceChangeFailed') { | 
 |           status.innerText = 'Monitor device change failed!'; | 
 |         } else if (message_event.data == 'OpenFailed') { | 
 |           status.innerText = 'Open device failed!'; | 
 |         } else if (message_event.data == 'StartFailed') { | 
 |           status.innerText = 'Start capturing failed!'; | 
 |         } else if (message_event.data == 'StopFailed') { | 
 |           status.innerText = 'Stop capturing failed!'; | 
 |         } else { | 
 |           AddDevices(message_event.data); | 
 |         } | 
 |       } | 
 |     } | 
 |  | 
 |     function AddDevices(command) { | 
 |       var serialized_names = ''; | 
 |       var is_monitor = false; | 
 |       if (command.search('Monitor:') == 0) { | 
 |         serialized_names = command.substr(8); | 
 |         is_monitor = true; | 
 |         monitor_notification_count++; | 
 |         var counter = document.getElementById('notification_counter'); | 
 |         counter.innerText = monitor_notification_count; | 
 |       } else if (command.search('Enumerate:') == 0) { | 
 |         serialized_names = command.substr(10); | 
 |       } else { | 
 |         status.innerText = 'Unrecognized command!'; | 
 |         return; | 
 |       } | 
 |  | 
 |       var storage = serialized_names.length != 0 ? | 
 |                     serialized_names.split('#__#') : []; | 
 |       if (is_monitor) | 
 |         monitor_device_array = storage; | 
 |       else | 
 |         enumerate_device_array = storage; | 
 |  | 
 |       var list = document.getElementById( | 
 |           is_monitor ? 'monitor_list' : 'enumerate_list'); | 
 |       while (list.firstChild) | 
 |         list.removeChild(list.firstChild); | 
 |  | 
 |       for (var i = 0; i < storage.length; ++i) { | 
 |         AppendDevice( | 
 |             list, storage[i], | 
 |             'javascript:UseDesignatedDevice(' + is_monitor + ',' + i + ');'); | 
 |       } | 
 |     } | 
 |  | 
 |     function AppendDevice(list, text, href) { | 
 |       var list_item = document.createElement('li'); | 
 |       var link = document.createElement('a'); | 
 |       link.href = href; | 
 |       link.innerText = text; | 
 |       list_item.appendChild(link); | 
 |       list.appendChild(list_item); | 
 |     } | 
 |  | 
 |     function UseDesignatedDevice(is_monitor, index) { | 
 |       if (is_monitor) | 
 |         UseDevice(monitor_device_array[index], 'Monitor:' + index); | 
 |       else | 
 |         UseDevice(enumerate_device_array[index], 'Enumerate:' + index); | 
 |     } | 
 |  | 
 |     function UseDefaultDevice() { | 
 |       UseDevice('Default', 'UseDefault'); | 
 |     } | 
 |  | 
 |     function UseDevice(display_text, command) { | 
 |       var in_use_device = document.getElementById('in_use_device'); | 
 |       in_use_device.innerText = display_text; | 
 |       var plugin = document.getElementById('plugin'); | 
 |       plugin.postMessage(command); | 
 |     } | 
 |  | 
 |     function Stop() { | 
 |       var plugin = document.getElementById('plugin'); | 
 |       plugin.postMessage('Stop'); | 
 |     } | 
 |  | 
 |     function Start() { | 
 |       var plugin = document.getElementById('plugin'); | 
 |       plugin.postMessage('Start'); | 
 |     } | 
 |  | 
 |     function Initialize() { | 
 |       var plugin = document.getElementById('plugin'); | 
 |       plugin.addEventListener('message', HandleMessage, false) | 
 |       plugin.postMessage('PageInitialized'); | 
 |     } | 
 |  | 
 |     document.addEventListener('DOMContentLoaded', Initialize, false); | 
 |   </script> | 
 | </head> | 
 |  | 
 | <body> | 
 |   <embed id="plugin" type="application/x-ppapi-example-audio-input" | 
 |       width="800" height="400"/> | 
 |   <div style="margin-bottom:10px">In-use device: | 
 |     <span id="in_use_device" style="font-weight:bold">None</span> | 
 |   </div> | 
 |   <div id="available_devices"> | 
 |     Available device(s), choose one to open: | 
 |     <ul> | 
 |       <li><a href="javascript:UseDefaultDevice();"> | 
 |           Default - use NULL device ref</a></li> | 
 |     </ul> | 
 |     <div> | 
 |       <ul>List retrieved by MonitorDeviceChange(), will change when | 
 |           pluging/unpluging devices: (Notifications received: | 
 |           <span style="font-weight:bold" id="notification_counter">0</span> | 
 |           )</ul> | 
 |       <ul id="monitor_list"/> | 
 |     </div> | 
 |     <div> | 
 |       <ul>List retrieved by EnumerateDevices(), never updated after the page is | 
 |           initialized:</ul> | 
 |       <ul id="enumerate_list"/> | 
 |     </div> | 
 |   </div> | 
 |   <div id="control_panel"> | 
 |     <a href="javascript:Stop();">Stop</a> | 
 |     <a href="javascript:Start();">Start</a> (known issue: crbug.com/161058) | 
 |   </div> | 
 |   <div id="status"></div> | 
 | </body> | 
 | </html> |