| OLD | NEW |
| 1 /** | 1 /** |
| 2 * Copyright 2014 The Chromium Authors. All rights reserved. | 2 * Copyright 2014 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 * The one and only peer connection in this page. | 8 * The one and only peer connection in this page. |
| 9 * @private | 9 * @private |
| 10 */ | 10 */ |
| 11 var gPeerConnection = null; | 11 var gPeerConnection = null; |
| 12 | 12 |
| 13 /** | 13 /** |
| 14 * This stores ICE candidates generated on this side. | 14 * This stores ICE candidates generated on this side. |
| 15 * @private | 15 * @private |
| 16 */ | 16 */ |
| 17 var gIceCandidates = []; | 17 var gIceCandidates = []; |
| 18 | 18 |
| 19 /** | 19 /** |
| 20 * Keeps track of whether we have seen crypto information in the SDP. | 20 * Keeps track of whether we have seen crypto information in the SDP. |
| 21 * @private | 21 * @private |
| 22 */ | 22 */ |
| 23 var gHasSeenCryptoInSdp = 'no-crypto-seen'; | 23 var gHasSeenCryptoInSdp = 'no-crypto-seen'; |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * The default video codec that should be used. | 26 * The default audio codec that should be used when creating an offer. |
| 27 * @private |
| 28 */ |
| 29 var gDefaultAudioCodec = null; |
| 30 |
| 31 /** |
| 32 * The default video codec that should be used when creating an offer. |
| 27 * @private | 33 * @private |
| 28 */ | 34 */ |
| 29 var gDefaultVideoCodec = null; | 35 var gDefaultVideoCodec = null; |
| 30 | 36 |
| 31 /** | 37 /** |
| 32 * Flag to indicate if Opus Dtx should be enabled. | 38 * Flag to indicate if Opus Dtx should be enabled. |
| 33 * @private | 39 * @private |
| 34 */ | 40 */ |
| 35 var gOpusDtx = false; | 41 var gOpusDtx = false; |
| 36 | 42 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 | 87 |
| 82 /** | 88 /** |
| 83 * Sets the flag to force Opus Dtx to be used when creating an offer. | 89 * Sets the flag to force Opus Dtx to be used when creating an offer. |
| 84 */ | 90 */ |
| 85 function forceOpusDtx() { | 91 function forceOpusDtx() { |
| 86 gOpusDtx = true; | 92 gOpusDtx = true; |
| 87 returnToTest('ok-forced'); | 93 returnToTest('ok-forced'); |
| 88 } | 94 } |
| 89 | 95 |
| 90 /** | 96 /** |
| 91 * Sets the default video codec be used when creating an offer. | 97 * Sets the default audio codec to be used when creating an offer and returns |
| 98 * "ok" to test. |
| 99 * @param {string} audioCodec promotes the specified codec to be the default |
| 100 * audio codec, e.g. the first one in the list on the 'm=audio' SDP offer |
| 101 * line. |audioCodec| is the case-sensitive codec name, e.g. 'opus' or |
| 102 * 'ISAC'. |
| 103 */ |
| 104 function setDefaultAudioCodec(audioCodec) { |
| 105 gDefaultAudioCodec = audioCodec; |
| 106 returnToTest('ok'); |
| 107 } |
| 108 |
| 109 /** |
| 110 * Sets the default video codec to be used when creating an offer and returns |
| 111 * "ok" to test. |
| 92 * @param {string} videoCodec promotes the specified codec to be the default | 112 * @param {string} videoCodec promotes the specified codec to be the default |
| 93 * video codec, e.g. the first one in the list on the 'm=video' SDP offer | 113 * video codec, e.g. the first one in the list on the 'm=video' SDP offer |
| 94 * line. |videoCodec| is the case-sensitive codec name, e.g. 'VP8' or | 114 * line. |videoCodec| is the case-sensitive codec name, e.g. 'VP8' or |
| 95 * 'H264'. | 115 * 'H264'. |
| 96 */ | 116 */ |
| 97 function forceVideoCodec(videoCodec) { | 117 function setDefaultVideoCodec(videoCodec) { |
| 98 gDefaultVideoCodec = videoCodec; | 118 gDefaultVideoCodec = videoCodec; |
| 99 returnToTest('ok-forced'); | 119 returnToTest('ok'); |
| 100 } | 120 } |
| 101 | 121 |
| 102 /** | 122 /** |
| 103 * Creates a data channel with the specified label. | 123 * Creates a data channel with the specified label. |
| 104 * Returns 'ok-created' to test. | 124 * Returns 'ok-created' to test. |
| 105 */ | 125 */ |
| 106 function createDataChannel(label) { | 126 function createDataChannel(label) { |
| 107 peerConnection_().createDataChannel(label); | 127 peerConnection_().createDataChannel(label); |
| 108 returnToTest('ok-created'); | 128 returnToTest('ok-created'); |
| 109 } | 129 } |
| 110 | 130 |
| 111 /** | 131 /** |
| 112 * Asks this page to create a local offer. | 132 * Asks this page to create a local offer. |
| 113 * | 133 * |
| 114 * Returns a string on the format ok-(JSON encoded session description). | 134 * Returns a string on the format ok-(JSON encoded session description). |
| 115 * | 135 * |
| 116 * @param {!Object} constraints Any createOffer constraints. | 136 * @param {!Object} constraints Any createOffer constraints. |
| 117 */ | 137 */ |
| 118 function createLocalOffer(constraints) { | 138 function createLocalOffer(constraints) { |
| 119 peerConnection_().createOffer( | 139 peerConnection_().createOffer( |
| 120 function(localOffer) { | 140 function(localOffer) { |
| 121 success('createOffer'); | 141 success('createOffer'); |
| 122 | 142 |
| 123 setLocalDescription(peerConnection, localOffer); | 143 setLocalDescription(peerConnection, localOffer); |
| 144 if (gDefaultAudioCodec !== null) { |
| 145 localOffer.sdp = setSdpDefaultAudioCodec(localOffer.sdp, |
| 146 gDefaultAudioCodec); |
| 147 } |
| 124 if (gDefaultVideoCodec !== null) { | 148 if (gDefaultVideoCodec !== null) { |
| 125 localOffer.sdp = setSdpDefaultVideoCodec(localOffer.sdp, | 149 localOffer.sdp = setSdpDefaultVideoCodec(localOffer.sdp, |
| 126 gDefaultVideoCodec); | 150 gDefaultVideoCodec); |
| 127 } | 151 } |
| 128 if (gOpusDtx) { | 152 if (gOpusDtx) { |
| 129 localOffer.sdp = setOpusDtxEnabled(localOffer.sdp); | 153 localOffer.sdp = setOpusDtxEnabled(localOffer.sdp); |
| 130 } | 154 } |
| 131 returnToTest('ok-' + JSON.stringify(localOffer)); | 155 returnToTest('ok-' + JSON.stringify(localOffer)); |
| 132 }, | 156 }, |
| 133 function(error) { failure('createOffer', error); }, | 157 function(error) { failure('createOffer', error); }, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 163 if (gOpusDtx) { | 187 if (gOpusDtx) { |
| 164 answer.sdp = setOpusDtxEnabled(answer.sdp); | 188 answer.sdp = setOpusDtxEnabled(answer.sdp); |
| 165 } | 189 } |
| 166 returnToTest('ok-' + JSON.stringify(answer)); | 190 returnToTest('ok-' + JSON.stringify(answer)); |
| 167 }, | 191 }, |
| 168 function(error) { failure('createAnswer', error); }, | 192 function(error) { failure('createAnswer', error); }, |
| 169 constraints); | 193 constraints); |
| 170 } | 194 } |
| 171 | 195 |
| 172 /** | 196 /** |
| 173 * Verifies that the codec previously set using forceVideoCodec() is the | 197 * Verifies that the codec previously set using setDefault[Audio/Video]Codec() |
| 174 * default video codec, e.g. the first one in the list on the 'm=video' SDP | 198 * is the default audio/video codec, e.g. the first one in the list on the |
| 175 * answer line. If this is not the case, |failure| occurs. If no codec was | 199 * 'm=audio'/'m=video' SDP answer line. If this is not the case, |failure| |
| 176 * previously set using forceVideoCodec(), this function will return | 200 * occurs. If no codec was previously set using setDefault[Audio/Video]Codec(), |
| 177 * 'ok-no-default-set'. | 201 * this function will return 'ok-no-defaults-set'. |
| 178 * | 202 * |
| 179 * @param {!string} sessionDescJson A JSON-encoded session description. | 203 * @param {!string} sessionDescJson A JSON-encoded session description. |
| 180 */ | 204 */ |
| 181 function verifyDefaultVideoCodec(sessionDescJson) { | 205 function verifyDefaultCodecs(sessionDescJson) { |
| 182 var sessionDesc = parseJson_(sessionDescJson); | 206 let sessionDesc = parseJson_(sessionDescJson); |
| 183 if (gDefaultVideoCodec === null) { | 207 if (!sessionDesc.type) { |
| 184 returnToTest('ok-no-default-set'); | 208 failure('verifyDefaultCodecs', |
| 209 'Invalid session description: ' + sessionDescJson); |
| 210 } |
| 211 if (gDefaultAudioCodec !== null && gDefaultVideoCodec !== null) { |
| 212 returnToTest('ok-no-defaults-set'); |
| 185 return; | 213 return; |
| 186 } | 214 } |
| 187 if (!sessionDesc.type) { | 215 if (gDefaultAudioCodec !== null) { |
| 188 failure('verifyDefaultVideoCodec', | 216 let defaultAudioCodec = getSdpDefaultAudioCodec(sessionDesc.sdp); |
| 189 'Invalid session description: ' + sessionDescJson); | 217 if (defaultAudioCodec === null) { |
| 218 failure('verifyDefaultCodecs', |
| 219 'Could not determine default audio codec.'); |
| 220 } |
| 221 if (gDefaultAudioCodec !== defaultAudioCodec) { |
| 222 failure('verifyDefaultCodecs', |
| 223 'Expected default audio codec ' + gDefaultAudioCodec + |
| 224 ', got ' + defaultAudioCodec + '.'); |
| 225 } |
| 190 } | 226 } |
| 191 var defaultVideoCodec = getSdpDefaultVideoCodec(sessionDesc.sdp); | 227 if (gDefaultVideoCodec !== null) { |
| 192 if (defaultVideoCodec === null) { | 228 let defaultVideoCodec = getSdpDefaultVideoCodec(sessionDesc.sdp); |
| 193 failure('verifyDefaultVideoCodec', | 229 if (defaultVideoCodec === null) { |
| 194 'Could not determine default video codec.'); | 230 failure('verifyDefaultCodecs', |
| 195 } | 231 'Could not determine default video codec.'); |
| 196 if (gDefaultVideoCodec !== defaultVideoCodec) { | 232 } |
| 197 failure('verifyDefaultVideoCodec', | 233 if (gDefaultVideoCodec !== defaultVideoCodec) { |
| 198 'Expected default video codec ' + gDefaultVideoCodec + | 234 failure('verifyDefaultCodecs', |
| 199 ', got ' + defaultVideoCodec + '.'); | 235 'Expected default video codec ' + gDefaultVideoCodec + |
| 236 ', got ' + defaultVideoCodec + '.'); |
| 237 } |
| 200 } | 238 } |
| 201 returnToTest('ok-verified'); | 239 returnToTest('ok-verified'); |
| 202 } | 240 } |
| 203 | 241 |
| 204 /** | 242 /** |
| 205 * Asks this page to accept an answer generated by the peer in response to a | 243 * Asks this page to accept an answer generated by the peer in response to a |
| 206 * previous offer by this page | 244 * previous offer by this page |
| 207 * | 245 * |
| 208 * Returns a string ok-accepted-answer on success. | 246 * Returns a string ok-accepted-answer on success. |
| 209 * | 247 * |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 function parseJson_(json) { | 460 function parseJson_(json) { |
| 423 // Escape since the \r\n in the SDP tend to get unescaped. | 461 // Escape since the \r\n in the SDP tend to get unescaped. |
| 424 jsonWithEscapedLineBreaks = json.replace(/\r\n/g, '\\r\\n'); | 462 jsonWithEscapedLineBreaks = json.replace(/\r\n/g, '\\r\\n'); |
| 425 try { | 463 try { |
| 426 return JSON.parse(jsonWithEscapedLineBreaks); | 464 return JSON.parse(jsonWithEscapedLineBreaks); |
| 427 } catch (exception) { | 465 } catch (exception) { |
| 428 failTest('Failed to parse JSON: ' + jsonWithEscapedLineBreaks + ', got ' + | 466 failTest('Failed to parse JSON: ' + jsonWithEscapedLineBreaks + ', got ' + |
| 429 exception); | 467 exception); |
| 430 } | 468 } |
| 431 } | 469 } |
| OLD | NEW |