Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: chrome/browser/browser_accessibility_manager_win.h

Issue 3591003: Make BrowserAccessibilityManager cross platform. Step 1.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Some cleanup. Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_
6 #define CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_
7 #pragma once
8
9 #include <atlbase.h>
10 #include <atlcom.h>
11 #include <oleacc.h>
12
13 #include <hash_map>
14 #include <vector>
15
16 #include "base/hash_tables.h"
17 #include "base/scoped_comptr_win.h"
18 #include "base/scoped_ptr.h"
19 #include "webkit/glue/webaccessibility.h"
20
21 class BrowserAccessibility;
22 struct ViewHostMsg_AccessibilityNotification_Params;
23
24 class BrowserAccessibilityFactory {
25 public:
26 virtual ~BrowserAccessibilityFactory() {}
27
28 // Create an instance of BrowserAccessibility and return a new
29 // reference to it.
30 virtual BrowserAccessibility* Create();
31 };
32
33 // Class that can perform actions on behalf of the BrowserAccessibilityManager.
34 class BrowserAccessibilityDelegate {
35 public:
36 virtual ~BrowserAccessibilityDelegate() {}
37 virtual void SetAccessibilityFocus(int acc_obj_id) = 0;
38 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0;
39 };
40
41 // Manages a tree of BrowserAccessibility objects.
42 class BrowserAccessibilityManager {
43 public:
44 BrowserAccessibilityManager(
45 HWND parent_hwnd,
46 const webkit_glue::WebAccessibility& src,
47 BrowserAccessibilityDelegate* delegate,
48 BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory());
49
50 virtual ~BrowserAccessibilityManager();
51
52 // Return a pointer to the root of the tree, does not make a new reference.
53 BrowserAccessibility* GetRoot();
54
55 // Removes the BrowserAccessibility child_id from the manager.
56 void Remove(LONG child_id);
57
58 // Return a pointer to the object corresponding to the given child_id,
59 // does not make a new reference.
60 BrowserAccessibility* GetFromChildID(LONG child_id);
61
62 // Get a the default IAccessible for the parent window, does not make a
63 // new reference.
64 IAccessible* GetParentWindowIAccessible();
65
66 // Get the parent window.
67 HWND GetParentHWND();
68
69 // Return the object that has focus, if it's a descandant of the
70 // given root (inclusive). Does not make a new reference.
71 BrowserAccessibility* GetFocus(BrowserAccessibility* root);
72
73 // Tell the renderer to set focus to this node.
74 void SetFocus(const BrowserAccessibility& node);
75
76 // Tell the renderer to do the default action for this node.
77 void DoDefaultAction(const BrowserAccessibility& node);
78
79 // Called when the renderer process has notified us of about tree changes.
80 // Send a notification to MSAA clients of the change.
81 void OnAccessibilityNotifications(
82 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params);
83
84 private:
85 // Update the accessibility tree with an updated WebAccessibility tree or
86 // subtree received from the renderer process. Returns the updated node or
87 // NULL if no node was updated.
88 BrowserAccessibility* UpdateTree(
89 const webkit_glue::WebAccessibility& acc_obj);
90
91 void OnAccessibilityObjectStateChange(
92 const webkit_glue::WebAccessibility& acc_obj);
93 void OnAccessibilityObjectChildrenChange(
94 const webkit_glue::WebAccessibility& acc_obj);
95 void OnAccessibilityObjectFocusChange(
96 const webkit_glue::WebAccessibility& acc_obj);
97 void OnAccessibilityObjectLoadComplete(
98 const webkit_glue::WebAccessibility& acc_obj);
99 void OnAccessibilityObjectValueChange(
100 const webkit_glue::WebAccessibility& acc_obj);
101
102 // Returns the next MSAA child id.
103 static LONG GetNextChildID();
104
105 // Recursively build a tree of BrowserAccessibility objects from
106 // the WebAccessibility tree received from the renderer process.
107 BrowserAccessibility* CreateAccessibilityTree(
108 BrowserAccessibility* parent,
109 int child_id,
110 const webkit_glue::WebAccessibility& src,
111 int index_in_parent);
112
113 // The parent window.
114 HWND parent_hwnd_;
115
116 // The object that can perform actions on our behalf.
117 BrowserAccessibilityDelegate* delegate_;
118
119 // Factory to create BrowserAccessibility objects (for dependency injection).
120 scoped_ptr<BrowserAccessibilityFactory> factory_;
121
122 // A default IAccessible instance for the parent window.
123 ScopedComPtr<IAccessible> window_iaccessible_;
124
125 // The root of the tree of IAccessible objects and the element that
126 // currently has focus, if any.
127 BrowserAccessibility* root_;
128 BrowserAccessibility* focus_;
129
130 // A mapping from the IDs of objects in the renderer, to the child IDs
131 // we use internally here.
132 base::hash_map<int, LONG> renderer_id_to_child_id_map_;
133
134 // A mapping from child IDs to BrowserAccessibility objects.
135 base::hash_map<LONG, BrowserAccessibility*> child_id_map_;
136
137 // The next child ID to use; static so that they're global to the process.
138 // Screen readers cache these IDs to see if they've seen the same object
139 // before so we should avoid reusing them within the same project.
140 static LONG next_child_id_;
141
142 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager);
143 };
144
145 #endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698