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