Index: chrome/common/extensions/docs/examples/api/displaySource/tabCast/background.js |
diff --git a/chrome/common/extensions/docs/examples/api/displaySource/tabCast/background.js b/chrome/common/extensions/docs/examples/api/displaySource/tabCast/background.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..830f27363419ab56d161a7e79397b88804e33b67 |
--- /dev/null |
+++ b/chrome/common/extensions/docs/examples/api/displaySource/tabCast/background.js |
@@ -0,0 +1,110 @@ |
+// 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. |
+ |
+var g_sessionInfo = {}; |
+ |
+/** |
+ * When extension icon clicked, get device list |
+ * Then return the list to popup page |
+ */ |
+chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { |
+ if (message.browserActionClicked) { |
+ getDeviceList(function(deviceList) { |
+ sendResponse({ returnDeviceList: deviceList }); |
+ }); |
+ } |
+ return true; |
+}); |
+ |
+function getDeviceList(callback) { |
+ chrome.displaySource.getAvailableSinks(callback); |
+} |
+ |
+chrome.displaySource.onSessionTerminated.addListener(function(terminatedSink) { |
+ chrome.runtime.sendMessage({ sessionTerminated: true, |
+ currentSinkId: terminatedSink }); |
+ |
+ if (g_sessionInfo.stream) { |
+ g_sessionInfo.stream.getTracks().forEach(function (track) { |
+ track.stop(); }); |
+ delete g_sessionInfo.stream; |
+ } |
+ delete g_sessionInfo.sinkId; |
+}); |
+ |
+chrome.displaySource.onSinksUpdated.addListener(function(updatedSinks) { |
+ console.log('Sinks updated'); |
+ chrome.runtime.sendMessage({ sinksUpdated: true, |
+ currentSinkId: g_sessionInfo.sinkId, |
+ sinksList: updatedSinks}); |
+}); |
+ |
+function start(sinkId) { |
+ // If no session, proceed. |
+ if (!g_sessionInfo.sinkId) { |
+ g_sessionInfo.sinkId = parseInt(sinkId); |
+ captureTabAndStartSession(g_sessionInfo.sinkId); |
+ } |
+} |
+ |
+function captureTabAndStartSession(sink_id) { |
+ chrome.tabs.getCurrent(function(tab) { |
+ var video_constraints = { |
+ mandatory: { |
+ chromeMediaSource: 'tab', |
+ minWidth: 1920, |
+ minHeight: 1080, |
+ maxWidth: 1920, |
+ maxHeight: 1080, |
+ minFrameRate: 60, |
+ maxFrameRate: 60 |
+ } |
+ }; |
+ |
+ var constraints = { |
+ audio: true, |
+ video: true, |
+ videoConstraints: video_constraints |
+ }; |
+ |
+ function onStream(stream) { |
+ g_sessionInfo.stream = stream; |
+ var session_info = { |
+ sinkId: sink_id, |
+ videoTrack: g_sessionInfo.stream.getVideoTracks()[0], |
+ audioTrack: g_sessionInfo.stream.getAudioTracks()[0] |
+ }; |
+ |
+ function onStarted() { |
+ if (chrome.runtime.error) { |
+ console.log('The Session to sink ' + g_sessionInfo.sinkId |
+ + 'could not start, error: ' |
+ + chrome.runtime.lastError.message); |
+ } else { |
+ console.log('The Session to sink ' + g_sessionInfo.sinkId |
+ + ' has started.'); |
+ } |
+ } |
+ console.log('Starting session to sink: ' + sink_id); |
+ chrome.displaySource.startSession(session_info, onStarted); |
+ } |
+ |
+ chrome.tabCapture.capture(constraints, onStream); |
+ }); |
+} |
+ |
+function stop() { |
+ function onTerminated() { |
+ if (chrome.runtime.lastError) { |
+ console.log('The Session to sink ' + g_sessionInfo.sinkId |
+ + 'could not terminate, error: ' |
+ + chrome.runtime.lastError.message); |
+ } else { |
+ console.log('The Session to sink ' + g_sessionInfo.sinkId |
+ + ' has terminated.'); |
+ } |
+ } |
+ console.log('Terminating session to sink: ' + g_sessionInfo.sinkId); |
+ chrome.displaySource.terminateSession(g_sessionInfo.sinkId, onTerminated); |
+} |