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

Unified Diff: content/test/data/media/peerconnection-setConfiguration.html

Issue 2631433002: Rename RTCPeerConnection.updateIce to setConfiguration and make it work. (Closed)
Patch Set: Rebase. Created 3 years, 11 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: content/test/data/media/peerconnection-setConfiguration.html
diff --git a/content/test/data/media/peerconnection-setConfiguration.html b/content/test/data/media/peerconnection-setConfiguration.html
new file mode 100644
index 0000000000000000000000000000000000000000..9bf30de1e0555fc5129f80b3643eee7bbaf0c37a
--- /dev/null
+++ b/content/test/data/media/peerconnection-setConfiguration.html
@@ -0,0 +1,144 @@
+<html>
+<head>
+ <script type="text/javascript" src="webrtc_test_utilities.js"></script>
+ <script type="text/javascript" src="webrtc_test_common.js"></script>
+ <script type="text/javascript">
+ $ = function(id) {
+ return document.getElementById(id);
+ };
+
+ window.onerror = function(errorMsg, url, lineNumber, column, errorObj) {
+ failTest('Error: ' + errorMsg + '\nScript: ' + url +
+ '\nLine: ' + lineNumber + '\nColumn: ' + column +
+ '\nStackTrace: ' + errorObj);
+ }
+
+ var gPeerConnection = null;
+ var gCertificate = null;
+
+ // This test creates and sets three offers, calling setConfiguration in
+ // between each offer, expecting an ICE restart to be triggered by the next
+ // offer.
+ function testSetConfiguration() {
+ gPeerConnection = new RTCPeerConnection(
+ {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
+ rtcpMuxPolicy:'require', certificates:[]});
+ // Now test successful cases of setConfiguration. Changes should trigger an
+ // ICE restart in the next offer. To do this, first we need to trigger an
+ // initial ICE gathering phase and wait until it completes.
+ // TODO(deadbeef): Once onicegatheringstatechange is implemented, use that
+ // instead of a "null" candidate.
+ gPeerConnection.onicecandidate = iceCandidateCallback1;
+ createOfferAndSetLocalDescription();
+ }
+
+ function iceCandidateCallback1(candidate) {
+ if (gPeerConnection.iceGatheringState === 'complete') {
+ gPeerConnection.onicecandidate = iceCandidateCallback2;
+ // Policy changed.
+ gPeerConnection.setConfiguration(
+ {iceServers:[], iceTransportPolicy:'relay', bundlePolicy:'balanced',
+ rtcpMuxPolicy:'require', certificates:[]});
+ createOfferAndSetLocalDescription();
+ }
+ }
+
+ function iceCandidateCallback2(candidate) {
+ if (gPeerConnection.iceGatheringState === 'complete') {
+ gPeerConnection.onicecandidate = iceCandidateCallback3;
+ // Servers changed.
+ gPeerConnection.setConfiguration(
+ {iceServers:[{urls:'stun:foo.invalid'}], iceTransportPolicy:'all',
+ bundlePolicy:'balanced', rtcpMuxPolicy:'require', certificates:[]});
+ createOfferAndSetLocalDescription();
+ }
+ }
+
+ function iceCandidateCallback3(candidate) {
+ // Only wait for 'gathering', since it will take a while for the requests to
+ // 'foo.invalid' to time out.
+ if (gPeerConnection.iceGatheringState === 'gathering') {
+ reportTestSuccess();
+ }
+ }
+
+ function testSetConfigurationErrors() {
+ // Generate certificate so we can test the InvalidModificationError from
+ // attempting to change certificates.
+ RTCPeerConnection.generateCertificate({ name:'ECDSA', namedCurve:'P-256' })
+ .then(function(certificate) {
+ gCertificate = certificate;
+ continueTestSetConfigurationErrors();
+ },
+ function() {
+ failTest('Failed to generate certificate.');
+ }
+ );
+ }
+
+ // Continued after certificate generated.
+ function continueTestSetConfigurationErrors() {
+ gPeerConnection = new RTCPeerConnection(
+ {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
+ rtcpMuxPolicy:'require', certificates:[]});
+ // If bundlePolicy, rtcpMuxPolicy or certificates are changed, an
+ // InvalidModificationError should be thrown.
+ assertThrows(gPeerConnection.setConfiguration,
+ {iceServers:[], iceTransportPolicy:'all',
+ bundlePolicy:'max-bundle', rtcpMuxPolicy:'require',
+ certificates:[]});
+ assertThrows(gPeerConnection.setConfiguration,
+ {iceServers:[], iceTransportPolicy:'all',
+ bundlePolicy:'balanced', rtcpMuxPolicy:'negotiate',
+ certificates:[]});
+ assertThrows(gPeerConnection.setConfiguration,
+ {iceServers:[], iceTransportPolicy:'all',
+ bundlePolicy:'balanced', rtcpMuxPolicy:'require',
+ certificates:[gCertificate]});
+ // Failure to parse URL should result in SyntaxError.
+ assertThrows(gPeerConnection.setConfiguration,
+ {iceServers:[{url:'stunnnn:foo.invalid'}],
+ iceTransportPolicy:'all', bundlePolicy:'max-bundle',
+ rtcpMuxPolicy:'require', certificates:[]});
+ // TURN server with missing username should result in InvalidAccessError.
+ assertThrows(gPeerConnection.setConfiguration,
+ {iceServers:[{url:'turn:foo.invalid'}],
+ iceTransportPolicy:'all', bundlePolicy:'max-bundle',
+ rtcpMuxPolicy:'require', certificates:[]});
+ // Sanity check that a configuration can be successfully set, and thus
+ // there's not something unexpected causing the above exceptions.
+ gPeerConnection.setConfiguration(
+ {iceServers:[], iceTransportPolicy:'all', bundlePolicy:'balanced',
+ rtcpMuxPolicy:'require', certificates:[]});
+ reportTestSuccess();
+ }
+
+ function assertThrows(func) {
+ try {
+ func.apply(arguments.slice(start=1));
+ failTest('Expected exception to be thrown by: ' + code);
+ } catch (e) {
+ }
+ }
+
+ // Helper function to create and apply offer.
+ function createOfferAndSetLocalDescription() {
+ gPeerConnection.createOffer({offerToReceiveAudio:1})
+ .then(function(offer) {
+ console.log("Setting offer:\n" + offer.sdp);
+ gPeerConnection.setLocalDescription(offer).then(
+ function() {},
+ function() { failTest('Failed to set local description.') }
+ );
+ },
+ function() {
+ failTest('Failed to generate offer.')
+ }
+ );
+ }
+
+ </script>
+</head>
+<body>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698