ProcessRuntime.h (2782B)
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 7 #ifndef mozilla_mscom_ProcessRuntime_h 8 #define mozilla_mscom_ProcessRuntime_h 9 10 #include "mozilla/Attributes.h" 11 #include "mozilla/mscom/ApartmentRegion.h" 12 #include "nsWindowsHelpers.h" 13 #if defined(MOZILLA_INTERNAL_API) 14 # include "nsXULAppAPI.h" 15 #endif // defined(MOZILLA_INTERNAL_API) 16 17 namespace mozilla { 18 namespace mscom { 19 20 class MOZ_NON_TEMPORARY_CLASS ProcessRuntime final { 21 #if !defined(MOZILLA_INTERNAL_API) 22 public: 23 #endif // defined(MOZILLA_INTERNAL_API) 24 enum class ProcessCategory { 25 GeckoBrowserParent, 26 // We give Launcher its own process category, but internally to this class 27 // it should be treated identically to GeckoBrowserParent. 28 Launcher = GeckoBrowserParent, 29 GeckoChild, 30 Service, 31 }; 32 33 // This constructor is only public when compiled outside of XUL 34 explicit ProcessRuntime(const ProcessCategory aProcessCategory); 35 36 public: 37 #if defined(MOZILLA_INTERNAL_API) 38 ProcessRuntime(); 39 ~ProcessRuntime(); 40 #else 41 ~ProcessRuntime() = default; 42 #endif // defined(MOZILLA_INTERNAL_API) 43 44 explicit operator bool() const { return SUCCEEDED(mInitResult); } 45 HRESULT GetHResult() const { return mInitResult; } 46 47 ProcessRuntime(const ProcessRuntime&) = delete; 48 ProcessRuntime(ProcessRuntime&&) = delete; 49 ProcessRuntime& operator=(const ProcessRuntime&) = delete; 50 ProcessRuntime& operator=(ProcessRuntime&&) = delete; 51 52 /** 53 * @return 0 if call is in-process or resolving the calling thread failed, 54 * otherwise contains the thread id of the calling thread. 55 */ 56 static DWORD GetClientThreadId(); 57 58 private: 59 #if defined(MOZILLA_INTERNAL_API) 60 explicit ProcessRuntime(const GeckoProcessType aProcessType); 61 # if defined(MOZ_SANDBOX) 62 void InitUsingPersistentMTAThread(const nsAutoHandle& aCurThreadToken); 63 # endif // defined(MOZ_SANDBOX) 64 #endif // defined(MOZILLA_INTERNAL_API) 65 void InitInsideApartment(); 66 67 #if defined(MOZILLA_INTERNAL_API) 68 static void PostInit(); 69 #endif // defined(MOZILLA_INTERNAL_API) 70 static HRESULT InitializeSecurity(const ProcessCategory aProcessCategory); 71 static COINIT GetDesiredApartmentType(const ProcessCategory aProcessCategory); 72 73 private: 74 HRESULT mInitResult; 75 const ProcessCategory mProcessCategory; 76 ApartmentRegion mAptRegion; 77 78 private: 79 #if defined(MOZILLA_INTERNAL_API) 80 static ProcessRuntime* sInstance; 81 #endif // defined(MOZILLA_INTERNAL_API) 82 }; 83 84 } // namespace mscom 85 } // namespace mozilla 86 87 #endif // mozilla_mscom_ProcessRuntime_h