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/accessibility_mode_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 RenderFrameHostImpl; 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 RenderFrameHostImpl* frame_host, 33 ui::AXEvent event); 34 ~AccessibilityNotificationWaiter(); 35 36 // Blocks until the specific accessibility notification registered in 37 // AccessibilityNotificationWaiter is received. Ignores notifications for 38 // "about:blank". 39 void WaitForNotification(); 40 41 // After WaitForNotification has returned, this will retrieve 42 // the tree of accessibility nodes received from the renderer process. 43 const ui::AXTree& GetAXTree() const; 44 45 // After WaitForNotification returns, use this to retrieve the id of the 46 // node that was the target of the event. 47 int event_target_id() { return event_target_id_; } 48 49 private: 50 // Callback from RenderViewHostImpl. 51 void OnAccessibilityEvent(ui::AXEvent event, int event_target_id); 52 53 // Helper function to determine if the accessibility tree in 54 // GetAXTree() is about the page with the url "about:blank". 55 bool IsAboutBlank(); 56 57 RenderFrameHostImpl* frame_host_; 58 ui::AXEvent event_to_wait_for_; 59 scoped_refptr<MessageLoopRunner> loop_runner_; 60 int event_target_id_; 61 62 base::WeakPtrFactory<AccessibilityNotificationWaiter> weak_factory_; 63 64 DISALLOW_COPY_AND_ASSIGN(AccessibilityNotificationWaiter); 65 }; 66 67 } // namespace content 68 69 #endif // CONTENT_TEST_ACCESSIBILITY_BROWSER_TEST_UTILS_H_ 70