Do not announce robot account token before account ID is available
[chromium-blink-merge.git] / chrome / test / data / webrtc / getusermedia.js
blob4307e60609e84321f4f1174f87497e6a68cb243e
1 /**
2  * Copyright (c) 2012 The Chromium Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
7 /**
8  * See http://dev.w3.org/2011/webrtc/editor/getusermedia.html for more
9  * information on getUserMedia.
10  */
12 /**
13  * Keeps track of our local stream (e.g. what our local webcam is streaming).
14  * @private
15  */
16 var gLocalStream = null;
18 /**
19  * The MediaConstraints to use when connecting the local stream with a peer
20  * connection.
21  * @private
22  */
23 var gAddStreamConstraints = {};
25 /**
26  * String which keeps track of what happened when we requested user media.
27  * @private
28  */
29 var gRequestWebcamAndMicrophoneResult = 'not-called-yet';
31 /**
32  * Used as a shortcut. Moved to the top of the page due to race conditions.
33  * @param {string} id is a case-sensitive string representing the unique ID of
34  *     the element being sought.
35  * @return {string} id returns the element object specified as a parameter
36  */
37 $ = function(id) {
38   return document.getElementById(id);
41 /**
42  * This function asks permission to use the webcam and mic from the browser. It
43  * will return ok-requested to the test. This does not mean the request was
44  * approved though. The test will then have to click past the dialog that
45  * appears in Chrome, which will run either the OK or failed callback as a
46  * a result. To see which callback was called, use obtainGetUserMediaResult().
47  *
48  * @param {!object} constraints Defines what to be requested, with mandatory
49  *     and optional constraints defined. The contents of this parameter depends
50  *     on the WebRTC version.
51  */
52 function doGetUserMedia(constraints) {
53   if (!getUserMedia) {
54     returnToTest('Browser does not support WebRTC.');
55     return;
56   }
57   debug('Requesting doGetUserMedia: constraints: ' + constraints);
58   getUserMedia(constraints,
59                function(stream) {
60                  ensureGotAllExpectedStreams_(stream, constraints);
61                  getUserMediaOkCallback_(stream);
62                },
63                getUserMediaFailedCallback_);
64   returnToTest('ok-requested');
67 /**
68  * Must be called after calling doGetUserMedia.
69  * @return {string} Returns not-called-yet if we have not yet been called back
70  *     by WebRTC. Otherwise it returns either ok-got-stream or
71  *     failed-with-error-x (where x is the error code from the error
72  *     callback) depending on which callback got called by WebRTC.
73  */
74 function obtainGetUserMediaResult() {
75   returnToTest(gRequestWebcamAndMicrophoneResult);
76   return gRequestWebcamAndMicrophoneResult;
79 /**
80  * Stops all tracks of the last acquired local stream.
81  */
82 function stopLocalStream() {
83   if (gLocalStream == null)
84     throw failTest('Tried to stop local stream, ' +
85                    'but media access is not granted.');
87   gLocalStream.getVideoTracks().forEach(function(track) {
88     track.stop();
89   });
90   gLocalStream.getAudioTracks().forEach(function(track) {
91     track.stop();
92   });
93   gLocalStream = null;
94   gRequestWebcamAndMicrophoneResult = 'not-called-yet';
95   returnToTest('ok-stopped');
98 // Functions callable from other JavaScript modules.
101  * Adds the current local media stream to a peer connection.
102  * @param {RTCPeerConnection} peerConnection
103  */
104 function addLocalStreamToPeerConnection(peerConnection) {
105   if (gLocalStream == null)
106     throw failTest('Tried to add local stream to peer connection, ' +
107                    'but there is no stream yet.');
108   try {
109     peerConnection.addStream(gLocalStream, gAddStreamConstraints);
110   } catch (exception) {
111     throw failTest('Failed to add stream with constraints ' +
112                    gAddStreamConstraints + ': ' + exception);
113   }
114   debug('Added local stream.');
118  * @return {string} Returns the current local stream - |gLocalStream|.
119  */
120 function getLocalStream() {
121   return gLocalStream;
124 // Internals.
127  * @private
128  * @param {!MediaStream} stream Media stream from getUserMedia.
129  * @param {!object} constraints The getUserMedia constraints object.
130  */
131 function ensureGotAllExpectedStreams_(stream, constraints) {
132   if (constraints['video'] && stream.getVideoTracks().length == 0) {
133     gRequestWebcamAndMicrophoneResult = 'failed-to-get-video';
134     throw ('Requested video, but did not receive a video stream from ' +
135            'getUserMedia. Perhaps the machine you are running on ' +
136            'does not have a webcam.');
137   }
138   if (constraints['audio'] && stream.getAudioTracks().length == 0) {
139     gRequestWebcamAndMicrophoneResult = 'failed-to-get-audio';
140     throw ('Requested audio, but did not receive an audio stream ' +
141            'from getUserMedia. Perhaps the machine you are running ' +
142            'on does not have audio devices.');
143   }
147  * @private
148  * @param {MediaStream} stream Media stream.
149  */
150 function getUserMediaOkCallback_(stream) {
151   gLocalStream = stream;
152   gRequestWebcamAndMicrophoneResult = 'ok-got-stream';
154   attachMediaStream($('local-view'), stream);
158  * @private
159  * @param {NavigatorUserMediaError} error Error containing details.
160  */
161 function getUserMediaFailedCallback_(error) {
162   // Translate from the old error to the new. Remove when rename fully deployed.
163   var errorName = error.name;
165   debug('GetUserMedia FAILED: Maybe the camera is in use by another process?');
166   gRequestWebcamAndMicrophoneResult = 'failed-with-error-' + errorName;
167   debug(gRequestWebcamAndMicrophoneResult);