|  | // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef BASE_WIN_COM_INIT_UTIL_H_ | 
|  | #define BASE_WIN_COM_INIT_UTIL_H_ | 
|  |  | 
|  | #include "base/base_export.h" | 
|  | #include "base/logging.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace win { | 
|  |  | 
|  | enum class ComApartmentType { | 
|  | // Uninitialized or has an unrecognized apartment type. | 
|  | NONE, | 
|  | // Single-threaded Apartment. | 
|  | STA, | 
|  | // Multi-threaded Apartment. | 
|  | MTA, | 
|  | }; | 
|  |  | 
|  | #if DCHECK_IS_ON() | 
|  |  | 
|  | // DCHECKs if COM is not initialized on this thread as an STA or MTA. | 
|  | // |message| is optional and is used for the DCHECK if specified. | 
|  | BASE_EXPORT void AssertComInitialized(const char* message = nullptr); | 
|  |  | 
|  | // DCHECKs if |apartment_type| is not the same as the current thread's apartment | 
|  | // type. | 
|  | BASE_EXPORT void AssertComApartmentType(ComApartmentType apartment_type); | 
|  |  | 
|  | #else   // DCHECK_IS_ON() | 
|  | inline void AssertComInitialized() {} | 
|  | inline void AssertComApartmentType(ComApartmentType apartment_type) {} | 
|  | #endif  // DCHECK_IS_ON() | 
|  |  | 
|  | }  // namespace win | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_WIN_COM_INIT_UTIL_H_ |