xref: /aosp_15_r20/external/cronet/base/win/scoped_winrt_initializer.cc (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 #include "base/win/scoped_winrt_initializer.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <roapi.h>
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/win/com_init_util.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace base::win {
13*6777b538SAndroid Build Coastguard Worker 
ScopedWinrtInitializer()14*6777b538SAndroid Build Coastguard Worker ScopedWinrtInitializer::ScopedWinrtInitializer()
15*6777b538SAndroid Build Coastguard Worker     : hr_(::RoInitialize(RO_INIT_MULTITHREADED)) {
16*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
17*6777b538SAndroid Build Coastguard Worker #if DCHECK_IS_ON()
18*6777b538SAndroid Build Coastguard Worker   if (SUCCEEDED(hr_))
19*6777b538SAndroid Build Coastguard Worker     AssertComApartmentType(ComApartmentType::MTA);
20*6777b538SAndroid Build Coastguard Worker   else
21*6777b538SAndroid Build Coastguard Worker     DCHECK_NE(RPC_E_CHANGED_MODE, hr_) << "Invalid COM thread model change";
22*6777b538SAndroid Build Coastguard Worker #endif
23*6777b538SAndroid Build Coastguard Worker }
24*6777b538SAndroid Build Coastguard Worker 
~ScopedWinrtInitializer()25*6777b538SAndroid Build Coastguard Worker ScopedWinrtInitializer::~ScopedWinrtInitializer() {
26*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
27*6777b538SAndroid Build Coastguard Worker   if (SUCCEEDED(hr_))
28*6777b538SAndroid Build Coastguard Worker     ::RoUninitialize();
29*6777b538SAndroid Build Coastguard Worker }
30*6777b538SAndroid Build Coastguard Worker 
Succeeded() const31*6777b538SAndroid Build Coastguard Worker bool ScopedWinrtInitializer::Succeeded() const {
32*6777b538SAndroid Build Coastguard Worker   return SUCCEEDED(hr_);
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker }  // namespace base::win
36