1 <!DOCTYPE html> 2 <html> 3 <!-- 4 Copyright (c) 2012 The Chromium Authors. All rights reserved. 5 Use of this source code is governed by a BSD-style license that can be 6 found in the LICENSE file. 7 --> 8 <head> 9 <title>Audio Input Example</title> 10 <script type="text/javascript"> 11 var monitor_device_array = []; 12 var enumerate_device_array = []; 13 var monitor_notification_count = 0; 14 15 function HandleMessage(message_event) { 16 if (message_event.data) { 17 var status = document.getElementById('status'); 18 if (message_event.data == 'EnumerationFailed') { 19 status.innerText = 'Device enumeration failed!'; 20 } else if (message_event.data == 'MonitorDeviceChangeFailed') { 21 status.innerText = 'Monitor device change failed!'; 22 } else if (message_event.data == 'OpenFailed') { 23 status.innerText = 'Open device failed!'; 24 } else if (message_event.data == 'StartFailed') { 25 status.innerText = 'Start capturing failed!'; 26 } else if (message_event.data == 'StopFailed') { 27 status.innerText = 'Stop capturing failed!'; 28 } else { 29 AddDevices(message_event.data); 30 } 31 } 32 } 33 34 function AddDevices(command) { 35 var serialized_names = ''; 36 var is_monitor = false; 37 if (command.search('Monitor:') == 0) { 38 serialized_names = command.substr(8); 39 is_monitor = true; 40 monitor_notification_count++; 41 var counter = document.getElementById('notification_counter'); 42 counter.innerText = monitor_notification_count; 43 } else if (command.search('Enumerate:') == 0) { 44 serialized_names = command.substr(10); 45 } else { 46 status.innerText = 'Unrecognized command!'; 47 return; 48 } 49 50 var storage = serialized_names.length != 0 ? 51 serialized_names.split('#__#') : []; 52 if (is_monitor) 53 monitor_device_array = storage; 54 else 55 enumerate_device_array = storage; 56 57 var list = document.getElementById( 58 is_monitor ? 'monitor_list' : 'enumerate_list'); 59 while (list.firstChild) 60 list.removeChild(list.firstChild); 61 62 for (var i = 0; i < storage.length; ++i) { 63 AppendDevice( 64 list, storage[i], 65 'javascript:UseDesignatedDevice(' + is_monitor + ',' + i + ');'); 66 } 67 } 68 69 function AppendDevice(list, text, href) { 70 var list_item = document.createElement('li'); 71 var link = document.createElement('a'); 72 link.href = href; 73 link.innerText = text; 74 list_item.appendChild(link); 75 list.appendChild(list_item); 76 } 77 78 function UseDesignatedDevice(is_monitor, index) { 79 if (is_monitor) 80 UseDevice(monitor_device_array[index], 'Monitor:' + index); 81 else 82 UseDevice(enumerate_device_array[index], 'Enumerate:' + index); 83 } 84 85 function UseDefaultDevice() { 86 UseDevice('Default', 'UseDefault'); 87 } 88 89 function UseDevice(display_text, command) { 90 var in_use_device = document.getElementById('in_use_device'); 91 in_use_device.innerText = display_text; 92 var plugin = document.getElementById('plugin'); 93 plugin.postMessage(command); 94 } 95 96 function Stop() { 97 var plugin = document.getElementById('plugin'); 98 plugin.postMessage('Stop'); 99 } 100 101 function Start() { 102 var plugin = document.getElementById('plugin'); 103 plugin.postMessage('Start'); 104 } 105 106 function Initialize() { 107 var plugin = document.getElementById('plugin'); 108 plugin.addEventListener('message', HandleMessage, false) 109 plugin.postMessage('PageInitialized'); 110 } 111 112 document.addEventListener('DOMContentLoaded', Initialize, false); 113 </script> 114 </head> 115 116 <body> 117 <embed id="plugin" type="application/x-ppapi-example-audio-input" 118 width="800" height="400"/> 119 <div style="margin-bottom:10px">In-use device: 120 <span id="in_use_device" style="font-weight:bold">None</span> 121 </div> 122 <div id="available_devices"> 123 Available device(s), choose one to open: 124 <ul> 125 <li><a href="javascript:UseDefaultDevice();"> 126 Default - use NULL device ref</a></li> 127 </ul> 128 <div> 129 <ul>List retrieved by MonitorDeviceChange(), will change when 130 pluging/unpluging devices: (Notifications received: 131 <span style="font-weight:bold" id="notification_counter">0</span> 132 )</ul> 133 <ul id="monitor_list"/> 134 </div> 135 <div> 136 <ul>List retrieved by EnumerateDevices(), never updated after the page is 137 initialized:</ul> 138 <ul id="enumerate_list"/> 139 </div> 140 </div> 141 <div id="control_panel"> 142 <a href="javascript:Stop();">Stop</a> 143 <a href="javascript:Start();">Start</a> (known issue: crbug.com/161058) 144 </div> 145 <div id="status"></div> 146 </body> 147 </html> 148