15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef WIN8_METRO_DRIVER_WINRT_UTILS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WIN8_METRO_DRIVER_WINRT_UTILS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <roapi.h>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.applicationmodel.core.h>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CheckHR(HRESULT hr, const char* str = nullptr);
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)HSTRING MakeHString(const base::string16& str);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 MakeStdWString(HSTRING hstring);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace winrt_utils {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<unsigned int size, typename T>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT CreateActivationFactory(wchar_t const (&class_name)[size], T** object) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mswrw::HStringReference ref_class_name(class_name);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return winfoundtn::GetActivationFactory(ref_class_name.Get(), object);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DECLARE_CREATE_PROPERTY(Name, Type) \
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT Create ## Name ## Property( \
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Type value, \
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    winfoundtn::IPropertyValue** prop);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(String, HSTRING);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(Int16, INT16);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(Int32, INT32);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(Int64, INT64);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(UInt8, UINT8);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(UInt16, UINT16);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(UInt32, UINT32);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DECLARE_CREATE_PROPERTY(UInt64, UINT64);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compares |lhs| with |rhs| and return the |result| as
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowsCompareStringOrdinal would do, i.e.,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// -1 if |lhs| is less than |rhs|, 0 if they are equal, and
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +1 if |lhs| is greater than |rhs|.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HRESULT CompareProperties(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    winfoundtn::IPropertyValue* lhs, winfoundtn::IPropertyValue* rhs,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    INT32* result);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Looks for a pinned taskbar shortcut in the current user's profile. If it
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// finds one, will return any arguments that have been appended to the
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shortcut's command line. This is intended for scenarios where those shortcut
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// parameters are ordinarily ignored (i.e. metro apps on win8). Returns an
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty string on failure.
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 ReadArgumentsFromPinnedTaskbarShortcut();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace winrt_utils
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // WIN8_METRO_DRIVER_WINRT_UTILS_H_
61