15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <oleacc.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/scoped_comptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/accessibility/browser_accessibility_manager.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserAccessibilityWin; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Manages a tree of BrowserAccessibilityWin objects. 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CONTENT_EXPORT BrowserAccessibilityManagerWin 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public BrowserAccessibilityManager { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserAccessibilityManagerWin( 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const ui::AXTreeUpdate& initial_tree, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserAccessibilityDelegate* delegate, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactory()); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BrowserAccessibilityManagerWin(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static ui::AXTreeUpdate GetEmptyDocument(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the closest containing HWND. 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HWND GetParentHWND(); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The IAccessible for the parent window. 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IAccessible* GetParentIAccessible(); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Calls NotifyWinEvent if the parent window's IAccessible pointer is known. 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void MaybeCallNotifyWinEvent(DWORD event, LONG child_id); 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // AXTree methods 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnNodeWillBeDeleted(ui::AXNode* node) OVERRIDE; 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnNodeCreated(ui::AXNode* node) OVERRIDE; 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserAccessibilityManager methods 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnWindowFocused() OVERRIDE; 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void NotifyAccessibilityEvent( 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::AXEvent event_type, BrowserAccessibility* node) OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Track this object and post a VISIBLE_DATA_CHANGED notification when 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its container scrolls. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dmazzoni): remove once http://crbug.com/113483 is fixed. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TrackScrollingObject(BrowserAccessibilityWin* node); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Return a pointer to the object corresponding to the given windows-specific 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // unique id, does not make a new reference. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserAccessibilityWin* GetFromUniqueIdWin(LONG unique_id_win); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Called when |accessible_hwnd_| is deleted by its parent. 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnAccessibleHwndDeleted(); 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // BrowserAccessibilityManager methods 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnRootChanged(ui::AXNode* new_root) OVERRIDE; 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Give BrowserAccessibilityManager::Create access to our constructor. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class BrowserAccessibilityManager; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Track the most recent object that has been asked to scroll and 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // post a notification directly on it when it reaches its destination. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dmazzoni): remove once http://crbug.com/113483 is fixed. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserAccessibilityWin* tracked_scroll_object_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A mapping from the Windows-specific unique IDs (unique within the 740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // browser process) to accessibility ids within this page. 750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::hash_map<long, int32> unique_id_to_ax_id_map_; 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Set to true if we need to fire a focus event on the root as soon as 786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // possible. 796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) bool focus_event_on_root_needed_; 806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityManagerWin); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_MANAGER_WIN_H_ 87