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_ 71