|  | // 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_CORE_WINRT_UTIL_H_ | 
|  | #define BASE_WIN_CORE_WINRT_UTIL_H_ | 
|  |  | 
|  | #include <hstring.h> | 
|  | #include <inspectable.h> | 
|  | #include <roapi.h> | 
|  | #include <windef.h> | 
|  |  | 
|  | #include "base/base_export.h" | 
|  | #include "base/strings/string16.h" | 
|  | #include "base/win/scoped_hstring.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace win { | 
|  |  | 
|  | // Provides access to Core WinRT functions which may not be available on | 
|  | // Windows 7. Loads functions dynamically at runtime to prevent library | 
|  | // dependencies. | 
|  |  | 
|  | BASE_EXPORT bool ResolveCoreWinRTDelayload(); | 
|  |  | 
|  | // The following stubs are provided for when component build is enabled, in | 
|  | // order to avoid the propagation of delay-loading CoreWinRT to other modules. | 
|  |  | 
|  | BASE_EXPORT HRESULT RoInitialize(RO_INIT_TYPE init_type); | 
|  |  | 
|  | BASE_EXPORT void RoUninitialize(); | 
|  |  | 
|  | BASE_EXPORT HRESULT RoGetActivationFactory(HSTRING class_id, | 
|  | const IID& iid, | 
|  | void** out_factory); | 
|  |  | 
|  | BASE_EXPORT HRESULT RoActivateInstance(HSTRING class_id, | 
|  | IInspectable** instance); | 
|  |  | 
|  | // Retrieves an activation factory for the type specified. | 
|  | template <typename InterfaceType, char16 const* runtime_class_id> | 
|  | HRESULT GetActivationFactory(InterfaceType** factory) { | 
|  | ScopedHString class_id_hstring = ScopedHString::Create(runtime_class_id); | 
|  | if (!class_id_hstring.is_valid()) | 
|  | return E_FAIL; | 
|  |  | 
|  | return base::win::RoGetActivationFactory(class_id_hstring.get(), | 
|  | IID_PPV_ARGS(factory)); | 
|  | } | 
|  |  | 
|  | }  // namespace win | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_WIN_CORE_WINRT_UTIL_H_ |