accessibility_events.h revision f2477e01787aa58f445919b809d89e252beef54f
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_EVENTS_H_
6#define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EVENTS_H_
7
8#include <string>
9#include "base/compiler_specific.h"
10#include "ui/base/accessibility/accessibility_types.h"
11
12class AccessibilityControlInfo;
13class AccessibilityMenuInfo;
14class AccessibilityWindowInfo;
15class Profile;
16
17namespace base {
18class DictionaryValue;
19}
20
21// Notify the ExtensionAccessibilityEventRouter of the given accessibility
22// event and AccessibilityEventInfo details. Will not send if the profile's
23// pause level is nonzero (using profile->PauseAccessibilityEvents).
24void SendControlAccessibilityNotification(
25    ui::AccessibilityTypes::Event event,
26    AccessibilityControlInfo* info);
27
28void SendMenuAccessibilityNotification(
29    ui::AccessibilityTypes::Event event,
30    AccessibilityMenuInfo* info);
31
32void SendWindowAccessibilityNotification(
33    ui::AccessibilityTypes::Event event,
34    AccessibilityWindowInfo* info);
35
36// Abstract parent class for accessibility event information passed to event
37// listeners.
38class AccessibilityEventInfo {
39 public:
40  virtual ~AccessibilityEventInfo() {}
41
42  // Serialize this class as a DictionaryValue that can be converted to
43  // a JavaScript object.
44  virtual void SerializeToDict(base::DictionaryValue* dict) const = 0;
45
46  Profile* profile() const { return profile_; }
47
48 protected:
49  explicit AccessibilityEventInfo(Profile* profile) : profile_(profile) {}
50
51  // The profile this control belongs to.
52  Profile* profile_;
53};
54
55// Abstract parent class for accessibility information about a control
56// passed to event listeners.
57class AccessibilityControlInfo : public AccessibilityEventInfo {
58 public:
59  virtual ~AccessibilityControlInfo();
60
61  // Serialize this class as a DictionaryValue that can be converted to
62  // a JavaScript object.
63  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
64
65  // Return the specific type of this control, which will be one of the
66  // string constants defined in extension_accessibility_api_constants.h.
67  virtual const char* type() const = 0;
68
69  const std::string& name() const { return name_; }
70
71  const std::string& context() const { return context_; }
72
73 protected:
74  AccessibilityControlInfo(Profile* profile,
75                           const std::string& name);
76
77  void set_context(const std::string& context) { context_ = context; }
78
79  // The name of the control, like "OK" or "Password".
80  std::string name_;
81
82  // A string describing the context of the control, such as the name of
83  // the group or toolbar it's contained in.
84  std::string context_;
85};
86
87// Accessibility information about a window passed to onWindowOpened
88// and onWindowClosed event listeners.
89class AccessibilityWindowInfo : public AccessibilityControlInfo {
90 public:
91  AccessibilityWindowInfo(Profile* profile, const std::string& window_name);
92
93  virtual const char* type() const OVERRIDE;
94};
95
96// Accessibility information about a push button passed to onControlFocused
97// and onControlAction event listeners.
98class AccessibilityButtonInfo : public AccessibilityControlInfo {
99 public:
100  AccessibilityButtonInfo(Profile* profile,
101                          const std::string& button_name,
102                          const std::string& context);
103
104  virtual const char* type() const OVERRIDE;
105};
106
107// Accessibility information about a hyperlink passed to onControlFocused
108// and onControlAction event listeners.
109class AccessibilityLinkInfo : public AccessibilityControlInfo {
110 public:
111  AccessibilityLinkInfo(Profile* profile,
112                        const std::string& link_name,
113                        const std::string& context);
114
115  virtual const char* type() const OVERRIDE;
116};
117
118// Accessibility information about a radio button passed to onControlFocused
119// and onControlAction event listeners.
120class AccessibilityRadioButtonInfo : public AccessibilityControlInfo {
121 public:
122  AccessibilityRadioButtonInfo(Profile* profile,
123                               const std::string& name,
124                               const std::string& context,
125                               bool checked,
126                               int item_index,
127                               int item_count);
128
129  virtual const char* type() const OVERRIDE;
130
131  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
132
133  void SetChecked(bool checked) { checked_ = checked; }
134
135  int item_index() const { return item_index_; }
136  int item_count() const { return item_count_; }
137  bool checked() const { return checked_; }
138
139 private:
140  bool checked_;
141  // The 0-based index of this radio button and number of buttons in the group.
142  int item_index_;
143  int item_count_;
144};
145
146// Accessibility information about a checkbox passed to onControlFocused
147// and onControlAction event listeners.
148class AccessibilityCheckboxInfo : public AccessibilityControlInfo {
149 public:
150  AccessibilityCheckboxInfo(Profile* profile,
151                            const std::string& name,
152                            const std::string& context,
153                            bool checked);
154
155  virtual const char* type() const OVERRIDE;
156
157  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
158
159  void SetChecked(bool checked) { checked_ = checked; }
160
161  bool checked() const { return checked_; }
162
163 private:
164  bool checked_;
165};
166
167// Accessibility information about a tab passed to onControlFocused
168// and onControlAction event listeners.
169class AccessibilityTabInfo : public AccessibilityControlInfo {
170 public:
171  AccessibilityTabInfo(Profile* profile,
172                       const std::string& tab_name,
173                       const std::string& context,
174                       int tab_index,
175                       int tab_count);
176
177  virtual const char* type() const OVERRIDE;
178
179  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
180
181  void SetTab(int tab_index, std::string tab_name) {
182    tab_index_ = tab_index;
183    name_ = tab_name;
184  }
185
186  int tab_index() const { return tab_index_; }
187  int tab_count() const { return tab_count_; }
188
189 private:
190  // The 0-based index of this tab and number of tabs in the group.
191  int tab_index_;
192  int tab_count_;
193};
194
195// Accessibility information about a combo box passed to onControlFocused
196// and onControlAction event listeners.
197class AccessibilityComboBoxInfo : public AccessibilityControlInfo {
198 public:
199  AccessibilityComboBoxInfo(Profile* profile,
200                            const std::string& name,
201                            const std::string& context,
202                            const std::string& value,
203                            int item_index,
204                            int item_count);
205
206  virtual const char* type() const OVERRIDE;
207
208  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
209
210  void SetValue(int item_index, const std::string& value) {
211    item_index_ = item_index;
212    value_ = value;
213  }
214
215  int item_index() const { return item_index_; }
216  int item_count() const { return item_count_; }
217  const std::string& value() const { return value_; }
218
219 private:
220  std::string value_;
221  // The 0-based index of the current item and the number of total items.
222  // If the value is not one of the drop-down options, |item_index_| should
223  // be -1.
224  int item_index_;
225  int item_count_;
226};
227
228// Accessibility information about a text box, passed to onControlFocused,
229// onControlAction, and onTextChanged event listeners.
230class AccessibilityTextBoxInfo : public AccessibilityControlInfo {
231 public:
232  AccessibilityTextBoxInfo(Profile* profile,
233                           const std::string& name,
234                           const std::string& context,
235                           bool password);
236
237  virtual const char* type() const OVERRIDE;
238
239  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
240
241  void SetValue(
242      const std::string& value, int selection_start, int selection_end) {
243    value_ = value;
244    selection_start_ = selection_start;
245    selection_end_ = selection_end;
246  }
247
248  const std::string& value() const { return value_; }
249  bool password() const { return password_; }
250  int selection_start() const { return selection_start_; }
251  int selection_end() const { return selection_end_; }
252
253 private:
254  std::string value_;
255  bool password_;
256  int selection_start_;
257  int selection_end_;
258};
259
260// Accessibility information about a combo box passed to onControlFocused
261// and onControlAction event listeners.
262class AccessibilityListBoxInfo : public AccessibilityControlInfo {
263 public:
264  AccessibilityListBoxInfo(Profile* profile,
265                           const std::string& name,
266                           const std::string& context,
267                           const std::string& value,
268                           int item_index,
269                           int item_count);
270
271  virtual const char* type() const OVERRIDE;
272
273  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
274
275  void SetValue(int item_index, std::string value) {
276    item_index_ = item_index;
277    value_ = value;
278  }
279
280  int item_index() const { return item_index_; }
281  int item_count() const { return item_count_; }
282  const std::string& value() const { return value_; }
283
284 private:
285  std::string value_;
286  // The 0-based index of the current item and the number of total items.
287  // If the value is not one of the drop-down options, |item_index_| should
288  // be -1.
289  int item_index_;
290  int item_count_;
291};
292
293// Accessibility information about a menu; this class is used by
294// onMenuOpened, onMenuClosed, and onControlFocused event listeners.
295class AccessibilityMenuInfo : public AccessibilityControlInfo {
296 public:
297  AccessibilityMenuInfo(Profile* profile, const std::string& menu_name);
298
299  virtual const char* type() const OVERRIDE;
300};
301
302// Accessibility information about a menu item; this class is used by
303// onControlFocused event listeners.
304class AccessibilityMenuItemInfo : public AccessibilityControlInfo {
305 public:
306  AccessibilityMenuItemInfo(Profile* profile,
307                            const std::string& name,
308                            const std::string& context,
309                            bool has_submenu,
310                            int item_index,
311                            int item_count);
312
313  virtual const char* type() const OVERRIDE;
314
315  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
316
317  int item_index() const { return item_index_; }
318  int item_count() const { return item_count_; }
319  bool has_submenu() const { return has_submenu_; }
320
321 private:
322  bool has_submenu_;
323  // The 0-based index of the current item and the number of total items.
324  int item_index_;
325  int item_count_;
326};
327
328// Accessibility information about a slider passed to onControlFocused
329// and onControlAction event listeners.
330class AccessibilitySliderInfo : public AccessibilityControlInfo {
331 public:
332  AccessibilitySliderInfo(Profile* profile,
333                          const std::string& name,
334                          const std::string& context,
335                          const std::string& value);
336
337  virtual const char* type() const OVERRIDE;
338
339  virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
340
341  const std::string& value() const { return value_; }
342
343 private:
344  std::string value_;
345};
346
347// Accessibility information about an alert passed to onControlAction event.
348class AccessibilityAlertInfo : public AccessibilityControlInfo {
349 public:
350  AccessibilityAlertInfo(Profile* profile, const std::string& name);
351
352  virtual const char* type() const OVERRIDE;
353};
354
355#endif  // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EVENTS_H_
356