text: // 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 "fldserver/base/threading/thread_checker.h"
  #include "fldserver/base/win/scoped_windows_thread_environment.h"
  #include "fldserver/fldserver_config.h"
  
  #include <objbase.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 CORE_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_
  