UtilityProcessChild.h (3918B)
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/UtilityMediaServiceParent.h" 11 #include "ChildProfilerController.h" 12 13 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS) 14 # include "mozilla/PSandboxTestingChild.h" 15 #endif 16 #include "mozilla/PRemoteMediaManagerParent.h" 17 #include "mozilla/ipc/AsyncBlockers.h" 18 #include "mozilla/dom/JSOracleChild.h" 19 #include "mozilla/ProfilerMarkers.h" 20 21 namespace mozilla::dom { 22 class PJSOracleChild; 23 } // namespace mozilla::dom 24 25 namespace mozilla::ipc { 26 27 class UtilityProcessHost; 28 29 class UtilityProcessChild final : public PUtilityProcessChild { 30 public: 31 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(UtilityProcessChild, override); 32 33 UtilityProcessChild(); 34 35 static RefPtr<UtilityProcessChild> GetSingleton(); 36 static RefPtr<UtilityProcessChild> Get(); 37 38 SandboxingKind mSandbox{}; 39 40 bool Init(mozilla::ipc::UntypedEndpoint&& aEndpoint, 41 const nsCString& aParentBuildID, uint64_t aSandboxingKind); 42 43 mozilla::ipc::IPCResult RecvInit(const Maybe<ipc::FileDescriptor>& aBrokerFd, 44 const bool& aCanRecordReleaseTelemetry, 45 const bool& aIsReadyForBackgroundProcessing); 46 mozilla::ipc::IPCResult RecvInitProfiler( 47 Endpoint<PProfilerChild>&& aEndpoint); 48 49 mozilla::ipc::IPCResult RecvPreferenceUpdate(const Pref& pref); 50 51 mozilla::ipc::IPCResult RecvRequestMemoryReport( 52 const uint32_t& generation, const bool& anonymize, 53 const bool& minimizeMemoryUsage, 54 const Maybe<ipc::FileDescriptor>& DMDFile, 55 const RequestMemoryReportResolver& aResolver); 56 57 mozilla::ipc::IPCResult RecvFlushFOGData(FlushFOGDataResolver&& aResolver); 58 59 mozilla::ipc::IPCResult RecvTestTriggerMetrics( 60 TestTriggerMetricsResolver&& aResolve); 61 62 mozilla::ipc::IPCResult RecvTestTelemetryProbes(); 63 64 mozilla::ipc::IPCResult RecvStartUtilityMediaService( 65 Endpoint<PUtilityMediaServiceParent>&& aEndpoint, 66 nsTArray<gfx::GfxVarUpdate>&& aUpdates); 67 68 mozilla::ipc::IPCResult RecvStartJSOracleService( 69 Endpoint<dom::PJSOracleChild>&& aEndpoint); 70 71 #if defined(XP_WIN) 72 mozilla::ipc::IPCResult RecvStartWindowsUtilsService( 73 Endpoint<PWindowsUtilsChild>&& aEndpoint); 74 75 mozilla::ipc::IPCResult RecvStartWinFileDialogService( 76 Endpoint<PWinFileDialogChild>&& aEndpoint); 77 78 mozilla::ipc::IPCResult RecvGetUntrustedModulesData( 79 GetUntrustedModulesDataResolver&& aResolver); 80 mozilla::ipc::IPCResult RecvUnblockUntrustedModulesThread(); 81 #endif // defined(XP_WIN) 82 83 AsyncBlockers& AsyncShutdownService() { return mShutdownBlockers; } 84 85 void ActorDestroy(ActorDestroyReason aWhy) override; 86 87 #if defined(MOZ_SANDBOX) && defined(MOZ_DEBUG) && defined(ENABLE_TESTS) 88 mozilla::ipc::IPCResult RecvInitSandboxTesting( 89 Endpoint<PSandboxTestingChild>&& aEndpoint); 90 #endif 91 92 RefPtr<UtilityMediaServiceParent> GetMediaService() const { 93 return mUtilityMediaServiceInstance; 94 } 95 96 protected: 97 friend class UtilityProcessImpl; 98 ~UtilityProcessChild(); 99 100 private: 101 TimeStamp mChildStartTime; 102 RefPtr<ChildProfilerController> mProfilerController; 103 RefPtr<UtilityMediaServiceParent> mUtilityMediaServiceInstance{}; 104 RefPtr<dom::JSOracleChild> mJSOracleInstance{}; 105 #ifdef XP_WIN 106 RefPtr<PWindowsUtilsChild> mWindowsUtilsInstance; 107 #endif 108 109 AsyncBlockers mShutdownBlockers; 110 }; 111 112 } // namespace mozilla::ipc 113 114 #endif // _include_ipc_glue_UtilityProcessChild_h_