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 WorkerScopedWinrtInitializer::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 WorkerScopedWinrtInitializer::~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 Workerbool 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