tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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