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_SocketProcessParent_h 7 #define mozilla_net_SocketProcessParent_h 8 9 #include "mozilla/UniquePtr.h" 10 #include "mozilla/ipc/BackgroundParent.h" 11 #include "mozilla/ipc/CrashReporterHelper.h" 12 #include "mozilla/ipc/InputStreamUtils.h" 13 #include "mozilla/net/PSocketProcessParent.h" 14 15 namespace mozilla { 16 17 namespace dom { 18 class MemoryReport; 19 class MemoryReportRequestHost; 20 } // namespace dom 21 22 namespace net { 23 24 class SocketProcessHost; 25 26 // IPC actor of socket process in parent process. This is allocated and managed 27 // by SocketProcessHost. 28 class SocketProcessParent final 29 : public PSocketProcessParent, 30 public ipc::CrashReporterHelper<GeckoProcessType_Socket>, 31 public ipc::ParentToChildStreamActorManager { 32 public: 33 friend class SocketProcessHost; 34 35 explicit SocketProcessParent(SocketProcessHost* aHost); 36 ~SocketProcessParent(); 37 38 static SocketProcessParent* GetSingleton(); 39 40 mozilla::ipc::IPCResult RecvAddMemoryReport(const MemoryReport& aReport); 41 mozilla::ipc::IPCResult RecvFinishMemoryReport(const uint32_t& aGeneration); 42 mozilla::ipc::IPCResult RecvAccumulateChildHistograms( 43 nsTArray<HistogramAccumulation>&& aAccumulations); 44 mozilla::ipc::IPCResult RecvAccumulateChildKeyedHistograms( 45 nsTArray<KeyedHistogramAccumulation>&& aAccumulations); 46 mozilla::ipc::IPCResult RecvUpdateChildScalars( 47 nsTArray<ScalarAction>&& aScalarActions); 48 mozilla::ipc::IPCResult RecvUpdateChildKeyedScalars( 49 nsTArray<KeyedScalarAction>&& aScalarActions); 50 mozilla::ipc::IPCResult RecvRecordChildEvents( 51 nsTArray<ChildEventData>&& events); 52 mozilla::ipc::IPCResult RecvRecordDiscardedData( 53 const DiscardedData& aDiscardedData); 54 55 PWebrtcTCPSocketParent* AllocPWebrtcTCPSocketParent( 56 const Maybe<TabId>& aTabId); 57 bool DeallocPWebrtcTCPSocketParent(PWebrtcTCPSocketParent* aActor); 58 already_AddRefed<PDNSRequestParent> AllocPDNSRequestParent( 59 const nsCString& aHost, const nsCString& aTrrServer, 60 const uint16_t& aType, const OriginAttributes& aOriginAttributes, 61 const uint32_t& aFlags); 62 virtual mozilla::ipc::IPCResult RecvPDNSRequestConstructor( 63 PDNSRequestParent* actor, const nsCString& hostName, 64 const nsCString& trrServer, const uint16_t& type, 65 const OriginAttributes& aOriginAttributes, 66 const uint32_t& flags) override; 67 68 void ActorDestroy(ActorDestroyReason aWhy) override; 69 bool SendRequestMemoryReport(const uint32_t& aGeneration, 70 const bool& aAnonymize, 71 const bool& aMinimizeMemoryUsage, 72 const Maybe<ipc::FileDescriptor>& aDMDFile); 73 74 PFileDescriptorSetParent* AllocPFileDescriptorSetParent( 75 const FileDescriptor& fd); 76 bool DeallocPFileDescriptorSetParent(PFileDescriptorSetParent* aActor); 77 78 PChildToParentStreamParent* AllocPChildToParentStreamParent(); 79 bool DeallocPChildToParentStreamParent(PChildToParentStreamParent* aActor); 80 PParentToChildStreamParent* AllocPParentToChildStreamParent(); 81 bool DeallocPParentToChildStreamParent(PParentToChildStreamParent* aActor); 82 83 PParentToChildStreamParent* SendPParentToChildStreamConstructor( 84 PParentToChildStreamParent* aActor) override; 85 PFileDescriptorSetParent* SendPFileDescriptorSetConstructor( 86 const FileDescriptor& aFD) override; 87 88 mozilla::ipc::IPCResult RecvObserveHttpActivity( 89 const HttpActivityArgs& aArgs, const uint32_t& aActivityType, 90 const uint32_t& aActivitySubtype, const PRTime& aTimestamp, 91 const uint64_t& aExtraSizeData, const nsCString& aExtraStringData); 92 93 mozilla::ipc::IPCResult RecvInitBackground( 94 Endpoint<PBackgroundParent>&& aEndpoint); 95 96 already_AddRefed<PAltServiceParent> AllocPAltServiceParent(); 97 98 mozilla::ipc::IPCResult RecvGetTLSClientCert( 99 const nsCString& aHostName, const OriginAttributes& aOriginAttributes, 100 const int32_t& aPort, const uint32_t& aProviderFlags, 101 const uint32_t& aProviderTlsFlags, const ByteArray& aServerCert, 102 Maybe<ByteArray>&& aClientCert, nsTArray<ByteArray>&& aCollectedCANames, 103 bool* aSucceeded, ByteArray* aOutCert, ByteArray* aOutKey, 104 nsTArray<ByteArray>* aBuiltChain); 105 106 already_AddRefed<PProxyConfigLookupParent> AllocPProxyConfigLookupParent( 107 nsIURI* aURI, const uint32_t& aProxyResolveFlags); 108 mozilla::ipc::IPCResult RecvPProxyConfigLookupConstructor( 109 PProxyConfigLookupParent* aActor, nsIURI* aURI, 110 const uint32_t& aProxyResolveFlags) override; 111 112 mozilla::ipc::IPCResult RecvCachePushCheck( 113 nsIURI* aPushedURL, OriginAttributes&& aOriginAttributes, 114 nsCString&& aRequestString, CachePushCheckResolver&& aResolver); 115 116 private: 117 SocketProcessHost* mHost; 118 UniquePtr<dom::MemoryReportRequestHost> mMemoryReportRequest; 119 120 static void Destroy(UniquePtr<SocketProcessParent>&& aParent); 121 }; 122 123 } // namespace net 124 } // namespace mozilla 125 126 #endif // mozilla_net_SocketProcessParent_h 127