// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WIN8_TEST_UI_AUTOMATION_CLIENT_H_ #define WIN8_TEST_UI_AUTOMATION_CLIENT_H_ // This file contains UI automation implementation details for the // OpenWithDialogController. See that class for consumable entrypoints. #include <windows.h> #include <vector> #include "base/basictypes.h" #include "base/callback_forward.h" #include "base/memory/weak_ptr.h" #include "base/strings/string16.h" #include "base/threading/thread.h" #include "base/threading/thread_checker.h" namespace win8 { namespace internal { // An asynchronous UI automation client that waits for the appearance of a // Window of a particular class and then invokes one of its children identified // by name. An instance may be destroyed at any time after Begin() is invoked. // Any pending operation is cancelled. class UIAutomationClient { public: // If the HRESULT argument indicates success, the automation client has been // initialized, has installed its Window observer, and is ready to process // the named window. Otherwise, initialization has failed and ResultCallback // will not be invoked. typedef base::Callback<void(HRESULT)> InitializedCallback; // If the HRESULT argument indicates success, the desired item in the window // was invoked. Otherwise, the string vector (if not empty) contains the list // of possible items in the window. typedef base::Callback<void(HRESULT, std::vector<base::string16>)> ResultCallback; UIAutomationClient(); ~UIAutomationClient(); // Starts the client. Invokes |callback| once the client is ready or upon // failure to start, in which case |result_callback| will never be called. // Otherwise, |result_callback| will be invoked once |item_name| has been // invoked. void Begin(const wchar_t* class_name, const base::string16& item_name, const InitializedCallback& init_callback, const ResultCallback& result_callback); private: class Context; base::ThreadChecker thread_checker_; // A thread in the COM MTA in which automation calls are made. base::Thread automation_thread_; // A pointer to the context object that lives on the automation thread. base::WeakPtr<Context> context_; DISALLOW_COPY_AND_ASSIGN(UIAutomationClient); }; } // namespace internal } // namespace win8 #endif // WIN8_TEST_UI_AUTOMATION_CLIENT_H_