1 // Copyright 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 CONTENT_TEST_ACCESSIBILITY_BROWSER_TEST_UTILS_H_ 6 #define CONTENT_TEST_ACCESSIBILITY_BROWSER_TEST_UTILS_H_ 7 8 #include "base/memory/weak_ptr.h" 9 #include "content/common/view_message_enums.h" 10 #include "ui/accessibility/ax_node_data.h" 11 #include "ui/accessibility/ax_tree.h" 12 13 namespace content { 14 15 class MessageLoopRunner; 16 class RenderViewHostImpl; 17 class Shell; 18 19 // Create an instance of this class *before* doing any operation that 20 // might generate an accessibility event (like a page navigation or 21 // clicking on a button). Then call WaitForNotification 22 // afterwards to block until the specified accessibility notification has been 23 // received. 24 class AccessibilityNotificationWaiter { 25 public: 26 explicit AccessibilityNotificationWaiter(Shell* shell); 27 AccessibilityNotificationWaiter( 28 Shell* shell, 29 AccessibilityMode accessibility_mode, 30 ui::AXEvent event); 31 ~AccessibilityNotificationWaiter(); 32 33 // Blocks until the specific accessibility notification registered in 34 // AccessibilityNotificationWaiter is received. Ignores notifications for 35 // "about:blank". 36 void WaitForNotification(); 37 38 // After WaitForNotification has returned, this will retrieve 39 // the tree of accessibility nodes received from the renderer process. 40 const ui::AXTree& GetAXTree() const; 41 42 // After WaitForNotification returns, use this to retrieve the id of the 43 // node that was the target of the event. event_target_id()44 int event_target_id() { return event_target_id_; } 45 46 private: 47 // Callback from RenderViewHostImpl. 48 void OnAccessibilityEvent(ui::AXEvent event, int event_target_id); 49 50 // Helper function to determine if the accessibility tree in 51 // GetAXTree() is about the page with the url "about:blank". 52 bool IsAboutBlank(); 53 54 Shell* shell_; 55 RenderViewHostImpl* view_host_; 56 ui::AXEvent event_to_wait_for_; 57 scoped_refptr<MessageLoopRunner> loop_runner_; 58 base::WeakPtrFactory<AccessibilityNotificationWaiter> weak_factory_; 59 int event_target_id_; 60 61 DISALLOW_COPY_AND_ASSIGN(AccessibilityNotificationWaiter); 62 }; 63 64 } // namespace content 65 66 #endif // CONTENT_TEST_ACCESSIBILITY_BROWSER_TEST_UTILS_H_ 67