Bug 1824856 - migrate android build-bundle tasks from firefox-android. r=bhearsum...
[gecko.git] / netwerk / ipc / SocketProcessChild.h
blobfbcac7462de5b47c8b875641cb2b252f6bf53864
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/. */
6 #ifndef mozilla_net_SocketProcessChild_h
7 #define mozilla_net_SocketProcessChild_h
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"
16 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
17 # include "mozilla/PSandboxTestingChild.h"
18 #endif
20 namespace mozilla {
21 class ChildProfilerController;
24 namespace mozilla {
25 namespace net {
27 class ProxyAutoConfigChild;
28 class SocketProcessBackgroundChild;
29 class SocketProcessBridgeParent;
30 class BackgroundDataBridgeParent;
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)
38 SocketProcessChild();
40 static SocketProcessChild* GetSingleton();
42 bool Init(mozilla::ipc::UntypedEndpoint&& aEndpoint,
43 const char* aParentBuildID);
45 void ActorDestroy(ActorDestroyReason aWhy) override;
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();
70 PWebrtcTCPSocketChild* AllocPWebrtcTCPSocketChild(const Maybe<TabId>& tabId);
71 bool DeallocPWebrtcTCPSocketChild(PWebrtcTCPSocketChild* aActor);
73 already_AddRefed<PHttpTransactionChild> AllocPHttpTransactionChild();
75 void CleanUp();
76 void DestroySocketProcessBridgeParent(ProcessId aId);
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);
88 already_AddRefed<PInputChannelThrottleQueueChild>
89 AllocPInputChannelThrottleQueueChild(const uint32_t& aMeanBytesPerSecond,
90 const uint32_t& aMaxBytesPerSecond);
92 already_AddRefed<PAltSvcTransactionChild> AllocPAltSvcTransactionChild(
93 const HttpConnectionInfoCloneArgs& aConnInfo, const uint32_t& aCaps);
95 bool IsShuttingDown();
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;
108 void AddDataBridgeToMap(uint64_t aChannelId,
109 BackgroundDataBridgeParent* aActor);
110 void RemoveDataBridgeFromMap(uint64_t aChannelId);
111 Maybe<RefPtr<BackgroundDataBridgeParent>> GetAndRemoveDataBridge(
112 uint64_t aChannelId);
114 mozilla::ipc::IPCResult RecvClearSessionCache(
115 ClearSessionCacheResolver&& aResolve);
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;
125 already_AddRefed<PNativeDNSResolverOverrideChild>
126 AllocPNativeDNSResolverOverrideChild();
127 mozilla::ipc::IPCResult RecvPNativeDNSResolverOverrideConstructor(
128 PNativeDNSResolverOverrideChild* aActor) override;
130 mozilla::ipc::IPCResult RecvNotifyObserver(const nsACString& aTopic,
131 const nsAString& aData);
133 mozilla::ipc::IPCResult RecvGetSocketData(GetSocketDataResolver&& aResolve);
134 mozilla::ipc::IPCResult RecvGetDNSCacheEntries(
135 GetDNSCacheEntriesResolver&& aResolve);
136 mozilla::ipc::IPCResult RecvGetHttpConnectionData(
137 GetHttpConnectionDataResolver&& aResolve);
139 mozilla::ipc::IPCResult RecvInitProxyAutoConfigChild(
140 Endpoint<PProxyAutoConfigChild>&& aEndpoint);
142 mozilla::ipc::IPCResult RecvRecheckIPConnectivity();
143 mozilla::ipc::IPCResult RecvRecheckDNS();
145 mozilla::ipc::IPCResult RecvFlushFOGData(FlushFOGDataResolver&& aResolver);
147 mozilla::ipc::IPCResult RecvTestTriggerMetrics(
148 TestTriggerMetricsResolver&& aResolve);
150 #if defined(XP_WIN)
151 mozilla::ipc::IPCResult RecvGetUntrustedModulesData(
152 GetUntrustedModulesDataResolver&& aResolver);
153 mozilla::ipc::IPCResult RecvUnblockUntrustedModulesThread();
154 #endif // defined(XP_WIN)
156 already_AddRefed<psm::IPCClientCertsChild> GetIPCClientCertsActor();
157 void CloseIPCClientCertsActor();
159 protected:
160 friend class SocketProcessImpl;
161 ~SocketProcessChild();
163 void InitSocketBackground();
165 private:
166 // Mapping of content process id and the SocketProcessBridgeParent.
167 // This table keeps SocketProcessBridgeParent alive in socket process.
168 nsRefPtrHashtable<nsUint32HashKey, SocketProcessBridgeParent>
169 mSocketProcessBridgeParentMap;
171 RefPtr<ChildProfilerController> mProfilerController;
173 // Protect the table below.
174 Mutex mMutex MOZ_UNANNOTATED{"SocketProcessChild::mMutex"};
175 nsTHashMap<uint64_t, RefPtr<BackgroundDataBridgeParent>>
176 mBackgroundDataBridgeMap;
178 bool mShuttingDown MOZ_GUARDED_BY(mMutex) = false;
180 nsCOMPtr<nsIEventTarget> mSocketThread;
181 // mIPCClientCertsChild is only accessed on the socket thread.
182 RefPtr<psm::IPCClientCertsChild> mIPCClientCertsChild;
185 } // namespace net
186 } // namespace mozilla
188 #endif // mozilla_net_SocketProcessChild_h