tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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