tor-browser

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

SocketProcessChild.h (7659B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #ifndef mozilla_net_SocketProcessChild_h
      7 #define mozilla_net_SocketProcessChild_h
      8 
      9 #include "mozilla/net/PSocketProcessChild.h"
     10 #include "mozilla/ipc/InputStreamUtils.h"
     11 #include "mozilla/psm/IPCClientCertsChild.h"
     12 #include "mozilla/Mutex.h"
     13 #include "nsRefPtrHashtable.h"
     14 #include "nsTHashMap.h"
     15 
     16 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
     17 #  include "mozilla/PSandboxTestingChild.h"
     18 #endif
     19 
     20 namespace mozilla {
     21 class ChildProfilerController;
     22 }
     23 
     24 namespace mozilla {
     25 namespace net {
     26 
     27 class ProxyAutoConfigChild;
     28 class SocketProcessBackgroundChild;
     29 class SocketProcessBridgeParent;
     30 class BackgroundDataBridgeParent;
     31 
     32 // The IPC actor implements PSocketProcessChild in child process.
     33 // This is allocated and kept alive by SocketProcessImpl.
     34 class SocketProcessChild final : public PSocketProcessChild {
     35 public:
     36  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SocketProcessChild, final)
     37 
     38  SocketProcessChild();
     39 
     40  static SocketProcessChild* GetSingleton();
     41 
     42  bool Init(mozilla::ipc::UntypedEndpoint&& aEndpoint,
     43            const char* aParentBuildID);
     44 
     45  void ActorDestroy(ActorDestroyReason aWhy) override;
     46 
     47  mozilla::ipc::IPCResult RecvInit(
     48      const SocketPorcessInitAttributes& aAttributes);
     49  mozilla::ipc::IPCResult RecvPreferenceUpdate(const Pref& aPref);
     50  mozilla::ipc::IPCResult RecvRequestMemoryReport(
     51      const uint32_t& generation, const bool& anonymize,
     52      const bool& minimizeMemoryUsage,
     53      const Maybe<mozilla::ipc::FileDescriptor>& DMDFile,
     54      const RequestMemoryReportResolver& aResolver);
     55  mozilla::ipc::IPCResult RecvSetOffline(const bool& aOffline);
     56  mozilla::ipc::IPCResult RecvSetConnectivity(const bool& aConnectivity);
     57  mozilla::ipc::IPCResult RecvInitLinuxSandbox(
     58      const Maybe<ipc::FileDescriptor>& aBrokerFd);
     59  mozilla::ipc::IPCResult RecvInitSocketProcessBridgeParent(
     60      const ProcessId& aContentProcessId,
     61      Endpoint<mozilla::net::PSocketProcessBridgeParent>&& aEndpoint);
     62  mozilla::ipc::IPCResult RecvInitProfiler(
     63      Endpoint<mozilla::PProfilerChild>&& aEndpoint);
     64 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
     65  mozilla::ipc::IPCResult RecvInitSandboxTesting(
     66      Endpoint<PSandboxTestingChild>&& aEndpoint);
     67 #endif
     68  mozilla::ipc::IPCResult RecvSocketProcessTelemetryPing();
     69 
     70  PWebrtcTCPSocketChild* AllocPWebrtcTCPSocketChild(const Maybe<TabId>& tabId);
     71  bool DeallocPWebrtcTCPSocketChild(PWebrtcTCPSocketChild* aActor);
     72 
     73  already_AddRefed<PHttpTransactionChild> AllocPHttpTransactionChild();
     74 
     75  void CleanUp();
     76  void DestroySocketProcessBridgeParent(ProcessId aId);
     77 
     78  already_AddRefed<PHttpConnectionMgrChild> AllocPHttpConnectionMgrChild(
     79      const HttpHandlerInitArgs& aArgs);
     80  mozilla::ipc::IPCResult RecvUpdateDeviceModelId(const nsACString& aModelId);
     81  mozilla::ipc::IPCResult RecvOnHttpActivityDistributorActivated(
     82      const bool& aIsActivated);
     83  mozilla::ipc::IPCResult RecvOnHttpActivityDistributorObserveProxyResponse(
     84      const bool& aIsEnabled);
     85  mozilla::ipc::IPCResult RecvOnHttpActivityDistributorObserveConnection(
     86      const bool& aIsEnabled);
     87 
     88  already_AddRefed<PInputChannelThrottleQueueChild>
     89  AllocPInputChannelThrottleQueueChild(const uint32_t& aMeanBytesPerSecond,
     90                                       const uint32_t& aMaxBytesPerSecond);
     91 
     92  already_AddRefed<PAltSvcTransactionChild> AllocPAltSvcTransactionChild(
     93      const HttpConnectionInfoCloneArgs& aConnInfo, const uint32_t& aCaps);
     94 
     95  bool IsShuttingDown();
     96 
     97  already_AddRefed<PDNSRequestChild> AllocPDNSRequestChild(
     98      const nsACString& aHost, const nsACString& aTrrServer,
     99      const int32_t& aPort, const uint16_t& aType,
    100      const OriginAttributes& aOriginAttributes,
    101      const nsIDNSService::DNSFlags& aFlags);
    102  mozilla::ipc::IPCResult RecvPDNSRequestConstructor(
    103      PDNSRequestChild* aActor, const nsACString& aHost,
    104      const nsACString& aTrrServer, const int32_t& aPort, const uint16_t& aType,
    105      const OriginAttributes& aOriginAttributes,
    106      const nsIDNSService::DNSFlags& aFlags) override;
    107 
    108  void AddDataBridgeToMap(uint64_t aChannelId,
    109                          BackgroundDataBridgeParent* aActor);
    110  void RemoveDataBridgeFromMap(uint64_t aChannelId);
    111  Maybe<RefPtr<BackgroundDataBridgeParent>> GetAndRemoveDataBridge(
    112      uint64_t aChannelId);
    113 
    114  mozilla::ipc::IPCResult RecvClearSessionCache(
    115      ClearSessionCacheResolver&& aResolve);
    116 
    117  already_AddRefed<PTRRServiceChild> AllocPTRRServiceChild(
    118      const bool& aCaptiveIsPassed, const bool& aParentalControlEnabled,
    119      const nsTArray<nsCString>& aDNSSuffixList);
    120  mozilla::ipc::IPCResult RecvPTRRServiceConstructor(
    121      PTRRServiceChild* aActor, const bool& aCaptiveIsPassed,
    122      const bool& aParentalControlEnabled,
    123      nsTArray<nsCString>&& aDNSSuffixList) override;
    124 
    125  already_AddRefed<PNativeDNSResolverOverrideChild>
    126  AllocPNativeDNSResolverOverrideChild();
    127  mozilla::ipc::IPCResult RecvPNativeDNSResolverOverrideConstructor(
    128      PNativeDNSResolverOverrideChild* aActor) override;
    129 
    130  mozilla::ipc::IPCResult RecvNotifyObserver(const nsACString& aTopic,
    131                                             const nsAString& aData);
    132 
    133  mozilla::ipc::IPCResult RecvGetSocketData(GetSocketDataResolver&& aResolve);
    134  mozilla::ipc::IPCResult RecvGetDNSCacheEntries(
    135      GetDNSCacheEntriesResolver&& aResolve);
    136  mozilla::ipc::IPCResult RecvGetHttpConnectionData(
    137      GetHttpConnectionDataResolver&& aResolve);
    138  mozilla::ipc::IPCResult RecvGetHttp3ConnectionStatsData(
    139      GetHttp3ConnectionStatsDataResolver&& aResolve);
    140 
    141  mozilla::ipc::IPCResult RecvInitProxyAutoConfigChild(
    142      Endpoint<PProxyAutoConfigChild>&& aEndpoint);
    143 
    144  mozilla::ipc::IPCResult RecvRecheckIPConnectivity();
    145  mozilla::ipc::IPCResult RecvRecheckDNS();
    146 
    147  mozilla::ipc::IPCResult RecvFlushFOGData(FlushFOGDataResolver&& aResolver);
    148 
    149  mozilla::ipc::IPCResult RecvTestTriggerMetrics(
    150      TestTriggerMetricsResolver&& aResolve);
    151 
    152 #if defined(XP_WIN)
    153  mozilla::ipc::IPCResult RecvGetUntrustedModulesData(
    154      GetUntrustedModulesDataResolver&& aResolver);
    155  mozilla::ipc::IPCResult RecvUnblockUntrustedModulesThread();
    156 #endif  // defined(XP_WIN)
    157 
    158  already_AddRefed<psm::IPCClientCertsChild> GetIPCClientCertsActor();
    159  void CloseIPCClientCertsActor();
    160 
    161  mozilla::ipc::IPCResult RecvAddNetAddrOverride(const NetAddr& aFrom,
    162                                                 const NetAddr& aTo);
    163  mozilla::ipc::IPCResult RecvClearNetAddrOverrides();
    164 
    165 protected:
    166  friend class SocketProcessImpl;
    167  ~SocketProcessChild();
    168 
    169  void InitSocketBackground();
    170 
    171 private:
    172  // Mapping of content process id and the SocketProcessBridgeParent.
    173  // This table keeps SocketProcessBridgeParent alive in socket process.
    174  nsRefPtrHashtable<nsUint32HashKey, SocketProcessBridgeParent>
    175      mSocketProcessBridgeParentMap;
    176 
    177  RefPtr<ChildProfilerController> mProfilerController;
    178 
    179  // Protect the table below.
    180  Mutex mMutex MOZ_UNANNOTATED{"SocketProcessChild::mMutex"};
    181  nsTHashMap<uint64_t, RefPtr<BackgroundDataBridgeParent>>
    182      mBackgroundDataBridgeMap;
    183 
    184  bool mShuttingDown MOZ_GUARDED_BY(mMutex) = false;
    185 
    186  nsCOMPtr<nsIEventTarget> mSocketThread;
    187  // mIPCClientCertsChild is only accessed on the socket thread.
    188  RefPtr<psm::IPCClientCertsChild> mIPCClientCertsChild;
    189 };
    190 
    191 }  // namespace net
    192 }  // namespace mozilla
    193 
    194 #endif  // mozilla_net_SocketProcessChild_h