• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_
6 #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_
7 
8 #include <oleacc.h>
9 
10 #include "base/memory/scoped_ptr.h"
11 #include "base/win/scoped_comptr.h"
12 #include "content/browser/accessibility/browser_accessibility_manager.h"
13 
14 namespace content {
15 class BrowserAccessibilityWin;
16 
17 // Manages a tree of BrowserAccessibilityWin objects.
18 class CONTENT_EXPORT BrowserAccessibilityManagerWin
19     : public BrowserAccessibilityManager {
20  public:
21   BrowserAccessibilityManagerWin(
22       const ui::AXTreeUpdate& initial_tree,
23       BrowserAccessibilityDelegate* delegate,
24       BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
25 
26   virtual ~BrowserAccessibilityManagerWin();
27 
28   static ui::AXTreeUpdate GetEmptyDocument();
29 
30   // Get the closest containing HWND.
31   HWND GetParentHWND();
32 
33   // The IAccessible for the parent window.
34   IAccessible* GetParentIAccessible();
35 
36   // Calls NotifyWinEvent if the parent window's IAccessible pointer is known.
37   void MaybeCallNotifyWinEvent(DWORD event, LONG child_id);
38 
39   // AXTree methods
40   virtual void OnNodeWillBeDeleted(ui::AXNode* node) OVERRIDE;
41   virtual void OnNodeCreated(ui::AXNode* node) OVERRIDE;
42 
43   // BrowserAccessibilityManager methods
44   virtual void OnWindowFocused() OVERRIDE;
45   virtual void NotifyAccessibilityEvent(
46       ui::AXEvent event_type, BrowserAccessibility* node) OVERRIDE;
47 
48   // Track this object and post a VISIBLE_DATA_CHANGED notification when
49   // its container scrolls.
50   // TODO(dmazzoni): remove once http://crbug.com/113483 is fixed.
51   void TrackScrollingObject(BrowserAccessibilityWin* node);
52 
53   // Return a pointer to the object corresponding to the given windows-specific
54   // unique id, does not make a new reference.
55   BrowserAccessibilityWin* GetFromUniqueIdWin(LONG unique_id_win);
56 
57   // Called when |accessible_hwnd_| is deleted by its parent.
58   void OnAccessibleHwndDeleted();
59 
60  protected:
61   // BrowserAccessibilityManager methods
62   virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE;
63 
64  private:
65   // Give BrowserAccessibilityManager::Create access to our constructor.
66   friend class BrowserAccessibilityManager;
67 
68   // Track the most recent object that has been asked to scroll and
69   // post a notification directly on it when it reaches its destination.
70   // TODO(dmazzoni): remove once http://crbug.com/113483 is fixed.
71   BrowserAccessibilityWin* tracked_scroll_object_;
72 
73   // A mapping from the Windows-specific unique IDs (unique within the
74   // browser process) to accessibility ids within this page.
75   base::hash_map<long, int32> unique_id_to_ax_id_map_;
76 
77   // Set to true if we need to fire a focus event on the root as soon as
78   // possible.
79   bool focus_event_on_root_needed_;
80 
81   DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerWin);
82 };
83 
84 }  // namespace content
85 
86 #endif  // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_
87