| // 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_SCOPED_WINRT_INITIALIZER_H_ | 
 | #define BASE_WIN_SCOPED_WINRT_INITIALIZER_H_ | 
 |  | 
 | #include <objbase.h> | 
 |  | 
 | #include "base/base_export.h" | 
 | #include "base/threading/thread_checker.h" | 
 | #include "base/win/scoped_windows_thread_environment.h" | 
 |  | 
 | namespace base { | 
 | namespace win { | 
 |  | 
 | // Initializes the Windows Runtime in the constructor and uninitalizes the | 
 | // Windows Runtime in the destructor. As a side effect, COM is also initialized | 
 | // as an MTA in the constructor and correspondingly uninitialized in the | 
 | // destructor. | 
 | // | 
 | // Generally, you should only use this on Windows 8 or above. It is redundant | 
 | // to use ScopedComInitializer in conjunction with ScopedWinrtInitializer. | 
 | // | 
 | // WARNING: This should only be used once per thread, ideally scoped to a | 
 | // similar lifetime as the thread itself. You should not be using this in random | 
 | // utility functions that make Windows Runtime calls -- instead ensure these | 
 | // functions are running on a Windows Runtime supporting thread! | 
 | class BASE_EXPORT ScopedWinrtInitializer | 
 |     : public ScopedWindowsThreadEnvironment { | 
 |  public: | 
 |   ScopedWinrtInitializer(); | 
 |   ~ScopedWinrtInitializer() override; | 
 |  | 
 |   // ScopedWindowsThreadEnvironment: | 
 |   bool Succeeded() const override; | 
 |  | 
 |  private: | 
 |   const HRESULT hr_; | 
 |   THREAD_CHECKER(thread_checker_); | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(ScopedWinrtInitializer); | 
 | }; | 
 |  | 
 | }  // namespace win | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_WIN_SCOPED_WINRT_INITIALIZER_H_ |