Chromium Code Reviews| Index: chrome/common/extensions/docs/examples/api/displaySource/tabCast/main.js |
| diff --git a/chrome/common/extensions/docs/examples/api/displaySource/tabCast/main.js b/chrome/common/extensions/docs/examples/api/displaySource/tabCast/main.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b6eae381399315c4c5b3f96ba7748a4f3e3f03d4 |
| --- /dev/null |
| +++ b/chrome/common/extensions/docs/examples/api/displaySource/tabCast/main.js |
| @@ -0,0 +1,78 @@ |
| +// Copyright 2016 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. |
| + |
| +chrome.runtime.sendMessage({ browserActionClicked : true }, function(response) { |
| + var deviceList = response.returnDeviceList; |
| + var backgroundPage = chrome.extension.getBackgroundPage(); |
| + createButtonList(deviceList, backgroundPage); |
| +}); |
| + |
| +chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { |
| + var deviceButton = document.getElementById(message.currentSinkId); |
| + var backgroundPage = chrome.extension.getBackgroundPage(); |
| + |
| + if (message.sinksUpdated) { |
| + var sinks = message.sinksList; |
| + var changedSink = null; |
| + |
| + for (sink of sinks) { |
|
asargent_no_longer_on_chrome
2016/03/17 19:24:29
nit: please use 'let sink of sinks' to avoid leavi
|
| + if (sink.id == message.currentSinkId) { |
| + changedSink = sink; |
| + } |
| + } |
| + |
| + if (!changedSink) { |
| + console.error('Failed to find sink: ' + message.currentSinkId); |
| + return; |
| + } |
| + |
| + if (changedSink.state == 'Connecting') { |
| + changeButtonState(deviceButton, 'connecting', backgroundPage.Stop); |
| + } else if (changedSink.state == 'Connected') { |
| + changeButtonState(deviceButton, 'connected', backgroundPage.Stop); |
| + } |
| + } else if (message.sessionTerminated) { |
| + changeButtonState(deviceButton, 'disconnected', backgroundPage.Start); |
| + } |
| +}); |
| + |
| +function createButtonList(deviceList, backgroundPage) { |
| + var divElement = document.getElementById('deviceList'); |
| + if (!deviceList || !deviceList.length) { |
| + var errorMessage = document.createTextNode('No available ' |
| + + 'sink devices found'); |
| + divElement.appendChild(errorMessage); |
| + return; |
| + } |
| + |
| + deviceList.forEach(function(device) { |
| + if (!document.getElementById(device.id)) { |
| + var deviceButton = document.createElement('input'); |
| + |
| + deviceButton.type = 'button'; |
| + deviceButton.value = device.name; |
| + deviceButton.id = device.id; |
| + |
| + if (device.state == 'Disconnected') { |
| + changeButtonState(deviceButton, 'disconnected', backgroundPage.Start); |
| + } else if (device.state == 'Connecting') { |
| + changeButtonState(deviceButton, 'connecting', backgroundPage.Stop); |
| + } else if (device.state == 'Connected') { |
| + changeButtonState(deviceButton, 'connected', backgroundPage.Stop); |
| + } else { |
| + console.error('Unexpected sink state.'); |
| + return; |
| + } |
| + |
| + divElement.appendChild(deviceButton); |
| + } |
| + }); |
| +} |
| + |
| +function changeButtonState(button, styleName, method) { |
| + button.className = styleName; |
| + var sinkId = parseInt(button.id); |
| + button.onclick = function() { method(sinkId) }; |
| +} |
| + |