anchor.diff:   */
   class RTCPeerConnection {
     final HTML.RtcPeerConnection _jsPc;
  +  RTCSignalingState _signalingState;
  +  RTCIceGatheringState _iceGatheringState;
  +  RTCIceConnectionState _iceConnectionState;
   
     // public: delegate
     SignalingStateCallback onSignalingState;
  
positive.code:     });
      _jsPc.onIceConnectionStateChange.listen((_) {
        if (onIceConnectionState != null) {
          final state = iceConnectionStateForString(_jsPc.iceConnectionState);
          onIceConnectionState(state);
        }
      });
      JS.JsObject.fromBrowserObject(_jsPc)['onicegatheringstatechange'] =
          JS.JsFunction.withThis((_) {
        if (onIceGatheringState != null) {
          final state = iceGatheringStateforString(_jsPc.iceGatheringState);
          onIceGatheringState(state);
        }
      });
      _jsPc.onRemoveStream.listen((mediaStreamEvent) {
  
negative.code:     },
      "optional": [],
    };
  
    RTCSignalingState get signalingState => _signalingState;
  
    RTCIceGatheringState get iceGatheringState => _iceGatheringState;
  
    RTCIceConnectionState get iceConnectionState => _iceConnectionState;
  
    RTCPeerConnection(this._jsPc) {
      _jsPc.onAddStream.listen((mediaStreamEvent) {
  