xref: /aosp_15_r20/external/cronet/base/win/scoped_winrt_initializer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/win/scoped_winrt_initializer.h"
6 
7 #include <roapi.h>
8 
9 #include "base/check_op.h"
10 #include "base/win/com_init_util.h"
11 
12 namespace base::win {
13 
ScopedWinrtInitializer()14 ScopedWinrtInitializer::ScopedWinrtInitializer()
15     : hr_(::RoInitialize(RO_INIT_MULTITHREADED)) {
16   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
17 #if DCHECK_IS_ON()
18   if (SUCCEEDED(hr_))
19     AssertComApartmentType(ComApartmentType::MTA);
20   else
21     DCHECK_NE(RPC_E_CHANGED_MODE, hr_) << "Invalid COM thread model change";
22 #endif
23 }
24 
~ScopedWinrtInitializer()25 ScopedWinrtInitializer::~ScopedWinrtInitializer() {
26   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
27   if (SUCCEEDED(hr_))
28     ::RoUninitialize();
29 }
30 
Succeeded() const31 bool ScopedWinrtInitializer::Succeeded() const {
32   return SUCCEEDED(hr_);
33 }
34 
35 }  // namespace base::win
36