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