diff options
Diffstat (limited to 'dom/webtransport/child')
-rw-r--r-- | dom/webtransport/child/WebTransportChild.cpp | 75 | ||||
-rw-r--r-- | dom/webtransport/child/WebTransportChild.h | 58 | ||||
-rw-r--r-- | dom/webtransport/child/moz.build | 17 |
3 files changed, 150 insertions, 0 deletions
diff --git a/dom/webtransport/child/WebTransportChild.cpp b/dom/webtransport/child/WebTransportChild.cpp new file mode 100644 index 0000000000..12714b003e --- /dev/null +++ b/dom/webtransport/child/WebTransportChild.cpp @@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/dom/WebTransport.h" +#include "mozilla/dom/WebTransportChild.h" +#include "mozilla/dom/WebTransportLog.h" + +namespace mozilla::dom { + +void WebTransportChild::Shutdown(bool aClose) { + LOG(("WebTransportChild::Shutdown() for %p (%p)", this, mTransport)); + mTransport = nullptr; + if (!aClose || !CanSend()) { + return; + } + + Close(); +} + +void WebTransportChild::CloseAll() { + // XXX need impl +} + +::mozilla::ipc::IPCResult WebTransportChild::RecvCloseAll( + CloseAllResolver&& aResolver) { + CloseAll(); + aResolver(NS_OK); + return IPC_OK(); +} + +::mozilla::ipc::IPCResult WebTransportChild::RecvRemoteClosed( + const bool& aCleanly, const uint32_t& aCode, const nsACString& aReason) { + if (mTransport) { + mTransport->RemoteClosed(aCleanly, aCode, aReason); + } + return IPC_OK(); +} + +::mozilla::ipc::IPCResult WebTransportChild::RecvIncomingBidirectionalStream( + const uint64_t& aStreamId, const RefPtr<DataPipeReceiver>& aIncoming, + const RefPtr<DataPipeSender>& aOutgoing) { + if (mTransport) { + mTransport->NewBidirectionalStream(aStreamId, aIncoming, aOutgoing); + } + return IPC_OK(); +} + +::mozilla::ipc::IPCResult WebTransportChild::RecvIncomingUnidirectionalStream( + const uint64_t& aStreamId, const RefPtr<DataPipeReceiver>& aStream) { + if (mTransport) { + mTransport->NewUnidirectionalStream(aStreamId, aStream); + } + return IPC_OK(); +} + +::mozilla::ipc::IPCResult WebTransportChild::RecvIncomingDatagram( + nsTArray<uint8_t>&& aData, const TimeStamp& aRecvTimeStamp) { + if (mTransport) { + mTransport->NewDatagramReceived(std::move(aData), aRecvTimeStamp); + } + return IPC_OK(); +} + +::mozilla::ipc::IPCResult WebTransportChild::RecvOnStreamResetOrStopSending( + const uint64_t& aStreamId, const StreamResetOrStopSendingError& aError) { + if (mTransport) { + mTransport->OnStreamResetOrStopSending(aStreamId, aError); + } + return IPC_OK(); +} + +} // namespace mozilla::dom diff --git a/dom/webtransport/child/WebTransportChild.h b/dom/webtransport/child/WebTransportChild.h new file mode 100644 index 0000000000..7e89896b89 --- /dev/null +++ b/dom/webtransport/child/WebTransportChild.h @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef DOM_WEBTRANSPORT_WEBTRANSPORTCHILD_H_ +#define DOM_WEBTRANSPORT_WEBTRANSPORTCHILD_H_ + +#include "mozilla/TimeStamp.h" +#include "nsISupportsImpl.h" +#include "mozilla/dom/PWebTransportChild.h" +#include "mozilla/ipc/DataPipe.h" + +namespace mozilla::dom { + +class WebTransport; + +class WebTransportChild : public PWebTransportChild { + public: + NS_INLINE_DECL_REFCOUNTING(WebTransportChild) + explicit WebTransportChild(WebTransport* aTransport) + : mTransport(aTransport) {} + + virtual void CloseAll(); + + void Shutdown(bool aClose); + + ::mozilla::ipc::IPCResult RecvCloseAll(CloseAllResolver&& aResolver); + + ::mozilla::ipc::IPCResult RecvRemoteClosed(const bool& aCleanly, + const uint32_t& aCode, + const nsACString& aReason); + + ::mozilla::ipc::IPCResult RecvIncomingBidirectionalStream( + const uint64_t& aStreamId, + const RefPtr<mozilla::ipc::DataPipeReceiver>& aIncoming, + const RefPtr<mozilla::ipc::DataPipeSender>& aOutgoing); + + ::mozilla::ipc::IPCResult RecvIncomingUnidirectionalStream( + const uint64_t& aStreamId, + const RefPtr<mozilla::ipc::DataPipeReceiver>& aStream); + + ::mozilla::ipc::IPCResult RecvIncomingDatagram( + nsTArray<uint8_t>&& aData, const TimeStamp& aRecvTimeStamp); + + ::mozilla::ipc::IPCResult RecvOnStreamResetOrStopSending( + const uint64_t& aStreamId, const StreamResetOrStopSendingError& aError); + + protected: + WebTransport* mTransport; // WebTransport holds a strong reference to us, and + // calls Shutdown() before releasing it + virtual ~WebTransportChild() { MOZ_ASSERT(!mTransport); } +}; + +} // namespace mozilla::dom + +#endif // DOM_WEBTRANSPORT_WEBTRANSPORTCHILD_H_ diff --git a/dom/webtransport/child/moz.build b/dom/webtransport/child/moz.build new file mode 100644 index 0000000000..21df93c138 --- /dev/null +++ b/dom/webtransport/child/moz.build @@ -0,0 +1,17 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +EXPORTS.mozilla.dom += [ + "WebTransportChild.h", +] + +UNIFIED_SOURCES += [ + "WebTransportChild.cpp", +] + +FINAL_LIBRARY = "xul" + +include("/ipc/chromium/chromium-config.mozbuild") |