1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
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
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef _include_ipc_glue_UtilityProcessChild_h_
7 #define _include_ipc_glue_UtilityProcessChild_h_
8 #include "mozilla/ipc/PUtilityProcessChild.h"
9 #include "mozilla/ipc/UtilityProcessSandboxing.h"
10 #include "mozilla/ipc/UtilityAudioDecoderParent.h"
11 #include "mozilla/UniquePtr.h"
12 #include "ChildProfilerController.h"
14 #include "mozilla/PRemoteDecoderManagerParent.h"
15 #include "mozilla/ipc/AsyncBlockers.h"
16 #include "mozilla/dom/JSOracleChild.h"
18 namespace mozilla::dom
{
20 } // namespace mozilla::dom
22 namespace mozilla::ipc
{
24 class UtilityProcessHost
;
26 class UtilityProcessChild final
: public PUtilityProcessChild
{
28 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(UtilityProcessChild
, override
);
30 UtilityProcessChild();
32 static RefPtr
<UtilityProcessChild
> GetSingleton();
33 static RefPtr
<UtilityProcessChild
> Get();
35 SandboxingKind mSandbox
{};
37 bool Init(mozilla::ipc::UntypedEndpoint
&& aEndpoint
,
38 const nsCString
& aParentBuildID
, uint64_t aSandboxingKind
);
40 mozilla::ipc::IPCResult
RecvInit(const Maybe
<ipc::FileDescriptor
>& aBrokerFd
,
41 const bool& aCanRecordReleaseTelemetry
,
42 const bool& aIsReadyForBackgroundProcessing
);
43 mozilla::ipc::IPCResult
RecvInitProfiler(
44 Endpoint
<PProfilerChild
>&& aEndpoint
);
46 mozilla::ipc::IPCResult
RecvPreferenceUpdate(const Pref
& pref
);
48 mozilla::ipc::IPCResult
RecvRequestMemoryReport(
49 const uint32_t& generation
, const bool& anonymize
,
50 const bool& minimizeMemoryUsage
,
51 const Maybe
<ipc::FileDescriptor
>& DMDFile
,
52 const RequestMemoryReportResolver
& aResolver
);
54 mozilla::ipc::IPCResult
RecvFlushFOGData(FlushFOGDataResolver
&& aResolver
);
56 mozilla::ipc::IPCResult
RecvTestTriggerMetrics(
57 TestTriggerMetricsResolver
&& aResolve
);
59 mozilla::ipc::IPCResult
RecvTestTelemetryProbes();
61 mozilla::ipc::IPCResult
RecvStartUtilityAudioDecoderService(
62 Endpoint
<PUtilityAudioDecoderParent
>&& aEndpoint
);
64 mozilla::ipc::IPCResult
RecvStartJSOracleService(
65 Endpoint
<dom::PJSOracleChild
>&& aEndpoint
);
68 mozilla::ipc::IPCResult
RecvStartWindowsUtilsService(
69 Endpoint
<PWindowsUtilsChild
>&& aEndpoint
);
71 mozilla::ipc::IPCResult
RecvGetUntrustedModulesData(
72 GetUntrustedModulesDataResolver
&& aResolver
);
73 mozilla::ipc::IPCResult
RecvUnblockUntrustedModulesThread();
74 #endif // defined(XP_WIN)
76 AsyncBlockers
& AsyncShutdownService() { return mShutdownBlockers
; }
78 void ActorDestroy(ActorDestroyReason aWhy
) override
;
80 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
81 mozilla::ipc::IPCResult
RecvInitSandboxTesting(
82 Endpoint
<PSandboxTestingChild
>&& aEndpoint
);
86 friend class UtilityProcessImpl
;
87 ~UtilityProcessChild();
90 RefPtr
<ChildProfilerController
> mProfilerController
;
91 RefPtr
<UtilityAudioDecoderParent
> mUtilityAudioDecoderInstance
{};
92 RefPtr
<dom::JSOracleChild
> mJSOracleInstance
{};
94 RefPtr
<PWindowsUtilsChild
> mWindowsUtilsInstance
;
97 AsyncBlockers mShutdownBlockers
;
100 } // namespace mozilla::ipc
102 #endif // _include_ipc_glue_UtilityProcessChild_h_