1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/accessibility_events.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/values.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_accessibility_api_constants.h" 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace keys = extension_accessibility_api_constants; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SendAccessibilityNotification( 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType type, AccessibilityControlInfo* info) { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile *profile = info->profile(); 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (profile->ShouldSendAccessibilityEvents()) { 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch type, 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile), 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Details<AccessibilityControlInfo>(info)); 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityControlInfo::AccessibilityControlInfo( 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Profile* profile, const std::string& control_name) 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : profile_(profile), name_(control_name) { 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 32731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityControlInfo::~AccessibilityControlInfo() { 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityControlInfo::SerializeToDict(DictionaryValue *dict) const { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetString(keys::kNameKey, name_); 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick dict->SetString(keys::kTypeKey, type()); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityWindowInfo::AccessibilityWindowInfo(Profile* profile, 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& window_name) 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, window_name) { 43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityWindowInfo::type() const { 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeWindow; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityButtonInfo::AccessibilityButtonInfo(Profile* profile, 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& button_name) 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, button_name) { 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityButtonInfo::type() const { 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeButton; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityLinkInfo::AccessibilityLinkInfo(Profile* profile, 59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& link_name) 60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, link_name) { } 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityLinkInfo::type() const { 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeLink; 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 66731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityRadioButtonInfo::AccessibilityRadioButtonInfo( 67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Profile* profile, 68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& name, 69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool checked, 70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_index, 71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_count) 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, name), 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick checked_(checked), 74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_index_(item_index), 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_count_(item_count) { 76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityRadioButtonInfo::type() const { 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeRadioButton; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityRadioButtonInfo::SerializeToDict( 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue *dict) const { 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetBoolean(keys::kCheckedKey, checked_); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemIndexKey, item_index_); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemCountKey, item_count_); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityCheckboxInfo::AccessibilityCheckboxInfo(Profile* profile, 91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& name, 92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool checked) 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, name), 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick checked_(checked) { 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityCheckboxInfo::type() const { 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeCheckbox; 993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityCheckboxInfo::SerializeToDict(DictionaryValue *dict) const { 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetBoolean(keys::kCheckedKey, checked_); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityTabInfo::AccessibilityTabInfo(Profile* profile, 107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& tab_name, 108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int tab_index, 109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int tab_count) 110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, tab_name), 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick tab_index_(tab_index), 112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick tab_count_(tab_count) { 113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityTabInfo::type() const { 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeTab; 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityTabInfo::SerializeToDict(DictionaryValue *dict) const { 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemIndexKey, tab_index_); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemCountKey, tab_count_); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityComboBoxInfo::AccessibilityComboBoxInfo(Profile* profile, 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& name, 127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& value, 128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_index, 129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_count) 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, name), 131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick value_(value), 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_index_(item_index), 133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_count_(item_count) { 134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityComboBoxInfo::type() const { 1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeComboBox; 1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityComboBoxInfo::SerializeToDict(DictionaryValue *dict) const { 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetString(keys::kValueKey, value_); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemIndexKey, item_index_); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemCountKey, item_count_); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 147731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityTextBoxInfo::AccessibilityTextBoxInfo(Profile* profile, 148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& name, 149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool password) 150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, name), 151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick value_(""), 152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick password_(password), 153731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick selection_start_(0), 154731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick selection_end_(0) { 155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityTextBoxInfo::type() const { 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeTextBox; 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityTextBoxInfo::SerializeToDict(DictionaryValue *dict) const { 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetString(keys::kValueKey, value_); 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetBoolean(keys::kPasswordKey, password_); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kSelectionStartKey, selection_start_); 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kSelectionEndKey, selection_end_); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityListBoxInfo::AccessibilityListBoxInfo(Profile* profile, 170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& name, 171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& value, 172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_index, 173731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_count) 174731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, name), 175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick value_(value), 176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_index_(item_index), 177731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_count_(item_count) { 178731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 179731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityListBoxInfo::type() const { 1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeListBox; 1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityListBoxInfo::SerializeToDict(DictionaryValue *dict) const { 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetString(keys::kValueKey, value_); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemIndexKey, item_index_); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemCountKey, item_count_); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 191731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityMenuInfo::AccessibilityMenuInfo(Profile* profile, 192731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& menu_name) 193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, menu_name) { 194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityMenuInfo::type() const { 1973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeMenu; 1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 200731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickAccessibilityMenuItemInfo::AccessibilityMenuItemInfo(Profile* profile, 201731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& name, 202731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool has_submenu, 203731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_index, 204731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int item_count) 205731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : AccessibilityControlInfo(profile, name), 206731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick has_submenu_(has_submenu), 207731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_index_(item_index), 208731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick item_count_(item_count) { 209731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char* AccessibilityMenuItemInfo::type() const { 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return keys::kTypeMenuItem; 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AccessibilityMenuItemInfo::SerializeToDict(DictionaryValue *dict) const { 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AccessibilityControlInfo::SerializeToDict(dict); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetBoolean(keys::kHasSubmenuKey, has_submenu_); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemIndexKey, item_index_); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch dict->SetInteger(keys::kItemCountKey, item_count_); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 221