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 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
15 # include "mozilla/PSandboxTestingChild.h"
17 #include "mozilla/PRemoteDecoderManagerParent.h"
18 #include "mozilla/ipc/AsyncBlockers.h"
19 #include "mozilla/dom/JSOracleChild.h"
20 #include "mozilla/ProfilerMarkers.h"
22 namespace mozilla::dom
{
24 } // namespace mozilla::dom
26 namespace mozilla::ipc
{
28 class UtilityProcessHost
;
30 class UtilityProcessChild final
: public PUtilityProcessChild
{
32 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(UtilityProcessChild
, override
);
34 UtilityProcessChild();
36 static RefPtr
<UtilityProcessChild
> GetSingleton();
37 static RefPtr
<UtilityProcessChild
> Get();
39 SandboxingKind mSandbox
{};
41 bool Init(mozilla::ipc::UntypedEndpoint
&& aEndpoint
,
42 const nsCString
& aParentBuildID
, uint64_t aSandboxingKind
);
44 mozilla::ipc::IPCResult
RecvInit(const Maybe
<ipc::FileDescriptor
>& aBrokerFd
,
45 const bool& aCanRecordReleaseTelemetry
,
46 const bool& aIsReadyForBackgroundProcessing
);
47 mozilla::ipc::IPCResult
RecvInitProfiler(
48 Endpoint
<PProfilerChild
>&& aEndpoint
);
50 mozilla::ipc::IPCResult
RecvPreferenceUpdate(const Pref
& pref
);
52 mozilla::ipc::IPCResult
RecvRequestMemoryReport(
53 const uint32_t& generation
, const bool& anonymize
,
54 const bool& minimizeMemoryUsage
,
55 const Maybe
<ipc::FileDescriptor
>& DMDFile
,
56 const RequestMemoryReportResolver
& aResolver
);
58 mozilla::ipc::IPCResult
RecvFlushFOGData(FlushFOGDataResolver
&& aResolver
);
60 mozilla::ipc::IPCResult
RecvTestTriggerMetrics(
61 TestTriggerMetricsResolver
&& aResolve
);
63 mozilla::ipc::IPCResult
RecvTestTelemetryProbes();
65 mozilla::ipc::IPCResult
RecvStartUtilityAudioDecoderService(
66 Endpoint
<PUtilityAudioDecoderParent
>&& aEndpoint
);
68 mozilla::ipc::IPCResult
RecvStartJSOracleService(
69 Endpoint
<dom::PJSOracleChild
>&& aEndpoint
);
72 mozilla::ipc::IPCResult
RecvStartWindowsUtilsService(
73 Endpoint
<PWindowsUtilsChild
>&& aEndpoint
);
75 mozilla::ipc::IPCResult
RecvStartWinFileDialogService(
76 Endpoint
<PWinFileDialogChild
>&& aEndpoint
);
78 mozilla::ipc::IPCResult
RecvGetUntrustedModulesData(
79 GetUntrustedModulesDataResolver
&& aResolver
);
80 mozilla::ipc::IPCResult
RecvUnblockUntrustedModulesThread();
81 #endif // defined(XP_WIN)
83 AsyncBlockers
& AsyncShutdownService() { return mShutdownBlockers
; }
85 void ActorDestroy(ActorDestroyReason aWhy
) override
;
87 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS)
88 mozilla::ipc::IPCResult
RecvInitSandboxTesting(
89 Endpoint
<PSandboxTestingChild
>&& aEndpoint
);
93 friend class UtilityProcessImpl
;
94 ~UtilityProcessChild();
97 TimeStamp mChildStartTime
;
98 RefPtr
<ChildProfilerController
> mProfilerController
;
99 RefPtr
<UtilityAudioDecoderParent
> mUtilityAudioDecoderInstance
{};
100 RefPtr
<dom::JSOracleChild
> mJSOracleInstance
{};
102 RefPtr
<PWindowsUtilsChild
> mWindowsUtilsInstance
;
105 AsyncBlockers mShutdownBlockers
;
108 } // namespace mozilla::ipc
110 #endif // _include_ipc_glue_UtilityProcessChild_h_