Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / accessibility / accessibility_extension_api.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 CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_
6 #define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_
7
8 #include <string>
9
10 #include "base/compiler_specific.h"
11 #include "base/memory/singleton.h"
12 #include "base/values.h"
13 #include "chrome/browser/accessibility/accessibility_events.h"
14 #include "chrome/browser/extensions/chrome_extension_function.h"
15 #include "ui/accessibility/ax_enums.h"
16
17 namespace extensions {
18 class ExtensionHost;
19 } // namespace extensions
20
21 // Observes the profile and routes accessibility notifications as events
22 // to the extension system.
23 class ExtensionAccessibilityEventRouter {
24  public:
25   typedef base::Callback<void(ui::AXEvent,
26                               const AccessibilityControlInfo*)>
27       ControlEventCallback;
28   // Single instance of the event router.
29   static ExtensionAccessibilityEventRouter* GetInstance();
30
31   // Get the dict representing the last control that received an
32   // OnControlFocus event.
33   base::DictionaryValue* last_focused_control_dict() {
34     return &last_focused_control_dict_;
35   }
36
37   // Accessibility support is disabled until an extension expicitly enables
38   // it, so that this extension api has no impact on Chrome's performance
39   // otherwise.  These methods handle enabling, disabling, and querying the
40   // status.
41   void SetAccessibilityEnabled(bool enabled);
42   bool IsAccessibilityEnabled() const;
43
44   // Set and remove callbacks (used for testing, to confirm that events are
45   // getting through).
46   void SetControlEventCallbackForTesting(ControlEventCallback callback);
47   void ClearControlEventCallback();
48
49   // Route a window-related accessibility event.
50   void HandleWindowEvent(ui::AXEvent event,
51                          const AccessibilityWindowInfo* info);
52
53   // Route a menu-related accessibility event.
54   void HandleMenuEvent(ui::AXEvent event,
55                        const AccessibilityMenuInfo* info);
56
57   // Route a control-related accessibility event.
58   void HandleControlEvent(ui::AXEvent event,
59                           const AccessibilityControlInfo* info);
60
61   void OnChromeVoxLoadStateChanged(
62       Profile* profile,
63       bool loading,
64       bool make_announcements);
65
66   static void DispatchEventToChromeVox(
67       Profile* profile,
68       const char* event_name,
69       scoped_ptr<base::ListValue> event_args);
70
71  private:
72   friend struct DefaultSingletonTraits<ExtensionAccessibilityEventRouter>;
73
74   ExtensionAccessibilityEventRouter();
75   virtual ~ExtensionAccessibilityEventRouter();
76
77   void OnWindowOpened(const AccessibilityWindowInfo* details);
78   void OnControlFocused(const AccessibilityControlInfo* details);
79   void OnControlAction(const AccessibilityControlInfo* details);
80   void OnControlHover(const AccessibilityControlInfo* details);
81   void OnTextChanged(const AccessibilityControlInfo* details);
82   void OnMenuOpened(const AccessibilityMenuInfo* details);
83   void OnMenuClosed(const AccessibilityMenuInfo* details);
84
85   void DispatchEvent(Profile* profile,
86                      const char* event_name,
87                      scoped_ptr<base::ListValue> event_args);
88
89   base::DictionaryValue last_focused_control_dict_;
90
91   bool enabled_;
92
93   // For testing.
94   ControlEventCallback control_event_callback_;
95
96   DISALLOW_COPY_AND_ASSIGN(ExtensionAccessibilityEventRouter);
97 };
98
99 // API function that enables or disables accessibility support.  Event
100 // listeners are only installed when accessibility support is enabled, to
101 // minimize the impact.
102 class AccessibilityPrivateSetAccessibilityEnabledFunction
103     : public ChromeSyncExtensionFunction {
104   ~AccessibilityPrivateSetAccessibilityEnabledFunction() override {}
105   bool RunSync() override;
106   DECLARE_EXTENSION_FUNCTION("accessibilityPrivate.setAccessibilityEnabled",
107                              ACCESSIBILITY_PRIVATE_SETACCESSIBILITYENABLED)
108 };
109
110 // API function that enables or disables web content accessibility support.
111 class AccessibilityPrivateSetNativeAccessibilityEnabledFunction
112     : public ChromeSyncExtensionFunction {
113   ~AccessibilityPrivateSetNativeAccessibilityEnabledFunction() override {}
114   bool RunSync() override;
115   DECLARE_EXTENSION_FUNCTION(
116       "accessibilityPrivate.setNativeAccessibilityEnabled",
117       ACCESSIBILITY_PRIVATE_SETNATIVEACCESSIBILITYENABLED)
118 };
119
120 // API function that returns the most recent focused control.
121 class AccessibilityPrivateGetFocusedControlFunction
122     : public ChromeSyncExtensionFunction {
123   ~AccessibilityPrivateGetFocusedControlFunction() override {}
124   bool RunSync() override;
125   DECLARE_EXTENSION_FUNCTION("accessibilityPrivate.getFocusedControl",
126                              ACCESSIBILITY_PRIVATE_GETFOCUSEDCONTROL)
127 };
128
129 // API function that returns alerts being shown on the give tab.
130 class AccessibilityPrivateGetAlertsForTabFunction
131     : public ChromeSyncExtensionFunction {
132   ~AccessibilityPrivateGetAlertsForTabFunction() override {}
133   bool RunSync() override;
134   DECLARE_EXTENSION_FUNCTION("accessibilityPrivate.getAlertsForTab",
135                              ACCESSIBILITY_PRIVATE_GETALERTSFORTAB)
136 };
137
138 // API function that sets the location of the accessibility focus ring.
139 class AccessibilityPrivateSetFocusRingFunction
140     : public ChromeSyncExtensionFunction {
141   ~AccessibilityPrivateSetFocusRingFunction() override {}
142   bool RunSync() override;
143   DECLARE_EXTENSION_FUNCTION("accessibilityPrivate.setFocusRing",
144                              ACCESSIBILITY_PRIVATE_SETFOCUSRING)
145 };
146
147 #endif  // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EXTENSION_API_H_