| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ | 5 #ifndef CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ |
| 6 #define CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ | 6 #define CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <atlbase.h> | 9 #include <atlbase.h> |
| 10 #include <atlcom.h> | 10 #include <atlcom.h> |
| 11 #include <oleacc.h> | 11 #include <oleacc.h> |
| 12 | 12 |
| 13 #include <hash_map> |
| 14 #include <vector> |
| 15 |
| 13 #include "base/hash_tables.h" | 16 #include "base/hash_tables.h" |
| 14 #include "base/scoped_comptr_win.h" | 17 #include "base/scoped_comptr_win.h" |
| 15 #include "base/scoped_ptr.h" | 18 #include "base/scoped_ptr.h" |
| 16 #include "webkit/glue/webaccessibility.h" | 19 #include "webkit/glue/webaccessibility.h" |
| 17 | 20 |
| 18 class BrowserAccessibility; | 21 class BrowserAccessibility; |
| 19 | 22 |
| 20 class BrowserAccessibilityFactory { | 23 class BrowserAccessibilityFactory { |
| 21 public: | 24 public: |
| 22 virtual ~BrowserAccessibilityFactory() {} | 25 virtual ~BrowserAccessibilityFactory() {} |
| 23 | 26 |
| 24 // Create an instance of BrowserAccessibility and return a new | 27 // Create an instance of BrowserAccessibility and return a new |
| 25 // reference to it. | 28 // reference to it. |
| 26 virtual BrowserAccessibility* Create(); | 29 virtual BrowserAccessibility* Create(); |
| 27 }; | 30 }; |
| 28 | 31 |
| 29 // Class that can perform actions on behalf of the BrowserAccessibilityManager. | 32 // Class that can perform actions on behalf of the BrowserAccessibilityManager. |
| 30 class BrowserAccessibilityDelegate { | 33 class BrowserAccessibilityDelegate { |
| 31 public: | 34 public: |
| 32 virtual ~BrowserAccessibilityDelegate() {} | 35 virtual ~BrowserAccessibilityDelegate() {} |
| 33 virtual void SetAccessibilityFocus(int acc_obj_id) = 0; | 36 virtual void SetAccessibilityFocus(int acc_obj_id) = 0; |
| 34 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; | 37 virtual void AccessibilityDoDefaultAction(int acc_obj_id) = 0; |
| 38 virtual void AccessibilityObjectChildrenChangeAck() = 0; |
| 35 }; | 39 }; |
| 36 | 40 |
| 37 // Manages a tree of BrowserAccessibility objects. | 41 // Manages a tree of BrowserAccessibility objects. |
| 38 class BrowserAccessibilityManager { | 42 class BrowserAccessibilityManager { |
| 39 public: | 43 public: |
| 40 BrowserAccessibilityManager( | 44 BrowserAccessibilityManager( |
| 41 HWND parent_hwnd, | 45 HWND parent_hwnd, |
| 42 const webkit_glue::WebAccessibility& src, | 46 const webkit_glue::WebAccessibility& src, |
| 43 BrowserAccessibilityDelegate* delegate, | 47 BrowserAccessibilityDelegate* delegate, |
| 44 BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory()); | 48 BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory()); |
| 45 | 49 |
| 46 virtual ~BrowserAccessibilityManager(); | 50 virtual ~BrowserAccessibilityManager(); |
| 47 | 51 |
| 48 // Return a pointer to the root of the tree, does not make a new reference. | 52 // Return a pointer to the root of the tree, does not make a new reference. |
| 49 BrowserAccessibility* GetRoot(); | 53 BrowserAccessibility* GetRoot(); |
| 50 | 54 |
| 55 // Removes the BrowserAccessibility child_id from the manager. |
| 56 void Remove(LONG child_id); |
| 57 |
| 51 // Return a pointer to the object corresponding to the given child_id, | 58 // Return a pointer to the object corresponding to the given child_id, |
| 52 // does not make a new reference. | 59 // does not make a new reference. |
| 53 BrowserAccessibility* GetFromChildID(LONG child_id); | 60 BrowserAccessibility* GetFromChildID(LONG child_id); |
| 54 | 61 |
| 55 // Get a the default IAccessible for the parent window, does not make a | 62 // Get a the default IAccessible for the parent window, does not make a |
| 56 // new reference. | 63 // new reference. |
| 57 IAccessible* GetParentWindowIAccessible(); | 64 IAccessible* GetParentWindowIAccessible(); |
| 58 | 65 |
| 59 // Get the parent window. | 66 // Get the parent window. |
| 60 HWND GetParentHWND(); | 67 HWND GetParentHWND(); |
| 61 | 68 |
| 62 // Return the object that has focus, if it's a descandant of the | 69 // Return the object that has focus, if it's a descandant of the |
| 63 // given root (inclusive). Does not make a new reference. | 70 // given root (inclusive). Does not make a new reference. |
| 64 BrowserAccessibility* GetFocus(BrowserAccessibility* root); | 71 BrowserAccessibility* GetFocus(BrowserAccessibility* root); |
| 65 | 72 |
| 66 // Tell the renderer to set focus to this node. | 73 // Tell the renderer to set focus to this node. |
| 67 void SetFocus(const BrowserAccessibility& node); | 74 void SetFocus(const BrowserAccessibility& node); |
| 68 | 75 |
| 69 // Tell the renderer to do the default action for this node. | 76 // Tell the renderer to do the default action for this node. |
| 70 void DoDefaultAction(const BrowserAccessibility& node); | 77 void DoDefaultAction(const BrowserAccessibility& node); |
| 71 | 78 |
| 72 // Called when the renderer process has notified us of a focus or state | 79 // Called when the renderer process has notified us of a focus, state, |
| 73 // change. Send a notification to MSAA clients of the change. | 80 // or children change. Send a notification to MSAA clients of the change. |
| 74 void OnAccessibilityFocusChange(int acc_obj_id); | 81 void OnAccessibilityFocusChange(int acc_obj_id); |
| 75 void OnAccessibilityObjectStateChange(int acc_obj_id); | 82 void OnAccessibilityObjectStateChange(int acc_obj_id); |
| 83 void OnAccessibilityObjectChildrenChange( |
| 84 const std::vector<webkit_glue::WebAccessibility>& acc_changes); |
| 76 | 85 |
| 77 private: | 86 private: |
| 87 // Returns the next MSAA child id. |
| 88 static LONG GetNextChildID(); |
| 89 |
| 78 // Recursively build a tree of BrowserAccessibility objects from | 90 // Recursively build a tree of BrowserAccessibility objects from |
| 79 // the WebAccessibility tree received from the renderer process. | 91 // the WebAccessibility tree received from the renderer process. |
| 80 BrowserAccessibility* CreateAccessibilityTree( | 92 BrowserAccessibility* CreateAccessibilityTree( |
| 81 BrowserAccessibility* parent, | 93 BrowserAccessibility* parent, |
| 94 int child_id, |
| 82 const webkit_glue::WebAccessibility& src, | 95 const webkit_glue::WebAccessibility& src, |
| 83 int index_in_parent); | 96 int index_in_parent); |
| 84 | 97 |
| 85 // The parent window. | 98 // The parent window. |
| 86 HWND parent_hwnd_; | 99 HWND parent_hwnd_; |
| 87 | 100 |
| 88 // The object that can perform actions on our behalf. | 101 // The object that can perform actions on our behalf. |
| 89 BrowserAccessibilityDelegate* delegate_; | 102 BrowserAccessibilityDelegate* delegate_; |
| 90 | 103 |
| 91 // Factory to create BrowserAccessibility objects (for dependency injection). | 104 // Factory to create BrowserAccessibility objects (for dependency injection). |
| (...skipping 16 matching lines...) Expand all Loading... |
| 108 | 121 |
| 109 // The next child ID to use; static so that they're global to the process. | 122 // The next child ID to use; static so that they're global to the process. |
| 110 // Screen readers cache these IDs to see if they've seen the same object | 123 // Screen readers cache these IDs to see if they've seen the same object |
| 111 // before so we should avoid reusing them within the same project. | 124 // before so we should avoid reusing them within the same project. |
| 112 static LONG next_child_id_; | 125 static LONG next_child_id_; |
| 113 | 126 |
| 114 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); | 127 DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManager); |
| 115 }; | 128 }; |
| 116 | 129 |
| 117 #endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ | 130 #endif // CHROME_BROWSER_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ |
| OLD | NEW |