xref: /aosp_15_r20/external/cronet/base/win/com_init_util.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_WIN_COM_INIT_UTIL_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_WIN_COM_INIT_UTIL_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace base {
12*6777b538SAndroid Build Coastguard Worker namespace win {
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker enum class ComApartmentType {
15*6777b538SAndroid Build Coastguard Worker   // Uninitialized or has an unrecognized apartment type.
16*6777b538SAndroid Build Coastguard Worker   NONE,
17*6777b538SAndroid Build Coastguard Worker   // Single-threaded Apartment.
18*6777b538SAndroid Build Coastguard Worker   STA,
19*6777b538SAndroid Build Coastguard Worker   // Multi-threaded Apartment.
20*6777b538SAndroid Build Coastguard Worker   MTA,
21*6777b538SAndroid Build Coastguard Worker };
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker // Get the current apartment type.
24*6777b538SAndroid Build Coastguard Worker BASE_EXPORT ComApartmentType GetComApartmentTypeForThread();
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker #if DCHECK_IS_ON()
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker // DCHECKs if COM is not initialized on this thread as an STA or MTA.
29*6777b538SAndroid Build Coastguard Worker // |message| is optional and is used for the DCHECK if specified.
30*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void AssertComInitialized(const char* message = nullptr);
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker // DCHECKs if |apartment_type| is not the same as the current thread's apartment
33*6777b538SAndroid Build Coastguard Worker // type.
34*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void AssertComApartmentType(ComApartmentType apartment_type);
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker #else   // DCHECK_IS_ON()
AssertComInitialized()37*6777b538SAndroid Build Coastguard Worker inline void AssertComInitialized() {}
AssertComApartmentType(ComApartmentType apartment_type)38*6777b538SAndroid Build Coastguard Worker inline void AssertComApartmentType(ComApartmentType apartment_type) {}
39*6777b538SAndroid Build Coastguard Worker #endif  // DCHECK_IS_ON()
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker }  // namespace win
42*6777b538SAndroid Build Coastguard Worker }  // namespace base
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker #endif  // BASE_WIN_COM_INIT_UTIL_H_
45