Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / content / browser / accessibility / browser_accessibility_manager_win.h
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_