• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
12 class AccessibilityControlInfo;
13 class AccessibilityMenuInfo;
14 class AccessibilityWindowInfo;
15 class Profile;
16 
17 namespace base {
18 class 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).
24 void SendControlAccessibilityNotification(
25     ui::AccessibilityTypes::Event event,
26     AccessibilityControlInfo* info);
27 
28 void SendMenuAccessibilityNotification(
29     ui::AccessibilityTypes::Event event,
30     AccessibilityMenuInfo* info);
31 
32 void SendWindowAccessibilityNotification(
33     ui::AccessibilityTypes::Event event,
34     AccessibilityWindowInfo* info);
35 
36 // Abstract parent class for accessibility event information passed to event
37 // listeners.
38 class AccessibilityEventInfo {
39  public:
~AccessibilityEventInfo()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 
profile()46   Profile* profile() const { return profile_; }
47 
48  protected:
AccessibilityEventInfo(Profile * profile)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.
57 class 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 
name()69   const std::string& name() const { return name_; }
70 
context()71   const std::string& context() const { return context_; }
72 
73  protected:
74   AccessibilityControlInfo(Profile* profile,
75                            const std::string& name);
76 
set_context(const std::string & context)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.
89 class 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.
98 class 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.
109 class 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.
120 class 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 
SetChecked(bool checked)133   void SetChecked(bool checked) { checked_ = checked; }
134 
item_index()135   int item_index() const { return item_index_; }
item_count()136   int item_count() const { return item_count_; }
checked()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.
148 class 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 
SetChecked(bool checked)159   void SetChecked(bool checked) { checked_ = checked; }
160 
checked()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.
169 class 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 
SetTab(int tab_index,std::string tab_name)181   void SetTab(int tab_index, std::string tab_name) {
182     tab_index_ = tab_index;
183     name_ = tab_name;
184   }
185 
tab_index()186   int tab_index() const { return tab_index_; }
tab_count()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.
197 class 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 
SetValue(int item_index,const std::string & value)210   void SetValue(int item_index, const std::string& value) {
211     item_index_ = item_index;
212     value_ = value;
213   }
214 
item_index()215   int item_index() const { return item_index_; }
item_count()216   int item_count() const { return item_count_; }
value()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 
229 // Accessibility information about a text box, passed to onControlFocused,
230 // onControlAction, and onTextChanged event listeners.
231 class AccessibilityTextBoxInfo : public AccessibilityControlInfo {
232  public:
233   AccessibilityTextBoxInfo(Profile* profile,
234                            const std::string& name,
235                            const std::string& context,
236                            bool password);
237 
238   virtual const char* type() const OVERRIDE;
239 
240   virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
241 
SetValue(const std::string & value,int selection_start,int selection_end)242   void SetValue(
243       const std::string& value, int selection_start, int selection_end) {
244     value_ = value;
245     selection_start_ = selection_start;
246     selection_end_ = selection_end;
247   }
248 
value()249   const std::string& value() const { return value_; }
password()250   bool password() const { return password_; }
selection_start()251   int selection_start() const { return selection_start_; }
selection_end()252   int selection_end() const { return selection_end_; }
253 
254  private:
255   std::string value_;
256   bool password_;
257   int selection_start_;
258   int selection_end_;
259 };
260 
261 // Accessibility information about a combo box passed to onControlFocused
262 // and onControlAction event listeners.
263 class AccessibilityListBoxInfo : public AccessibilityControlInfo {
264  public:
265   AccessibilityListBoxInfo(Profile* profile,
266                            const std::string& name,
267                            const std::string& context,
268                            const std::string& value,
269                            int item_index,
270                            int item_count);
271 
272   virtual const char* type() const OVERRIDE;
273 
274   virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
275 
SetValue(int item_index,std::string value)276   void SetValue(int item_index, std::string value) {
277     item_index_ = item_index;
278     value_ = value;
279   }
280 
item_index()281   int item_index() const { return item_index_; }
item_count()282   int item_count() const { return item_count_; }
value()283   const std::string& value() const { return value_; }
284 
285  private:
286   std::string value_;
287   // The 0-based index of the current item and the number of total items.
288   // If the value is not one of the drop-down options, |item_index_| should
289   // be -1.
290   int item_index_;
291   int item_count_;
292 };
293 
294 // Accessibility information about a menu; this class is used by
295 // onMenuOpened, onMenuClosed, and onControlFocused event listeners.
296 class AccessibilityMenuInfo : public AccessibilityControlInfo {
297  public:
298   AccessibilityMenuInfo(Profile* profile, const std::string& menu_name);
299 
300   virtual const char* type() const OVERRIDE;
301 };
302 
303 // Accessibility information about a menu item; this class is used by
304 // onControlFocused event listeners.
305 class AccessibilityMenuItemInfo : public AccessibilityControlInfo {
306  public:
307   AccessibilityMenuItemInfo(Profile* profile,
308                             const std::string& name,
309                             const std::string& context,
310                             bool has_submenu,
311                             int item_index,
312                             int item_count);
313 
314   virtual const char* type() const OVERRIDE;
315 
316   virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
317 
item_index()318   int item_index() const { return item_index_; }
item_count()319   int item_count() const { return item_count_; }
has_submenu()320   bool has_submenu() const { return has_submenu_; }
321 
322  private:
323   bool has_submenu_;
324   // The 0-based index of the current item and the number of total items.
325   int item_index_;
326   int item_count_;
327 };
328 
329 // Accessibility information about a tree; this class is used by
330 // onControlFocused event listeners.
331 class AccessibilityTreeInfo : public AccessibilityControlInfo {
332  public:
333   AccessibilityTreeInfo(Profile* profile, const std::string& menu_name);
334 
335   virtual const char* type() const OVERRIDE;
336 };
337 
338 // Accessibility information about a tree item; this class is used by
339 // onControlFocused event listeners.
340 class AccessibilityTreeItemInfo : public AccessibilityControlInfo {
341  public:
342   AccessibilityTreeItemInfo(Profile* profile,
343                             const std::string& name,
344                             const std::string& context,
345                             int item_depth,
346                             int item_index,
347                             int item_count,
348                             int children_count,
349                             bool is_expanded);
350 
351   virtual const char* type() const OVERRIDE;
352 
353   virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
354 
item_depth()355   int item_depth() const { return item_depth_; }
item_index()356   int item_index() const { return item_index_; }
item_count()357   int item_count() const { return item_count_; }
children_count()358   int children_count() const { return children_count_; }
is_expanded()359   bool is_expanded() const { return is_expanded_; }
360 
361  private:
362   // 0-based item depth.
363   int item_depth_;
364   // The 0-based index of the current item and the number of total items at the
365   // current depth.
366   int item_index_;
367   // Count of items at the current depth.
368   int item_count_;
369   // Count of children of the current item.
370   int children_count_;
371   // True if the node is expanded.
372   bool is_expanded_;
373 };
374 
375 // Accessibility information about a slider passed to onControlFocused
376 // and onControlAction event listeners.
377 class AccessibilitySliderInfo : public AccessibilityControlInfo {
378  public:
379   AccessibilitySliderInfo(Profile* profile,
380                           const std::string& name,
381                           const std::string& context,
382                           const std::string& value);
383 
384   virtual const char* type() const OVERRIDE;
385 
386   virtual void SerializeToDict(base::DictionaryValue* dict) const OVERRIDE;
387 
value()388   const std::string& value() const { return value_; }
389 
390  private:
391   std::string value_;
392 };
393 
394 // Accessibility information about an alert passed to onControlAction event.
395 class AccessibilityAlertInfo : public AccessibilityControlInfo {
396  public:
397   AccessibilityAlertInfo(Profile* profile, const std::string& name);
398 
399   virtual const char* type() const OVERRIDE;
400 };
401 
402 #endif  // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EVENTS_H_
403