- add sources.
[platform/framework/web/crosswalk.git] / src / win8 / test / ui_automation_client.h
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_UI_AUTOMATION_CLIENT_H_
6 #define WIN8_TEST_UI_AUTOMATION_CLIENT_H_
7
8 // This file contains UI automation implementation details for the
9 // OpenWithDialogController. See that class for consumable entrypoints.
10
11 #include <windows.h>
12 #include <vector>
13
14 #include "base/basictypes.h"
15 #include "base/callback_forward.h"
16 #include "base/memory/weak_ptr.h"
17 #include "base/strings/string16.h"
18 #include "base/threading/thread.h"
19 #include "base/threading/thread_checker.h"
20
21 namespace win8 {
22 namespace internal {
23
24 // An asynchronous UI automation client that waits for the appearance of a
25 // Window of a particular class and then invokes one of its children identified
26 // by name.  An instance may be destroyed at any time after Begin() is invoked.
27 // Any pending operation is cancelled.
28 class UIAutomationClient {
29  public:
30   // If the HRESULT argument indicates success, the automation client has been
31   // initialized, has installed its Window observer, and is ready to process
32   // the named window.  Otherwise, initialization has failed and ResultCallback
33   // will not be invoked.
34   typedef base::Callback<void(HRESULT)> InitializedCallback;
35
36   // If the HRESULT argument indicates success, the desired item in the window
37   // was invoked.  Otherwise, the string vector (if not empty) contains the list
38   // of possible items in the window.
39   typedef base::Callback<void(HRESULT, std::vector<string16>)> ResultCallback;
40
41   UIAutomationClient();
42   ~UIAutomationClient();
43
44   // Starts the client.  Invokes |callback| once the client is ready or upon
45   // failure to start, in which case |result_callback| will never be called.
46   // Otherwise, |result_callback| will be invoked once |item_name| has been
47   // invoked.
48   void Begin(const wchar_t* class_name,
49              const string16& item_name,
50              const InitializedCallback& init_callback,
51              const ResultCallback& result_callback);
52
53  private:
54   class Context;
55
56   base::ThreadChecker thread_checker_;
57
58   // A thread in the COM MTA in which automation calls are made.
59   base::Thread automation_thread_;
60
61   // A pointer to the context object that lives on the automation thread.
62   base::WeakPtr<Context> context_;
63
64   DISALLOW_COPY_AND_ASSIGN(UIAutomationClient);
65 };
66
67 }  // namespace internal
68 }  // namespace win8
69
70 #endif  // WIN8_TEST_UI_AUTOMATION_CLIENT_H_