| Index: chrome/test/data/webrtc/jsep01_call.js
|
| diff --git a/chrome/test/data/webrtc/jsep01_call.js b/chrome/test/data/webrtc/jsep01_call.js
|
| index f21be1d3b4456d7614b1a6fb81ea65de1f0841f2..89370653f5378602895a568d388a8c8980e9ae09 100644
|
| --- a/chrome/test/data/webrtc/jsep01_call.js
|
| +++ b/chrome/test/data/webrtc/jsep01_call.js
|
| @@ -4,188 +4,66 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -/** @private */
|
| -var gTransformOutgoingSdp = function(sdp) { return sdp; };
|
| -
|
| -/** @private */
|
| -var gCreateAnswerConstraints = {};
|
| -
|
| -/** @private */
|
| -var gCreateOfferConstraints = {};
|
| -
|
| -/** @private */
|
| -var gDataChannel = null;
|
| -
|
| -/** @private */
|
| -var gDataStatusCallback = function(status) {};
|
| -
|
| -/** @private */
|
| -var gDataCallback = function(data) {};
|
| -
|
| -/** @private */
|
| -var gDtmfSender = null;
|
| -
|
| -/** @private */
|
| -var gDtmfOnToneChange = function(tone) {};
|
| +// TODO(phoglund): merge into message_handling.js.
|
|
|
| /** @private */
|
| var gHasSeenCryptoInSdp = 'no-crypto-seen';
|
|
|
| -/**
|
| - * Sets the transform to apply just before setting the local description and
|
| - * sending to the peer.
|
| - * @param {function} transformFunction A function which takes one SDP string as
|
| - * argument and returns the modified SDP string.
|
| - */
|
| -function setOutgoingSdpTransform(transformFunction) {
|
| - gTransformOutgoingSdp = transformFunction;
|
| -}
|
| -
|
| -/**
|
| - * Sets the MediaConstraints to be used for PeerConnection createAnswer() calls.
|
| - * @param {string} mediaConstraints The constraints, as defined in the
|
| - * PeerConnection JS API spec.
|
| - */
|
| -function setCreateAnswerConstraints(mediaConstraints) {
|
| - gCreateAnswerConstraints = mediaConstraints;
|
| -}
|
| -
|
| -/**
|
| - * Sets the MediaConstraints to be used for PeerConnection createOffer() calls.
|
| - * @param {string} mediaConstraints The constraints, as defined in the
|
| - * PeerConnection JS API spec.
|
| - */
|
| -function setCreateOfferConstraints(mediaConstraints) {
|
| - gCreateOfferConstraints = mediaConstraints;
|
| -}
|
| -
|
| -/**
|
| - * Sets the callback functions that will receive DataChannel readyState updates
|
| - * and received data.
|
| - * @param {function} status_callback The function that will receive a string
|
| - * with
|
| - * the current DataChannel readyState.
|
| - * @param {function} data_callback The function that will a string with data
|
| - * received from the remote peer.
|
| - */
|
| -function setDataCallbacks(status_callback, data_callback) {
|
| - gDataStatusCallback = status_callback;
|
| - gDataCallback = data_callback;
|
| -}
|
| -
|
| -/**
|
| - * Sends data on an active DataChannel.
|
| - * @param {string} data The string that will be sent to the remote peer.
|
| - */
|
| -function sendDataOnChannel(data) {
|
| - if (gDataChannel == null)
|
| - throw failTest('Trying to send data, but there is no DataChannel.');
|
| - gDataChannel.send(data);
|
| -}
|
| -
|
| -/**
|
| - * Sets the callback function that will receive DTMF sender ontonechange events.
|
| - * @param {function} ontonechange The function that will receive a string with
|
| - * the tone that has just begun playout.
|
| - */
|
| -function setOnToneChange(ontonechange) {
|
| - gDtmfOnToneChange = ontonechange;
|
| -}
|
| -
|
| -/**
|
| - * Inserts DTMF tones on an active DTMF sender.
|
| - * @param {string} data The string that will be sent to the remote peer.
|
| - */
|
| -function insertDtmf(tones, duration, interToneGap) {
|
| - if (gDtmfSender == null)
|
| - throw failTest('Trying to send DTMF, but there is no DTMF sender.');
|
| - gDtmfSender.insertDTMF(tones, duration, interToneGap);
|
| -}
|
| -
|
| // Public interface towards the other javascript files, such as
|
| // message_handling.js. The contract for these functions is described in
|
| // message_handling.js.
|
|
|
| -function handleMessage(peerConnection, message) {
|
| - var parsed_msg = JSON.parse(message);
|
| - if (parsed_msg.type) {
|
| - var session_description = new RTCSessionDescription(parsed_msg);
|
| - peerConnection.setRemoteDescription(
|
| - session_description,
|
| - function() { success_('setRemoteDescription'); },
|
| - function() { failure_('setRemoteDescription'); });
|
| - if (session_description.type == 'offer') {
|
| - debug('createAnswer with constraints: ' +
|
| - JSON.stringify(gCreateAnswerConstraints, null, ' '));
|
| - peerConnection.createAnswer(
|
| - setLocalAndSendMessage_,
|
| - function() { failure_('createAnswer'); },
|
| - gCreateAnswerConstraints);
|
| - }
|
| - return;
|
| - } else if (parsed_msg.candidate) {
|
| - var candidate = new RTCIceCandidate(parsed_msg);
|
| - peerConnection.addIceCandidate(candidate);
|
| - return;
|
| - }
|
| - throw failTest('unknown message received');
|
| +function receiveOffer(peerConnection, offer, constraints, callback) {
|
| + var sessionDescription = new RTCSessionDescription(offer);
|
| + peerConnection.setRemoteDescription(
|
| + sessionDescription,
|
| + function() { success_('setRemoteDescription'); },
|
| + function() { failure_('setRemoteDescription'); });
|
| +
|
| + peerConnection.createAnswer(
|
| + function(answer) {
|
| + success_('createAnswer');
|
| + setLocalDescription(peerConnection, answer);
|
| + callback(answer);
|
| + },
|
| + function() { failure_('createAnswer'); },
|
| + constraints);
|
| +}
|
| +
|
| +function receiveAnswer(peerConnection, answer, callback) {
|
| + var sessionDescription = new RTCSessionDescription(answer);
|
| + peerConnection.setRemoteDescription(
|
| + sessionDescription,
|
| + function() {
|
| + success_('setRemoteDescription');
|
| + callback();
|
| + },
|
| + function() { failure_('setRemoteDescription'); });
|
| }
|
|
|
| function createPeerConnection(stun_server, useRtpDataChannels) {
|
| servers = {iceServers: [{url: 'stun:' + stun_server}]};
|
| try {
|
| var constraints = { optional: [{ RtpDataChannels: useRtpDataChannels }]};
|
| - peerConnection = new webkitRTCPeerConnection(servers, constraints);
|
| + peerConnection = new RTCPeerConnection(servers, constraints);
|
| } catch (exception) {
|
| throw failTest('Failed to create peer connection: ' + exception);
|
| }
|
| peerConnection.onaddstream = addStreamCallback_;
|
| peerConnection.onremovestream = removeStreamCallback_;
|
| peerConnection.onicecandidate = iceCallback_;
|
| - peerConnection.ondatachannel = onCreateDataChannelCallback_;
|
| return peerConnection;
|
| }
|
|
|
| -function setupCall(peerConnection) {
|
| - debug('createOffer with constraints: ' +
|
| - JSON.stringify(gCreateOfferConstraints, null, ' '));
|
| +function createOffer(peerConnection, constraints, callback) {
|
| peerConnection.createOffer(
|
| - setLocalAndSendMessage_,
|
| + function(localDescription) {
|
| + success_('createOffer');
|
| + setLocalDescription(peerConnection, localDescription);
|
| + callback(localDescription);
|
| + },
|
| function() { failure_('createOffer'); },
|
| - gCreateOfferConstraints);
|
| -}
|
| -
|
| -function answerCall(peerConnection, message) {
|
| - handleMessage(peerConnection, message);
|
| -}
|
| -
|
| -function createDataChannel(peerConnection, label) {
|
| - if (gDataChannel != null && gDataChannel.readyState != 'closed') {
|
| - throw failTest('Creating DataChannel, but we already have one.');
|
| - }
|
| -
|
| - gDataChannel = peerConnection.createDataChannel(label, { reliable: false });
|
| - debug('DataChannel with label ' + gDataChannel.label + ' initiated locally.');
|
| - hookupDataChannelEvents();
|
| -}
|
| -
|
| -function closeDataChannel(peerConnection) {
|
| - if (gDataChannel == null)
|
| - throw failTest('Closing DataChannel, but none exists.');
|
| - debug('DataChannel with label ' + gDataChannel.label + ' is beeing closed.');
|
| - gDataChannel.close();
|
| -}
|
| -
|
| -function createDtmfSender(peerConnection) {
|
| - if (gDtmfSender != null)
|
| - throw failTest('Creating DTMF sender, but we already have one.');
|
| -
|
| - var localStream = getLocalStream();
|
| - if (localStream == null)
|
| - throw failTest('Creating DTMF sender but local stream is null.');
|
| - local_audio_track = localStream.getAudioTracks()[0];
|
| - gDtmfSender = peerConnection.createDTMFSender(local_audio_track);
|
| - gDtmfSender.ontonechange = gDtmfOnToneChange;
|
| + constraints);
|
| }
|
|
|
| function hasSeenCryptoInSdp() {
|
| @@ -206,21 +84,19 @@ function failure_(method, error) {
|
| /** @private */
|
| function iceCallback_(event) {
|
| if (event.candidate)
|
| - sendToPeer(gRemotePeerId, JSON.stringify(event.candidate));
|
| + sendIceCandidate(event.candidate);
|
| }
|
|
|
| /** @private */
|
| -function setLocalAndSendMessage_(session_description) {
|
| - session_description.sdp = gTransformOutgoingSdp(session_description.sdp);
|
| - if (session_description.sdp.search('a=crypto') != -1 ||
|
| - session_description.sdp.search('a=fingerprint') != -1)
|
| +function setLocalDescription(peerConnection, sessionDescription) {
|
| + if (sessionDescription.sdp.search('a=crypto') != -1 ||
|
| + sessionDescription.sdp.search('a=fingerprint') != -1)
|
| gHasSeenCryptoInSdp = 'crypto-seen';
|
| +
|
| peerConnection.setLocalDescription(
|
| - session_description,
|
| + sessionDescription,
|
| function() { success_('setLocalDescription'); },
|
| function() { failure_('setLocalDescription'); });
|
| - debug('Sending SDP message:\n' + session_description.sdp);
|
| - sendToPeer(gRemotePeerId, JSON.stringify(session_description));
|
| }
|
|
|
| /** @private */
|
| @@ -235,32 +111,3 @@ function removeStreamCallback_(event) {
|
| debug('Call ended.');
|
| document.getElementById('remote-view').src = '';
|
| }
|
| -
|
| -/** @private */
|
| -function onCreateDataChannelCallback_(event) {
|
| - if (gDataChannel != null && gDataChannel.readyState != 'closed') {
|
| - throw failTest('Received DataChannel, but we already have one.');
|
| - }
|
| -
|
| - gDataChannel = event.channel;
|
| - debug('DataChannel with label ' + gDataChannel.label +
|
| - ' initiated by remote peer.');
|
| - hookupDataChannelEvents();
|
| -}
|
| -
|
| -/** @private */
|
| -function hookupDataChannelEvents() {
|
| - gDataChannel.onmessage = gDataCallback;
|
| - gDataChannel.onopen = onDataChannelReadyStateChange_;
|
| - gDataChannel.onclose = onDataChannelReadyStateChange_;
|
| - // Trigger gDataStatusCallback so an application is notified
|
| - // about the created data channel.
|
| - onDataChannelReadyStateChange_();
|
| -}
|
| -
|
| -/** @private */
|
| -function onDataChannelReadyStateChange_() {
|
| - var readyState = gDataChannel.readyState;
|
| - debug('DataChannel state:' + readyState);
|
| - gDataStatusCallback(readyState);
|
| -}
|
|
|