// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. part of $LIBRARYNAME; $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { factory $CLASSNAME(Map rtcIceServers, [Map$NULLABLE mediaConstraints]) { var constructorName = JS('RtcPeerConnection', 'window[#]', 'RTCPeerConnection'); if (mediaConstraints != null) { return JS('RtcPeerConnection', 'new #(#,#)', constructorName, convertDartToNative_SerializedScriptValue(rtcIceServers), convertDartToNative_SerializedScriptValue(mediaConstraints)); } else { return JS('RtcPeerConnection', 'new #(#)', constructorName, convertDartToNative_SerializedScriptValue(rtcIceServers)); } } /** * Checks if Real Time Communication (RTC) APIs are supported and enabled on * the current platform. */ static bool get supported { // Currently in Firefox some of the RTC elements are defined but throw an // error unless the user has specifically enabled them in their // about:config. So we have to construct an element to actually test if RTC // is supported at the given time. try { new RtcPeerConnection( {"iceServers": [ {"url":"stun:localhost"}]}); return true; } catch (_) { return false;} return false; } /** * Temporarily exposes _getStats and old getStats as getLegacyStats until Chrome fully supports * new getStats API. */ Future getLegacyStats([MediaStreamTrack$NULLABLE selector]) { var completer = new Completer(); _getStats((value) { completer.complete(value); }, selector); return completer.future; } @JSName('getStats') Future _getStats( [RtcStatsCallback$NULLABLE successCallback, MediaStreamTrack$NULLABLE selector]) native; static Future generateCertificate(/*AlgorithmIdentifier*/ keygenAlgorithm) => JS('dynamic', 'generateCertificate(#)', keygenAlgorithm); $!MEMBERS }