1// Copyright (c) 2013 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_TEST_OPEN_WITH_DIALOG_ASYNC_H_
6#define WIN8_TEST_OPEN_WITH_DIALOG_ASYNC_H_
7
8#include <windows.h>
9
10#include "base/callback_forward.h"
11#include "base/strings/string16.h"
12
13namespace win8 {
14
15// Expected HRESULTS:
16//   S_OK - A choice was made.
17//   HRESULT_FROM_WIN32(ERROR_CANCELLED) - The dialog was dismissed.
18//   HRESULT_FROM_WIN32(RPC_S_CALL_FAILED) - OpenWith.exe died.
19typedef base::Callback<void(HRESULT)> OpenWithDialogCallback;
20
21// Calls SHOpenWithDialog on a dedicated thread, returning the result to the
22// caller via |callback| on the current thread.  The Windows SHOpenWithDialog
23// function blocks until the user makes a choice or dismisses the dialog (there
24// is no natural timeout nor a means by which it can be cancelled).  Note that
25// the dedicated thread will be leaked if the calling thread's message loop goes
26// away before the interaction completes.
27void OpenWithDialogAsync(HWND parent_window,
28                         const base::string16& file_name,
29                         const base::string16& file_type_class,
30                         int open_as_info_flags,
31                         const OpenWithDialogCallback& callback);
32
33}  // namespace win8
34
35#endif  // WIN8_TEST_OPEN_WITH_DIALOG_ASYNC_H_
36