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_node_data.h"
     10 #include "content/common/accessibility_notification.h"
     11 #include "content/common/view_message_enums.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   AccessibilityNotificationWaiter(
     27       Shell* shell,
     28       AccessibilityMode accessibility_mode,
     29       AccessibilityNotification notification);
     30   ~AccessibilityNotificationWaiter();
     31 
     32   // Blocks until the specific accessibility notification registered in
     33   // AccessibilityNotificationWaiter is received. Ignores notifications for
     34   // "about:blank".
     35   void WaitForNotification();
     36 
     37   // After WaitForNotification has returned, this will retrieve
     38   // the tree of accessibility nodes received from the renderer process.
     39   const AccessibilityNodeDataTreeNode& GetAccessibilityNodeDataTree() const;
     40 
     41  private:
     42   // Callback from RenderViewHostImpl.
     43   void OnAccessibilityNotification(AccessibilityNotification notification);
     44 
     45   // Helper function to determine if the accessibility tree in
     46   // GetAccessibilityNodeDataTree() is about the page with the url
     47   // "about:blank".
     48   bool IsAboutBlank();
     49 
     50   Shell* shell_;
     51   RenderViewHostImpl* view_host_;
     52   AccessibilityNotification notification_to_wait_for_;
     53   scoped_refptr<MessageLoopRunner> loop_runner_;
     54   base::WeakPtrFactory<AccessibilityNotificationWaiter> weak_factory_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(AccessibilityNotificationWaiter);
     57 };
     58 
     59 }  // namespace content
     60 
     61 #endif  // CONTENT_TEST_ACCESSIBILITY_BROWSER_TEST_UTILS_H_
     62