tor-browser

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

WebTransportReceiveStream.cpp (2785B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "mozilla/dom/WebTransportReceiveStream.h"
      8 
      9 #include "mozilla/dom/ReadableByteStreamController.h"
     10 #include "mozilla/dom/ReadableStream.h"
     11 #include "mozilla/dom/UnderlyingSourceCallbackHelpers.h"
     12 #include "mozilla/dom/WebTransport.h"
     13 #include "mozilla/dom/WebTransportSendReceiveStreamBinding.h"
     14 #include "mozilla/ipc/DataPipe.h"
     15 
     16 using namespace mozilla::ipc;
     17 
     18 namespace mozilla::dom {
     19 
     20 NS_IMPL_CYCLE_COLLECTION_INHERITED(WebTransportReceiveStream, ReadableStream,
     21                                   mTransport)
     22 NS_IMPL_ADDREF_INHERITED(WebTransportReceiveStream, ReadableStream)
     23 NS_IMPL_RELEASE_INHERITED(WebTransportReceiveStream, ReadableStream)
     24 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(WebTransportReceiveStream)
     25 NS_INTERFACE_MAP_END_INHERITING(ReadableStream)
     26 
     27 WebTransportReceiveStream::WebTransportReceiveStream(nsIGlobalObject* aGlobal,
     28                                                     WebTransport* aTransport)
     29    : ReadableStream(aGlobal,
     30                     ReadableStream::HoldDropJSObjectsCaller::Explicit),
     31      mTransport(aTransport) {
     32  mozilla::HoldJSObjects(this);
     33 }
     34 
     35 // WebIDL Boilerplate
     36 
     37 JSObject* WebTransportReceiveStream::WrapObject(
     38    JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
     39  return WebTransportReceiveStream_Binding::Wrap(aCx, this, aGivenProto);
     40 }
     41 
     42 already_AddRefed<WebTransportReceiveStream> WebTransportReceiveStream::Create(
     43    WebTransport* aWebTransport, nsIGlobalObject* aGlobal, uint64_t aStreamId,
     44    DataPipeReceiver* receiver, ErrorResult& aRv) {
     45  // https://w3c.github.io/webtransport/#webtransportreceivestream-create
     46  AutoJSAPI jsapi;
     47  if (!jsapi.Init(aGlobal)) {
     48    return nullptr;
     49  }
     50  JSContext* cx = jsapi.cx();
     51 
     52  auto stream = MakeRefPtr<WebTransportReceiveStream>(aGlobal, aWebTransport);
     53 
     54  nsCOMPtr<nsIAsyncInputStream> inputStream = receiver;
     55  auto algorithms = MakeRefPtr<InputToReadableStreamAlgorithms>(
     56      cx, inputStream, (ReadableStream*)stream);
     57 
     58  stream->SetUpByteNative(cx, *algorithms, Some(0.0), aRv);
     59  if (aRv.Failed()) {
     60    return nullptr;
     61  }
     62  // Add to ReceiveStreams
     63  aWebTransport->mReceiveStreams.InsertOrUpdate(aStreamId, stream);
     64  return stream.forget();
     65 }
     66 
     67 already_AddRefed<Promise> WebTransportReceiveStream::GetStats() {
     68  RefPtr<Promise> promise = Promise::CreateInfallible(ReadableStream::mGlobal);
     69  promise->MaybeRejectWithNotSupportedError("GetStats isn't supported yet");
     70  return promise.forget();
     71 }
     72 
     73 }  // namespace mozilla::dom