Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4348)

Unified Diff: chrome/common/extensions/docs/examples/api/displaySource/tabCast/background.js

Issue 1812813002: [chrome.displaySource] Add example extension (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes according to the review Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+}

Powered by Google App Engine
This is Rietveld 408576698