| OLD | NEW |
| 1 /** | 1 /** |
| 2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * See http://dev.w3.org/2011/webrtc/editor/getusermedia.html for more | 8 * See http://dev.w3.org/2011/webrtc/editor/getusermedia.html for more |
| 9 * information on getUserMedia. | 9 * information on getUserMedia. |
| 10 */ | 10 */ |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 return document.getElementById(id); | 38 return document.getElementById(id); |
| 39 }; | 39 }; |
| 40 | 40 |
| 41 /** | 41 /** |
| 42 * This function asks permission to use the webcam and mic from the browser. It | 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 | 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 | 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 | 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(). | 46 * a result. To see which callback was called, use obtainGetUserMediaResult(). |
| 47 * | 47 * |
| 48 * @param {string} constraints Defines what to be requested, with mandatory | 48 * @param {!object} constraints Defines what to be requested, with mandatory |
| 49 * and optional constraints defined. The contents of this parameter depends | 49 * and optional constraints defined. The contents of this parameter depends |
| 50 * on the WebRTC version. This should be JavaScript code that we eval(). | 50 * on the WebRTC version. |
| 51 */ | 51 */ |
| 52 function doGetUserMedia(constraints) { | 52 function doGetUserMedia(constraints) { |
| 53 if (!getUserMedia) { | 53 if (!getUserMedia) { |
| 54 returnToTest('Browser does not support WebRTC.'); | 54 returnToTest('Browser does not support WebRTC.'); |
| 55 return; | 55 return; |
| 56 } | 56 } |
| 57 try { | |
| 58 var evaluatedConstraints; | |
| 59 eval('evaluatedConstraints = ' + constraints); | |
| 60 } catch (exception) { | |
| 61 throw failTest('Not valid JavaScript expression: ' + constraints); | |
| 62 } | |
| 63 debug('Requesting doGetUserMedia: constraints: ' + constraints); | 57 debug('Requesting doGetUserMedia: constraints: ' + constraints); |
| 64 getUserMedia(evaluatedConstraints, | 58 getUserMedia(constraints, |
| 65 function(stream) { | 59 function(stream) { |
| 66 ensureGotAllExpectedStreams_(stream, constraints); | 60 ensureGotAllExpectedStreams_(stream, constraints); |
| 67 getUserMediaOkCallback_(stream); | 61 getUserMediaOkCallback_(stream); |
| 68 }, | 62 }, |
| 69 getUserMediaFailedCallback_); | 63 getUserMediaFailedCallback_); |
| 70 returnToTest('ok-requested'); | 64 returnToTest('ok-requested'); |
| 71 } | 65 } |
| 72 | 66 |
| 73 /** | 67 /** |
| 74 * Must be called after calling doGetUserMedia. | 68 * Must be called after calling doGetUserMedia. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 * @return {string} Returns the current local stream - |gLocalStream|. | 118 * @return {string} Returns the current local stream - |gLocalStream|. |
| 125 */ | 119 */ |
| 126 function getLocalStream() { | 120 function getLocalStream() { |
| 127 return gLocalStream; | 121 return gLocalStream; |
| 128 } | 122 } |
| 129 | 123 |
| 130 // Internals. | 124 // Internals. |
| 131 | 125 |
| 132 /** | 126 /** |
| 133 * @private | 127 * @private |
| 134 * @param {MediaStream} stream Media stream from getUserMedia. | 128 * @param {!MediaStream} stream Media stream from getUserMedia. |
| 135 * @param {String} constraints The constraints passed | 129 * @param {!object} constraints The getUserMedia constraints object. |
| 136 */ | 130 */ |
| 137 function ensureGotAllExpectedStreams_(stream, constraints) { | 131 function ensureGotAllExpectedStreams_(stream, constraints) { |
| 138 var requestedVideo = /video\s*:\s*true/i; | 132 if (constraints['video'] && stream.getVideoTracks().length == 0) { |
| 139 if (requestedVideo.test(constraints) && stream.getVideoTracks().length == 0) { | |
| 140 gRequestWebcamAndMicrophoneResult = 'failed-to-get-video'; | 133 gRequestWebcamAndMicrophoneResult = 'failed-to-get-video'; |
| 141 throw ('Requested video, but did not receive a video stream from ' + | 134 throw ('Requested video, but did not receive a video stream from ' + |
| 142 'getUserMedia. Perhaps the machine you are running on ' + | 135 'getUserMedia. Perhaps the machine you are running on ' + |
| 143 'does not have a webcam.'); | 136 'does not have a webcam.'); |
| 144 } | 137 } |
| 145 var requestedAudio = /audio\s*:\s*true/i; | 138 if (constraints['audio'] && stream.getAudioTracks().length == 0) { |
| 146 if (requestedAudio.test(constraints) && stream.getAudioTracks().length == 0) { | |
| 147 gRequestWebcamAndMicrophoneResult = 'failed-to-get-audio'; | 139 gRequestWebcamAndMicrophoneResult = 'failed-to-get-audio'; |
| 148 throw ('Requested audio, but did not receive an audio stream ' + | 140 throw ('Requested audio, but did not receive an audio stream ' + |
| 149 'from getUserMedia. Perhaps the machine you are running ' + | 141 'from getUserMedia. Perhaps the machine you are running ' + |
| 150 'on does not have audio devices.'); | 142 'on does not have audio devices.'); |
| 151 } | 143 } |
| 152 } | 144 } |
| 153 | 145 |
| 154 /** | 146 /** |
| 155 * @private | 147 * @private |
| 156 * @param {MediaStream} stream Media stream. | 148 * @param {MediaStream} stream Media stream. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 167 * @param {NavigatorUserMediaError} error Error containing details. | 159 * @param {NavigatorUserMediaError} error Error containing details. |
| 168 */ | 160 */ |
| 169 function getUserMediaFailedCallback_(error) { | 161 function getUserMediaFailedCallback_(error) { |
| 170 // Translate from the old error to the new. Remove when rename fully deployed. | 162 // Translate from the old error to the new. Remove when rename fully deployed. |
| 171 var errorName = error.name; | 163 var errorName = error.name; |
| 172 | 164 |
| 173 debug('GetUserMedia FAILED: Maybe the camera is in use by another process?'); | 165 debug('GetUserMedia FAILED: Maybe the camera is in use by another process?'); |
| 174 gRequestWebcamAndMicrophoneResult = 'failed-with-error-' + errorName; | 166 gRequestWebcamAndMicrophoneResult = 'failed-with-error-' + errorName; |
| 175 debug(gRequestWebcamAndMicrophoneResult); | 167 debug(gRequestWebcamAndMicrophoneResult); |
| 176 } | 168 } |
| OLD | NEW |