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()14ScopedWinrtInitializer::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()25ScopedWinrtInitializer::~ScopedWinrtInitializer() { 26 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 27 if (SUCCEEDED(hr_)) 28 ::RoUninitialize(); 29 } 30 Succeeded() const31bool ScopedWinrtInitializer::Succeeded() const { 32 return SUCCEEDED(hr_); 33 } 34 35 } // namespace base::win 36