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