tor-browser

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

IPCTransportProvider.cpp (2326B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set sw=2 ts=8 et ft=cpp : */
      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 file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "mozilla/net/IPCTransportProvider.h"
      8 
      9 #include "IPCTransportProvider.h"
     10 #include "nsISocketTransport.h"
     11 #include "nsIAsyncInputStream.h"
     12 #include "nsIAsyncOutputStream.h"
     13 
     14 namespace mozilla {
     15 namespace net {
     16 
     17 NS_IMPL_ISUPPORTS(TransportProviderParent, nsITransportProvider,
     18                  nsIHttpUpgradeListener)
     19 
     20 NS_IMETHODIMP
     21 TransportProviderParent::SetListener(nsIHttpUpgradeListener* aListener) {
     22  MOZ_ASSERT(aListener);
     23  mListener = aListener;
     24 
     25  MaybeNotify();
     26 
     27  return NS_OK;
     28 }
     29 
     30 NS_IMETHODIMP
     31 TransportProviderParent::GetIPCChild(
     32    mozilla::net::PTransportProviderChild** aChild) {
     33  MOZ_CRASH("Don't call this in parent process");
     34  *aChild = nullptr;
     35  return NS_OK;
     36 }
     37 
     38 NS_IMETHODIMP
     39 TransportProviderParent::OnTransportAvailable(
     40    nsISocketTransport* aTransport, nsIAsyncInputStream* aSocketIn,
     41    nsIAsyncOutputStream* aSocketOut) {
     42  MOZ_ASSERT(aTransport && aSocketOut && aSocketOut);
     43  mTransport = aTransport;
     44  mSocketIn = aSocketIn;
     45  mSocketOut = aSocketOut;
     46 
     47  MaybeNotify();
     48 
     49  return NS_OK;
     50 }
     51 
     52 NS_IMETHODIMP
     53 TransportProviderParent::OnUpgradeFailed(nsresult aErrorCode) { return NS_OK; }
     54 
     55 NS_IMETHODIMP
     56 TransportProviderParent::OnWebSocketConnectionAvailable(
     57    WebSocketConnectionBase* aConnection) {
     58  return NS_ERROR_NOT_IMPLEMENTED;
     59 }
     60 
     61 void TransportProviderParent::MaybeNotify() {
     62  if (!mListener || !mTransport) {
     63    return;
     64  }
     65 
     66  DebugOnly<nsresult> rv =
     67      mListener->OnTransportAvailable(mTransport, mSocketIn, mSocketOut);
     68  MOZ_ASSERT(NS_SUCCEEDED(rv));
     69 }
     70 
     71 NS_IMPL_ISUPPORTS(TransportProviderChild, nsITransportProvider)
     72 
     73 TransportProviderChild::~TransportProviderChild() { Send__delete__(this); }
     74 
     75 NS_IMETHODIMP
     76 TransportProviderChild::SetListener(nsIHttpUpgradeListener* aListener) {
     77  MOZ_CRASH("Don't call this in child process");
     78  return NS_OK;
     79 }
     80 
     81 NS_IMETHODIMP
     82 TransportProviderChild::GetIPCChild(
     83    mozilla::net::PTransportProviderChild** aChild) {
     84  *aChild = this;
     85  return NS_OK;
     86 }
     87 
     88 }  // namespace net
     89 }  // namespace mozilla