|  | // Copyright 2014 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 UI_VIEWS_TEST_X11_PROPERTY_CHANGE_WAITER_H_ | 
|  | #define UI_VIEWS_TEST_X11_PROPERTY_CHANGE_WAITER_H_ | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/memory/scoped_ptr.h" | 
|  | #include "ui/events/platform/platform_event_dispatcher.h" | 
|  | #include "ui/events/platform/platform_event_types.h" | 
|  | #include "ui/gfx/x/x11_types.h" | 
|  |  | 
|  | namespace ui { | 
|  | class ScopedEventDispatcher; | 
|  | class X11AtomCache; | 
|  | } | 
|  |  | 
|  | namespace views { | 
|  |  | 
|  | // Blocks till the value of |property| on |window| changes. | 
|  | class X11PropertyChangeWaiter : public ui::PlatformEventDispatcher { | 
|  | public: | 
|  | X11PropertyChangeWaiter(XID window, const char* property); | 
|  | virtual ~X11PropertyChangeWaiter(); | 
|  |  | 
|  | // Blocks till the value of |property_| changes. | 
|  | virtual void Wait(); | 
|  |  | 
|  | protected: | 
|  | // Returns whether the run loop can exit. | 
|  | virtual bool ShouldKeepOnWaiting(const ui::PlatformEvent& event); | 
|  |  | 
|  | XID xwindow() const { | 
|  | return x_window_; | 
|  | } | 
|  |  | 
|  | private: | 
|  | // ui::PlatformEventDispatcher: | 
|  | virtual bool CanDispatchEvent(const ui::PlatformEvent& event) override; | 
|  | virtual uint32_t DispatchEvent(const ui::PlatformEvent& event) override; | 
|  |  | 
|  | XID x_window_; | 
|  | const char* property_; | 
|  |  | 
|  | // Whether Wait() should block. | 
|  | bool wait_; | 
|  |  | 
|  | // Ends the run loop. | 
|  | base::Closure quit_closure_; | 
|  |  | 
|  | // The event mask to be restored upon X11PropertyChangeWaiter's destruction. | 
|  | long old_event_mask_; | 
|  |  | 
|  | scoped_ptr<ui::ScopedEventDispatcher> dispatcher_; | 
|  |  | 
|  | scoped_ptr<ui::X11AtomCache> atom_cache_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(X11PropertyChangeWaiter); | 
|  | }; | 
|  |  | 
|  | }  // namespace views | 
|  |  | 
|  | #endif  // UI_VIEWS_TEST_X11_PROPERTY_CHANGE_WAITER_H_ |