RTCDtlsTransport.cpp (2232B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "RTCDtlsTransport.h" 6 7 #include "mozilla/dom/Event.h" 8 #include "mozilla/dom/EventBinding.h" 9 #include "mozilla/dom/RTCDtlsTransportBinding.h" 10 11 namespace mozilla::dom { 12 13 NS_IMPL_CYCLE_COLLECTION_INHERITED(RTCDtlsTransport, DOMEventTargetHelper, 14 mIceTransport) 15 16 NS_IMPL_ADDREF_INHERITED(RTCDtlsTransport, DOMEventTargetHelper) 17 NS_IMPL_RELEASE_INHERITED(RTCDtlsTransport, DOMEventTargetHelper) 18 19 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(RTCDtlsTransport) 20 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY 21 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper) 22 23 RTCDtlsTransport::RTCDtlsTransport(nsPIDOMWindowInner* aWindow) 24 : DOMEventTargetHelper(aWindow), 25 mState(RTCDtlsTransportState::New), 26 mIceTransport(new RTCIceTransport(aWindow)) {} 27 28 JSObject* RTCDtlsTransport::WrapObject(JSContext* aCx, 29 JS::Handle<JSObject*> aGivenProto) { 30 return RTCDtlsTransport_Binding::Wrap(aCx, this, aGivenProto); 31 } 32 33 void RTCDtlsTransport::UpdateStateNoEvent(TransportLayer::State aState) { 34 if (mState == RTCDtlsTransportState::Closed) { 35 return; 36 } 37 38 switch (aState) { 39 case TransportLayer::TS_NONE: 40 break; 41 case TransportLayer::TS_INIT: 42 break; 43 case TransportLayer::TS_CONNECTING: 44 mState = RTCDtlsTransportState::Connecting; 45 break; 46 case TransportLayer::TS_OPEN: 47 mState = RTCDtlsTransportState::Connected; 48 break; 49 case TransportLayer::TS_CLOSED: 50 mState = RTCDtlsTransportState::Closed; 51 break; 52 case TransportLayer::TS_ERROR: 53 mState = RTCDtlsTransportState::Failed; 54 break; 55 } 56 } 57 58 void RTCDtlsTransport::UpdateState(TransportLayer::State aState) { 59 RTCDtlsTransportState oldState = mState; 60 UpdateStateNoEvent(aState); 61 if (oldState == mState) { 62 return; 63 } 64 65 EventInit init; 66 init.mBubbles = false; 67 init.mCancelable = false; 68 69 RefPtr<Event> event = Event::Constructor(this, u"statechange"_ns, init); 70 71 DispatchTrustedEvent(event); 72 } 73 74 } // namespace mozilla::dom