1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef WIN8_METRO_DRIVER_WINRT_UTILS_H_
6#define WIN8_METRO_DRIVER_WINRT_UTILS_H_
7
8#include <string>
9
10#include <roapi.h>
11#include <windows.applicationmodel.core.h>
12
13#include "base/strings/string16.h"
14
15void CheckHR(HRESULT hr, const char* str = nullptr);
16
17HSTRING MakeHString(const base::string16& str);
18
19base::string16 MakeStdWString(HSTRING hstring);
20
21namespace winrt_utils {
22
23template<unsigned int size, typename T>
24HRESULT CreateActivationFactory(wchar_t const (&class_name)[size], T** object) {
25  mswrw::HStringReference ref_class_name(class_name);
26  return winfoundtn::GetActivationFactory(ref_class_name.Get(), object);
27}
28
29#define DECLARE_CREATE_PROPERTY(Name, Type) \
30HRESULT Create ## Name ## Property( \
31    Type value, \
32    winfoundtn::IPropertyValue** prop);
33
34DECLARE_CREATE_PROPERTY(String, HSTRING);
35DECLARE_CREATE_PROPERTY(Int16, INT16);
36DECLARE_CREATE_PROPERTY(Int32, INT32);
37DECLARE_CREATE_PROPERTY(Int64, INT64);
38DECLARE_CREATE_PROPERTY(UInt8, UINT8);
39DECLARE_CREATE_PROPERTY(UInt16, UINT16);
40DECLARE_CREATE_PROPERTY(UInt32, UINT32);
41DECLARE_CREATE_PROPERTY(UInt64, UINT64);
42
43// Compares |lhs| with |rhs| and return the |result| as
44// WindowsCompareStringOrdinal would do, i.e.,
45// -1 if |lhs| is less than |rhs|, 0 if they are equal, and
46// +1 if |lhs| is greater than |rhs|.
47HRESULT CompareProperties(
48    winfoundtn::IPropertyValue* lhs, winfoundtn::IPropertyValue* rhs,
49    INT32* result);
50
51// Looks for a pinned taskbar shortcut in the current user's profile. If it
52// finds one, will return any arguments that have been appended to the
53// shortcut's command line. This is intended for scenarios where those shortcut
54// parameters are ordinarily ignored (i.e. metro apps on win8). Returns an
55// empty string on failure.
56base::string16 ReadArgumentsFromPinnedTaskbarShortcut();
57
58}  // namespace winrt_utils
59
60#endif  // WIN8_METRO_DRIVER_WINRT_UTILS_H_
61