Home | History | Annotate | Download | only in test
      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