Home | History | Annotate | Download | only in accessibility
      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 #include "chrome/browser/accessibility/accessibility_events.h"
      6 
      7 #include "base/values.h"
      8 #include "chrome/browser/accessibility/accessibility_extension_api.h"
      9 #include "chrome/browser/accessibility/accessibility_extension_api_constants.h"
     10 #include "chrome/browser/chrome_notification_types.h"
     11 #include "chrome/browser/profiles/profile.h"
     12 #include "chrome/browser/profiles/profile_manager.h"
     13 #include "content/public/browser/notification_service.h"
     14 #include "content/public/browser/notification_types.h"
     15 
     16 namespace keys = extension_accessibility_api_constants;
     17 
     18 void SendControlAccessibilityNotification(
     19   ui::AccessibilityTypes::Event event,
     20   AccessibilityControlInfo* info) {
     21   Profile *profile = info->profile();
     22   if (profile->ShouldSendAccessibilityEvents()) {
     23     ExtensionAccessibilityEventRouter::GetInstance()->HandleControlEvent(
     24         event,
     25         info);
     26   }
     27 }
     28 
     29 void SendMenuAccessibilityNotification(
     30   ui::AccessibilityTypes::Event event,
     31   AccessibilityMenuInfo* info) {
     32   Profile *profile = info->profile();
     33   if (profile->ShouldSendAccessibilityEvents()) {
     34     ExtensionAccessibilityEventRouter::GetInstance()->HandleMenuEvent(
     35         event,
     36         info);
     37   }
     38 }
     39 
     40 void SendWindowAccessibilityNotification(
     41   ui::AccessibilityTypes::Event event,
     42   AccessibilityWindowInfo* info) {
     43   Profile *profile = info->profile();
     44   if (profile->ShouldSendAccessibilityEvents()) {
     45     ExtensionAccessibilityEventRouter::GetInstance()->HandleWindowEvent(
     46         event,
     47         info);
     48   }
     49 }
     50 
     51 
     52 AccessibilityControlInfo::AccessibilityControlInfo(
     53     Profile* profile, const std::string& name)
     54     : AccessibilityEventInfo(profile),
     55       name_(name) {
     56 }
     57 
     58 AccessibilityControlInfo::~AccessibilityControlInfo() {
     59 }
     60 
     61 void AccessibilityControlInfo::SerializeToDict(DictionaryValue *dict) const {
     62   dict->SetString(keys::kNameKey, name_);
     63   dict->SetString(keys::kTypeKey, type());
     64   if (!context_.empty())
     65     dict->SetString(keys::kContextKey, context_);
     66 }
     67 
     68 AccessibilityWindowInfo::AccessibilityWindowInfo(Profile* profile,
     69                                                  const std::string& window_name)
     70     : AccessibilityControlInfo(profile, window_name) {
     71 }
     72 
     73 const char* AccessibilityWindowInfo::type() const {
     74   return keys::kTypeWindow;
     75 }
     76 
     77 AccessibilityButtonInfo::AccessibilityButtonInfo(Profile* profile,
     78                                                  const std::string& button_name,
     79                                                  const std::string& context)
     80     : AccessibilityControlInfo(profile, button_name) {
     81   set_context(context);
     82 }
     83 
     84 const char* AccessibilityButtonInfo::type() const {
     85   return keys::kTypeButton;
     86 }
     87 
     88 AccessibilityLinkInfo::AccessibilityLinkInfo(Profile* profile,
     89                                              const std::string& link_name,
     90                                              const std::string& context)
     91     : AccessibilityControlInfo(profile, link_name) {
     92   set_context(context);
     93 }
     94 
     95 const char* AccessibilityLinkInfo::type() const {
     96   return keys::kTypeLink;
     97 }
     98 
     99 AccessibilityRadioButtonInfo::AccessibilityRadioButtonInfo(
    100     Profile* profile,
    101     const std::string& name,
    102     const std::string& context,
    103     bool checked,
    104     int item_index,
    105     int item_count)
    106     : AccessibilityControlInfo(profile, name),
    107       checked_(checked),
    108       item_index_(item_index),
    109       item_count_(item_count) {
    110   set_context(context);
    111 }
    112 
    113 const char* AccessibilityRadioButtonInfo::type() const {
    114   return keys::kTypeRadioButton;
    115 }
    116 
    117 void AccessibilityRadioButtonInfo::SerializeToDict(
    118     DictionaryValue *dict) const {
    119   AccessibilityControlInfo::SerializeToDict(dict);
    120   dict->SetBoolean(keys::kCheckedKey, checked_);
    121   dict->SetInteger(keys::kItemIndexKey, item_index_);
    122   dict->SetInteger(keys::kItemCountKey, item_count_);
    123 }
    124 
    125 AccessibilityCheckboxInfo::AccessibilityCheckboxInfo(Profile* profile,
    126                                                      const std::string& name,
    127                                                      const std::string& context,
    128                                                      bool checked)
    129     : AccessibilityControlInfo(profile, name),
    130       checked_(checked) {
    131   set_context(context);
    132 }
    133 
    134 const char* AccessibilityCheckboxInfo::type() const {
    135   return keys::kTypeCheckbox;
    136 }
    137 
    138 void AccessibilityCheckboxInfo::SerializeToDict(DictionaryValue *dict) const {
    139   AccessibilityControlInfo::SerializeToDict(dict);
    140   dict->SetBoolean(keys::kCheckedKey, checked_);
    141 }
    142 
    143 AccessibilityTabInfo::AccessibilityTabInfo(Profile* profile,
    144                                            const std::string& tab_name,
    145                                            const std::string& context,
    146                                            int tab_index,
    147                                            int tab_count)
    148     : AccessibilityControlInfo(profile, tab_name),
    149       tab_index_(tab_index),
    150       tab_count_(tab_count) {
    151   set_context(context);
    152 }
    153 
    154 const char* AccessibilityTabInfo::type() const {
    155   return keys::kTypeTab;
    156 }
    157 
    158 void AccessibilityTabInfo::SerializeToDict(DictionaryValue *dict) const {
    159   AccessibilityControlInfo::SerializeToDict(dict);
    160   dict->SetInteger(keys::kItemIndexKey, tab_index_);
    161   dict->SetInteger(keys::kItemCountKey, tab_count_);
    162 }
    163 
    164 AccessibilityComboBoxInfo::AccessibilityComboBoxInfo(Profile* profile,
    165                                                      const std::string& name,
    166                                                      const std::string& context,
    167                                                      const std::string& value,
    168                                                      int item_index,
    169                                                      int item_count)
    170     : AccessibilityControlInfo(profile, name),
    171       value_(value),
    172       item_index_(item_index),
    173       item_count_(item_count) {
    174   set_context(context);
    175 }
    176 
    177 const char* AccessibilityComboBoxInfo::type() const {
    178   return keys::kTypeComboBox;
    179 }
    180 
    181 void AccessibilityComboBoxInfo::SerializeToDict(DictionaryValue *dict) const {
    182   AccessibilityControlInfo::SerializeToDict(dict);
    183   dict->SetString(keys::kValueKey, value_);
    184   dict->SetInteger(keys::kItemIndexKey, item_index_);
    185   dict->SetInteger(keys::kItemCountKey, item_count_);
    186 }
    187 
    188 AccessibilityTextBoxInfo::AccessibilityTextBoxInfo(Profile* profile,
    189                                                    const std::string& name,
    190                                                    const std::string& context,
    191                                                    bool password)
    192     : AccessibilityControlInfo(profile, name),
    193       password_(password),
    194       selection_start_(0),
    195       selection_end_(0) {
    196   set_context(context);
    197 }
    198 
    199 const char* AccessibilityTextBoxInfo::type() const {
    200   return keys::kTypeTextBox;
    201 }
    202 
    203 void AccessibilityTextBoxInfo::SerializeToDict(DictionaryValue *dict) const {
    204   AccessibilityControlInfo::SerializeToDict(dict);
    205   dict->SetString(keys::kValueKey, value_);
    206   dict->SetBoolean(keys::kPasswordKey, password_);
    207   dict->SetInteger(keys::kSelectionStartKey, selection_start_);
    208   dict->SetInteger(keys::kSelectionEndKey, selection_end_);
    209 }
    210 
    211 AccessibilityListBoxInfo::AccessibilityListBoxInfo(Profile* profile,
    212                                                    const std::string& name,
    213                                                    const std::string& context,
    214                                                    const std::string& value,
    215                                                    int item_index,
    216                                                    int item_count)
    217     : AccessibilityControlInfo(profile, name),
    218       value_(value),
    219       item_index_(item_index),
    220       item_count_(item_count) {
    221   set_context(context);
    222 }
    223 
    224 const char* AccessibilityListBoxInfo::type() const {
    225   return keys::kTypeListBox;
    226 }
    227 
    228 void AccessibilityListBoxInfo::SerializeToDict(DictionaryValue *dict) const {
    229   AccessibilityControlInfo::SerializeToDict(dict);
    230   dict->SetString(keys::kValueKey, value_);
    231   dict->SetInteger(keys::kItemIndexKey, item_index_);
    232   dict->SetInteger(keys::kItemCountKey, item_count_);
    233 }
    234 
    235 AccessibilityMenuInfo::AccessibilityMenuInfo(Profile* profile,
    236                                              const std::string& menu_name)
    237     : AccessibilityControlInfo(profile, menu_name) {
    238 }
    239 
    240 const char* AccessibilityMenuInfo::type() const {
    241   return keys::kTypeMenu;
    242 }
    243 
    244 AccessibilityMenuItemInfo::AccessibilityMenuItemInfo(Profile* profile,
    245                                                      const std::string& name,
    246                                                      const std::string& context,
    247                                                      bool has_submenu,
    248                                                      int item_index,
    249                                                      int item_count)
    250     : AccessibilityControlInfo(profile, name),
    251       has_submenu_(has_submenu),
    252       item_index_(item_index),
    253       item_count_(item_count) {
    254   set_context(context);
    255 }
    256 
    257 const char* AccessibilityMenuItemInfo::type() const {
    258   return keys::kTypeMenuItem;
    259 }
    260 
    261 void AccessibilityMenuItemInfo::SerializeToDict(DictionaryValue *dict) const {
    262   AccessibilityControlInfo::SerializeToDict(dict);
    263   dict->SetBoolean(keys::kHasSubmenuKey, has_submenu_);
    264   dict->SetInteger(keys::kItemIndexKey, item_index_);
    265   dict->SetInteger(keys::kItemCountKey, item_count_);
    266 }
    267 
    268 AccessibilityTreeInfo::AccessibilityTreeInfo(Profile* profile,
    269                                              const std::string& menu_name)
    270     : AccessibilityControlInfo(profile, menu_name) {
    271 }
    272 
    273 const char* AccessibilityTreeInfo::type() const {
    274   return keys::kTypeTree;
    275 }
    276 
    277 AccessibilityTreeItemInfo::AccessibilityTreeItemInfo(Profile* profile,
    278                                                      const std::string& name,
    279                                                      const std::string& context,
    280                                                      int item_depth,
    281                                                      int item_index,
    282                                                      int item_count,
    283                                                      int children_count,
    284                                                      bool is_expanded)
    285     : AccessibilityControlInfo(profile, name),
    286       item_depth_(item_depth),
    287       item_index_(item_index),
    288       item_count_(item_count),
    289       children_count_(children_count),
    290       is_expanded_(is_expanded) {
    291   set_context(context);
    292 }
    293 
    294 const char* AccessibilityTreeItemInfo::type() const {
    295   return keys::kTypeTreeItem;
    296 }
    297 
    298 void AccessibilityTreeItemInfo::SerializeToDict(DictionaryValue *dict) const {
    299   AccessibilityControlInfo::SerializeToDict(dict);
    300   dict->SetInteger(keys::kItemDepthKey, item_depth_);
    301   dict->SetInteger(keys::kItemIndexKey, item_index_);
    302   dict->SetInteger(keys::kItemCountKey, item_count_);
    303   dict->SetInteger(keys::kChildrenCountKey, children_count_);
    304   dict->SetBoolean(keys::kItemExpandedKey, is_expanded_);
    305 }
    306 
    307 AccessibilitySliderInfo::AccessibilitySliderInfo(Profile* profile,
    308                                                  const std::string& name,
    309                                                  const std::string& context,
    310                                                  const std::string& value)
    311     : AccessibilityControlInfo(profile, name),
    312       value_(value) {
    313   set_context(context);
    314 }
    315 
    316 const char* AccessibilitySliderInfo::type() const {
    317   return keys::kTypeSlider;
    318 }
    319 
    320 void AccessibilitySliderInfo::SerializeToDict(DictionaryValue *dict) const {
    321   AccessibilityControlInfo::SerializeToDict(dict);
    322   dict->SetString(keys::kStringValueKey, value_);
    323 }
    324 
    325 AccessibilityAlertInfo::AccessibilityAlertInfo(Profile* profile,
    326                                                const std::string& name)
    327     : AccessibilityControlInfo(profile, name) {
    328 }
    329 
    330 const char* AccessibilityAlertInfo::type() const {
    331   return keys::kTypeAlert;
    332 }
    333