Changeset 252181 in webkit
- Timestamp:
- Nov 7, 2019 5:21:57 AM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r252179 r252181 1 2019-11-07 Andres Gonzalez <andresg_22@apple.com> 2 3 Implement AXIsolatedTreeNode::roleDescription. 4 https://bugs.webkit.org/show_bug.cgi?id=203863 5 <rdar://problem/56934443> 6 7 Reviewed by Chris Fleizach. 8 9 No new tests needed, no new functionality. 10 11 AccessibilityObjectWrapper cannot call any of the AX.*Text functions to 12 retrieve localized role descriptions, because when running on the 13 secondary thread, those AtomStrings are not accessible. Moreover, some 14 of the special cases require access to DOM objects that are not 15 available in the secondary thread. Therefore, added 16 AXCoreObject::rolePlatformDescription that runs in the main thread to 17 initialize the corresponding attribute in AXIsolatedTreeNode. 18 rolePlatformString, createPlatformRoleMap, roleToPlatformString, 19 ariaLandmarkRoleDescription, are helper functions. The platform 20 functions allow to customize the behavior of roleDescription in each 21 platform. The platform overrides are implemented for mac. Other 22 platforms are pending. 23 24 * accessibility/AccessibilityObject.cpp: 25 (WebCore::AccessibilityObject::rolePlatformString const): 26 (WebCore::AccessibilityObject::rolePlatformDescription const): 27 (WebCore::AccessibilityObject::ariaLandmarkRoleDescription const): 28 (WebCore::AccessibilityObject::roleDescription const): 29 (WebCore::Accessibility::createPlatformRoleMap): 30 (WebCore::Accessibility::roleToPlatformString): 31 * accessibility/AccessibilityObject.h: 32 * accessibility/AccessibilityObjectInterface.h: 33 * accessibility/isolatedtree/AXIsolatedTreeNode.cpp: 34 (WebCore::AXIsolatedTreeNode::initializeAttributeData): 35 * accessibility/isolatedtree/AXIsolatedTreeNode.h: 36 * accessibility/mac/AccessibilityObjectMac.mm: 37 (WebCore::AccessibilityObject::rolePlatformString const): 38 (WebCore::AccessibilityObject::rolePlatformDescription const): 39 (WebCore::Accessibility::createPlatformRoleMap): 40 * accessibility/mac/WebAccessibilityObjectWrapperBase.mm: 41 (-[WebAccessibilityObjectWrapperBase accessibilityObject]): 42 (-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]): Implementation moved to AccessibilityObject. 43 * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: 44 (-[WebAccessibilityObjectWrapper role]): Special cases moved to rolePlatformString. 45 (-[WebAccessibilityObjectWrapper roleDescription]): 46 (createAccessibilityRoleMap): Deleted, became Accessibility::createPlatformRoleMap. 47 (roleValueToNSString): Deleted, became Accessibility::roleToPlatformString. 48 * platform/LocalizedStrings.cpp: 49 (WebCore::AXARIAContentGroupText): 50 (WebCore::AXHorizontalRuleDescriptionText): 51 (WebCore::AXMarkText): 52 * platform/LocalizedStrings.h: 53 * platform/cocoa/LocalizedStringsCocoa.mm: 54 (WebCore::AXARIAContentGroupText): Deleted, moved to LocalizedStrings.cpp. 55 (WebCore::AXHorizontalRuleDescriptionText): Deleted, moved to LocalizedStrings.cpp. 56 (WebCore::AXMarkText): Deleted, moved to LocalizedStrings.cpp. 57 1 58 2019-11-07 Chris Lord <clord@igalia.com> 2 59 -
trunk/Source/WebCore/accessibility/AccessibilityObject.cpp
r251870 r252181 2602 2602 } 2603 2603 2604 #if !PLATFORM(MAC) 2605 String AccessibilityObject::rolePlatformString() const 2606 { 2607 // FIXME: implement in other platforms. 2608 return String(); 2609 } 2610 2611 String AccessibilityObject::rolePlatformDescription() const 2612 { 2613 // FIXME: implement in other platforms. 2614 return String(); 2615 } 2616 #endif 2617 2618 String AccessibilityObject::ariaLandmarkRoleDescription() const 2619 { 2620 switch (roleValue()) { 2621 case AccessibilityRole::LandmarkBanner: 2622 return AXARIAContentGroupText("ARIALandmarkBanner"); 2623 case AccessibilityRole::LandmarkComplementary: 2624 return AXARIAContentGroupText("ARIALandmarkComplementary"); 2625 case AccessibilityRole::LandmarkContentInfo: 2626 return AXARIAContentGroupText("ARIALandmarkContentInfo"); 2627 case AccessibilityRole::LandmarkMain: 2628 return AXARIAContentGroupText("ARIALandmarkMain"); 2629 case AccessibilityRole::LandmarkNavigation: 2630 return AXARIAContentGroupText("ARIALandmarkNavigation"); 2631 case AccessibilityRole::LandmarkDocRegion: 2632 case AccessibilityRole::LandmarkRegion: 2633 return AXARIAContentGroupText("ARIALandmarkRegion"); 2634 case AccessibilityRole::LandmarkSearch: 2635 return AXARIAContentGroupText("ARIALandmarkSearch"); 2636 case AccessibilityRole::ApplicationAlert: 2637 return AXARIAContentGroupText("ARIAApplicationAlert"); 2638 case AccessibilityRole::ApplicationAlertDialog: 2639 return AXARIAContentGroupText("ARIAApplicationAlertDialog"); 2640 case AccessibilityRole::ApplicationDialog: 2641 return AXARIAContentGroupText("ARIAApplicationDialog"); 2642 case AccessibilityRole::ApplicationLog: 2643 return AXARIAContentGroupText("ARIAApplicationLog"); 2644 case AccessibilityRole::ApplicationMarquee: 2645 return AXARIAContentGroupText("ARIAApplicationMarquee"); 2646 case AccessibilityRole::ApplicationStatus: 2647 return AXARIAContentGroupText("ARIAApplicationStatus"); 2648 case AccessibilityRole::ApplicationTimer: 2649 return AXARIAContentGroupText("ARIAApplicationTimer"); 2650 case AccessibilityRole::Document: 2651 return AXARIAContentGroupText("ARIADocument"); 2652 case AccessibilityRole::DocumentArticle: 2653 return AXARIAContentGroupText("ARIADocumentArticle"); 2654 case AccessibilityRole::DocumentMath: 2655 return AXARIAContentGroupText("ARIADocumentMath"); 2656 case AccessibilityRole::DocumentNote: 2657 return AXARIAContentGroupText("ARIADocumentNote"); 2658 case AccessibilityRole::UserInterfaceTooltip: 2659 return AXARIAContentGroupText("ARIAUserInterfaceTooltip"); 2660 case AccessibilityRole::TabPanel: 2661 return AXARIAContentGroupText("ARIATabPanel"); 2662 case AccessibilityRole::WebApplication: 2663 return AXARIAContentGroupText("ARIAWebApplication"); 2664 default: 2665 return String(); 2666 } 2667 } 2668 2604 2669 String AccessibilityObject::roleDescription() const 2605 2670 { 2606 2671 // aria-roledescription takes precedence over any other rule. 2607 2672 String roleDescription = stripLeadingAndTrailingHTMLSpaces(getAttribute(aria_roledescriptionAttr)); 2673 if (!roleDescription.isEmpty()) 2674 return roleDescription; 2675 2676 roleDescription = rolePlatformDescription(); 2608 2677 if (!roleDescription.isEmpty()) 2609 2678 return roleDescription; … … 3767 3836 } 3768 3837 3838 namespace Accessibility { 3839 3840 #if !PLATFORM(MAC) 3841 // FIXME: implement in other platforms. 3842 PlatformRoleMap createPlatformRoleMap() { return PlatformRoleMap(); } 3843 #endif 3844 3845 String roleToPlatformString(AccessibilityRole role) 3846 { 3847 static NeverDestroyed<PlatformRoleMap> roleMap = createPlatformRoleMap(); 3848 return roleMap->get(static_cast<unsigned>(role)); 3849 } 3850 3851 } // namespace Accessibility 3852 3769 3853 } // namespace WebCore -
trunk/Source/WebCore/accessibility/AccessibilityObject.h
r251870 r252181 327 327 const AtomString& linkRelValue() const override; 328 328 void classList(Vector<String>&) const override; 329 String roleDescription() const override;330 329 AccessibilityCurrentState currentState() const override; 331 330 String currentValue() const override; … … 429 428 430 429 AccessibilityRole roleValue() const override { return m_role; } 430 String rolePlatformString() const override; 431 String roleDescription() const override; 432 String ariaLandmarkRoleDescription() const override; 431 433 432 434 AXObjectCache* axObjectCache() const override; … … 795 797 static bool objectMatchesSearchCriteriaWithResultLimit(AXCoreObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&); 796 798 virtual AccessibilityRole buttonRoleType() const; 799 String rolePlatformDescription() const; 797 800 bool isOnScreen() const override; 798 801 bool dispatchTouchEvent(); … … 829 832 AccessibilityObject* firstAccessibleObjectFromNode(const Node*, const WTF::Function<bool(const AccessibilityObject&)>& isAccessible); 830 833 834 namespace Accessibility { 835 836 using PlatformRoleMap = HashMap<AccessibilityRole, String, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned>>; 837 838 PlatformRoleMap createPlatformRoleMap(); 839 String roleToPlatformString(AccessibilityRole); 840 841 } // namespace Accessibility 842 831 843 } // namespace WebCore 832 844 -
trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h
r251870 r252181 670 670 virtual const AtomString& linkRelValue() const = 0; 671 671 virtual void classList(Vector<String>&) const = 0; 672 virtual String roleDescription() const = 0;673 672 virtual AccessibilityCurrentState currentState() const = 0; 674 673 virtual String currentValue() const = 0; … … 765 764 766 765 virtual AccessibilityRole roleValue() const = 0; 766 // Non-localized string associated with the object role. 767 virtual String rolePlatformString() const = 0; 768 // Localized string that describes the object's role. 769 virtual String roleDescription() const = 0; 770 // Localized string that describes ARIA landmark roles. 771 virtual String ariaLandmarkRoleDescription() const = 0; 767 772 768 773 virtual AXObjectCache* axObjectCache() const = 0; -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.cpp
r251974 r252181 55 55 { 56 56 setProperty(AXPropertyName::RoleValue, static_cast<int>(object.roleValue())); 57 setProperty(AXPropertyName::RolePlatformString, object.rolePlatformString().isolatedCopy()); 58 setProperty(AXPropertyName::ARIALandmarkRoleDescription, object.ariaLandmarkRoleDescription().isolatedCopy()); 59 setProperty(AXPropertyName::RoleDescription, object.roleDescription().isolatedCopy()); 57 60 setProperty(AXPropertyName::IsAttachment, object.isAttachment()); 58 61 setProperty(AXPropertyName::IsMediaControlLabel, object.isMediaControlLabel()); -
trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h
r251974 r252181 55 55 void init() override { } 56 56 57 AccessibilityObjectWrapper* wrapper() const override { return m_wrapper.get(); } 57 58 void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) override { } 58 59 bool isDetached() const override { return false; } 60 61 void setTreeIdentifier(AXIsolatedTreeID); 62 void setParent(AXID); 63 void appendChild(AXID); 59 64 60 65 private: … … 260 265 const AtomString& linkRelValue() const override { return nullAtom(); } 261 266 void classList(Vector<String>&) const override { } 262 String roleDescription() const override { return String(); }263 267 AccessibilityCurrentState currentState() const override { return AccessibilityCurrentState::False; } 264 268 String currentValue() const override { return String(); } … … 344 348 345 349 AccessibilityRole roleValue() const override { return static_cast<AccessibilityRole>(intAttributeValue(AXPropertyName::RoleValue)); } 350 String rolePlatformString() const override { return stringAttributeValue(AXPropertyName::RolePlatformString); } 351 String roleDescription() const override { return stringAttributeValue(AXPropertyName::RoleDescription); } 352 String ariaLandmarkRoleDescription() const override { return stringAttributeValue(AXPropertyName::ARIALandmarkRoleDescription); } 346 353 347 354 AXObjectCache* axObjectCache() const override { return nullptr; } … … 591 598 bool isHidden() const override { return false; } 592 599 593 AccessibilityObjectWrapper* wrapper() const override { return m_wrapper.get(); }594 600 void setWrapper(AccessibilityObjectWrapper* wrapper) override { m_wrapper = wrapper; } 595 601 … … 631 637 void clearIsIgnoredFromParentData() override { } 632 638 void setIsIgnoredFromParentDataForChild(AXCoreObject*) override { } 633 634 void setTreeIdentifier(AXIsolatedTreeID);635 AXIsolatedTree* tree() const;636 void setParent(AXID);637 void appendChild(AXID);638 639 639 640 enum class AXPropertyName : uint8_t { … … 653 654 RelativeFrame, 654 655 RoleValue, 656 RolePlatformString, 657 RoleDescription, 658 ARIALandmarkRoleDescription, 655 659 SpeechHint, 656 660 Title, … … 660 664 661 665 AXIsolatedTreeID treeIdentifier() const { return m_treeIdentifier; } 666 AXIsolatedTree* tree() const; 662 667 663 668 AXIsolatedTreeNode() = default; -
trunk/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm
r251798 r252181 26 26 #import "config.h" 27 27 #import "AccessibilityObject.h" 28 #import "AccessibilityLabel.h" 29 #import "AccessibilityList.h" 28 30 #import "ElementAncestorIterator.h" 29 31 #import "HTMLFieldSetElement.h" 32 #import "HTMLInputElement.h" 33 #import "LocalizedStrings.h" 30 34 #import "RenderObject.h" 31 35 #import "Settings.h" … … 129 133 } 130 134 135 String AccessibilityObject::rolePlatformString() const 136 { 137 AccessibilityRole role = roleValue(); 138 139 // If it is a label with just static text or an anonymous math operator, remap role to StaticText. 140 // The mfenced element creates anonymous RenderMathMLOperators with no RenderText 141 // descendants. These anonymous renderers are the only accessible objects 142 // containing the operator. 143 if ((role == AccessibilityRole::Label && is<AccessibilityLabel>(*this) && downcast<AccessibilityLabel>(*this).containsOnlyStaticText()) 144 || isAnonymousMathOperator()) 145 role = AccessibilityRole::StaticText; 146 else if (role == AccessibilityRole::Canvas && canvasHasFallbackContent()) 147 role = AccessibilityRole::Group; 148 149 return Accessibility::roleToPlatformString(role); 150 } 151 152 String AccessibilityObject::rolePlatformDescription() const 153 { 154 AccessibilityRole role = roleValue(); 155 NSString *axRole = rolePlatformString(); 156 157 if ([axRole isEqualToString:NSAccessibilityGroupRole]) { 158 if (isOutput()) 159 return AXOutputText(); 160 161 String ariaLandmarkRoleDescription = this->ariaLandmarkRoleDescription(); 162 if (!ariaLandmarkRoleDescription.isEmpty()) 163 return ariaLandmarkRoleDescription; 164 165 switch (role) { 166 case AccessibilityRole::Audio: 167 return localizedMediaControlElementString("AudioElement"); 168 case AccessibilityRole::Definition: 169 return AXDefinitionText(); 170 case AccessibilityRole::DescriptionListTerm: 171 case AccessibilityRole::Term: 172 return AXDescriptionListTermText(); 173 case AccessibilityRole::DescriptionListDetail: 174 return AXDescriptionListDetailText(); 175 case AccessibilityRole::Details: 176 return AXDetailsText(); 177 case AccessibilityRole::Feed: 178 return AXFeedText(); 179 case AccessibilityRole::Footer: 180 return AXFooterRoleDescriptionText(); 181 case AccessibilityRole::Mark: 182 return AXMarkText(); 183 case AccessibilityRole::Video: 184 return localizedMediaControlElementString("VideoElement"); 185 case AccessibilityRole::GraphicsDocument: 186 return AXARIAContentGroupText(@"ARIADocument"); 187 default: 188 return String(); 189 } 190 } 191 192 if ([axRole isEqualToString:@"AXWebArea"]) 193 return AXWebAreaText(); 194 195 if ([axRole isEqualToString:@"AXLink"]) 196 return AXLinkText(); 197 198 if ([axRole isEqualToString:@"AXListMarker"]) 199 return AXListMarkerText(); 200 201 if ([axRole isEqualToString:@"AXImageMap"]) 202 return AXImageMapText(); 203 204 if ([axRole isEqualToString:@"AXHeading"]) 205 return AXHeadingText(); 206 207 if ([axRole isEqualToString:NSAccessibilityTextFieldRole]) { 208 auto* node = this->node(); 209 if (is<HTMLInputElement>(node)) { 210 auto& input = downcast<HTMLInputElement>(*node); 211 if (input.isEmailField()) 212 return AXEmailFieldText(); 213 if (input.isTelephoneField()) 214 return AXTelephoneFieldText(); 215 if (input.isURLField()) 216 return AXURLFieldText(); 217 if (input.isNumberField()) 218 return AXNumberFieldText(); 219 220 // These input types are not enabled on mac yet, we check the type attribute for now. 221 auto& type = input.attributeWithoutSynchronization(HTMLNames::typeAttr); 222 if (equalLettersIgnoringASCIICase(type, "date")) 223 return AXDateFieldText(); 224 if (equalLettersIgnoringASCIICase(type, "time")) 225 return AXTimeFieldText(); 226 if (equalLettersIgnoringASCIICase(type, "week")) 227 return AXWeekFieldText(); 228 if (equalLettersIgnoringASCIICase(type, "month")) 229 return AXMonthFieldText(); 230 if (equalLettersIgnoringASCIICase(type, "datetime-local")) 231 return AXDateTimeFieldText(); 232 } 233 } 234 235 if (isFileUploadButton()) 236 return AXFileUploadButtonText(); 237 238 // Only returning for DL (not UL or OL) because description changed with HTML5 from 'definition list' to 239 // superset 'description list' and does not return the same values in AX API on some OS versions. 240 if (is<AccessibilityList>(*this)) { 241 if (downcast<AccessibilityList>(*this).isDescriptionList()) 242 return AXDescriptionListText(); 243 } 244 245 if (role == AccessibilityRole::HorizontalRule) 246 return AXHorizontalRuleDescriptionText(); 247 248 // AppKit also returns AXTab for the role description for a tab item. 249 if (isTabItem()) 250 return NSAccessibilityRoleDescription(@"AXTab", nil); 251 252 if (isSummary()) 253 return AXSummaryText(); 254 255 return String(); 256 } 257 258 namespace Accessibility { 259 260 PlatformRoleMap createPlatformRoleMap() 261 { 262 struct RoleEntry { 263 AccessibilityRole value; 264 NSString *string; 265 }; 266 static const RoleEntry roles[] = { 267 { AccessibilityRole::Unknown, NSAccessibilityUnknownRole }, 268 { AccessibilityRole::Button, NSAccessibilityButtonRole }, 269 { AccessibilityRole::RadioButton, NSAccessibilityRadioButtonRole }, 270 { AccessibilityRole::CheckBox, NSAccessibilityCheckBoxRole }, 271 { AccessibilityRole::Slider, NSAccessibilitySliderRole }, 272 { AccessibilityRole::TabGroup, NSAccessibilityTabGroupRole }, 273 { AccessibilityRole::TextField, NSAccessibilityTextFieldRole }, 274 { AccessibilityRole::StaticText, NSAccessibilityStaticTextRole }, 275 { AccessibilityRole::TextArea, NSAccessibilityTextAreaRole }, 276 { AccessibilityRole::ScrollArea, NSAccessibilityScrollAreaRole }, 277 { AccessibilityRole::PopUpButton, NSAccessibilityPopUpButtonRole }, 278 { AccessibilityRole::MenuButton, NSAccessibilityMenuButtonRole }, 279 { AccessibilityRole::Table, NSAccessibilityTableRole }, 280 { AccessibilityRole::Application, NSAccessibilityApplicationRole }, 281 { AccessibilityRole::Group, NSAccessibilityGroupRole }, 282 { AccessibilityRole::TextGroup, NSAccessibilityGroupRole }, 283 { AccessibilityRole::RadioGroup, NSAccessibilityRadioGroupRole }, 284 { AccessibilityRole::List, NSAccessibilityListRole }, 285 { AccessibilityRole::Directory, NSAccessibilityListRole }, 286 { AccessibilityRole::ScrollBar, NSAccessibilityScrollBarRole }, 287 { AccessibilityRole::ValueIndicator, NSAccessibilityValueIndicatorRole }, 288 { AccessibilityRole::Image, NSAccessibilityImageRole }, 289 { AccessibilityRole::MenuBar, NSAccessibilityMenuBarRole }, 290 { AccessibilityRole::Menu, NSAccessibilityMenuRole }, 291 { AccessibilityRole::MenuItem, NSAccessibilityMenuItemRole }, 292 { AccessibilityRole::MenuItemCheckbox, NSAccessibilityMenuItemRole }, 293 { AccessibilityRole::MenuItemRadio, NSAccessibilityMenuItemRole }, 294 { AccessibilityRole::Column, NSAccessibilityColumnRole }, 295 { AccessibilityRole::Row, NSAccessibilityRowRole }, 296 { AccessibilityRole::Toolbar, NSAccessibilityToolbarRole }, 297 { AccessibilityRole::BusyIndicator, NSAccessibilityBusyIndicatorRole }, 298 { AccessibilityRole::ProgressIndicator, NSAccessibilityProgressIndicatorRole }, 299 { AccessibilityRole::Meter, NSAccessibilityLevelIndicatorRole }, 300 { AccessibilityRole::Window, NSAccessibilityWindowRole }, 301 { AccessibilityRole::Drawer, NSAccessibilityDrawerRole }, 302 { AccessibilityRole::SystemWide, NSAccessibilitySystemWideRole }, 303 { AccessibilityRole::Outline, NSAccessibilityOutlineRole }, 304 { AccessibilityRole::Incrementor, NSAccessibilityIncrementorRole }, 305 { AccessibilityRole::Browser, NSAccessibilityBrowserRole }, 306 { AccessibilityRole::ComboBox, NSAccessibilityComboBoxRole }, 307 { AccessibilityRole::SplitGroup, NSAccessibilitySplitGroupRole }, 308 { AccessibilityRole::Splitter, NSAccessibilitySplitterRole }, 309 { AccessibilityRole::ColorWell, NSAccessibilityColorWellRole }, 310 { AccessibilityRole::GrowArea, NSAccessibilityGrowAreaRole }, 311 { AccessibilityRole::Sheet, NSAccessibilitySheetRole }, 312 { AccessibilityRole::HelpTag, NSAccessibilityHelpTagRole }, 313 { AccessibilityRole::Matte, NSAccessibilityMatteRole }, 314 { AccessibilityRole::Ruler, NSAccessibilityRulerRole }, 315 { AccessibilityRole::RulerMarker, NSAccessibilityRulerMarkerRole }, 316 { AccessibilityRole::Link, NSAccessibilityLinkRole }, 317 { AccessibilityRole::DisclosureTriangle, NSAccessibilityDisclosureTriangleRole }, 318 { AccessibilityRole::Grid, NSAccessibilityTableRole }, 319 { AccessibilityRole::TreeGrid, NSAccessibilityTableRole }, 320 { AccessibilityRole::WebCoreLink, NSAccessibilityLinkRole }, 321 { AccessibilityRole::ImageMapLink, NSAccessibilityLinkRole }, 322 { AccessibilityRole::ImageMap, @"AXImageMap" }, 323 { AccessibilityRole::ListMarker, @"AXListMarker" }, 324 { AccessibilityRole::WebArea, @"AXWebArea" }, 325 { AccessibilityRole::Heading, @"AXHeading" }, 326 { AccessibilityRole::ListBox, NSAccessibilityListRole }, 327 { AccessibilityRole::ListBoxOption, NSAccessibilityStaticTextRole }, 328 { AccessibilityRole::Cell, NSAccessibilityCellRole }, 329 { AccessibilityRole::GridCell, NSAccessibilityCellRole }, 330 { AccessibilityRole::TableHeaderContainer, NSAccessibilityGroupRole }, 331 { AccessibilityRole::ColumnHeader, NSAccessibilityCellRole }, 332 { AccessibilityRole::RowHeader, NSAccessibilityCellRole }, 333 { AccessibilityRole::Definition, NSAccessibilityGroupRole }, 334 { AccessibilityRole::DescriptionListDetail, NSAccessibilityGroupRole }, 335 { AccessibilityRole::DescriptionListTerm, NSAccessibilityGroupRole }, 336 { AccessibilityRole::Term, NSAccessibilityGroupRole }, 337 { AccessibilityRole::DescriptionList, NSAccessibilityListRole }, 338 { AccessibilityRole::SliderThumb, NSAccessibilityValueIndicatorRole }, 339 { AccessibilityRole::WebApplication, NSAccessibilityGroupRole }, 340 { AccessibilityRole::LandmarkBanner, NSAccessibilityGroupRole }, 341 { AccessibilityRole::LandmarkComplementary, NSAccessibilityGroupRole }, 342 { AccessibilityRole::LandmarkDocRegion, NSAccessibilityGroupRole }, 343 { AccessibilityRole::LandmarkContentInfo, NSAccessibilityGroupRole }, 344 { AccessibilityRole::LandmarkMain, NSAccessibilityGroupRole }, 345 { AccessibilityRole::LandmarkNavigation, NSAccessibilityGroupRole }, 346 { AccessibilityRole::LandmarkRegion, NSAccessibilityGroupRole }, 347 { AccessibilityRole::LandmarkSearch, NSAccessibilityGroupRole }, 348 { AccessibilityRole::ApplicationAlert, NSAccessibilityGroupRole }, 349 { AccessibilityRole::ApplicationAlertDialog, NSAccessibilityGroupRole }, 350 { AccessibilityRole::ApplicationDialog, NSAccessibilityGroupRole }, 351 { AccessibilityRole::ApplicationGroup, NSAccessibilityGroupRole }, 352 { AccessibilityRole::ApplicationTextGroup, NSAccessibilityGroupRole }, 353 { AccessibilityRole::ApplicationLog, NSAccessibilityGroupRole }, 354 { AccessibilityRole::ApplicationMarquee, NSAccessibilityGroupRole }, 355 { AccessibilityRole::ApplicationStatus, NSAccessibilityGroupRole }, 356 { AccessibilityRole::ApplicationTimer, NSAccessibilityGroupRole }, 357 { AccessibilityRole::Document, NSAccessibilityGroupRole }, 358 { AccessibilityRole::DocumentArticle, NSAccessibilityGroupRole }, 359 { AccessibilityRole::DocumentMath, NSAccessibilityGroupRole }, 360 { AccessibilityRole::DocumentNote, NSAccessibilityGroupRole }, 361 { AccessibilityRole::UserInterfaceTooltip, NSAccessibilityGroupRole }, 362 { AccessibilityRole::Tab, NSAccessibilityRadioButtonRole }, 363 { AccessibilityRole::TabList, NSAccessibilityTabGroupRole }, 364 { AccessibilityRole::TabPanel, NSAccessibilityGroupRole }, 365 { AccessibilityRole::Tree, NSAccessibilityOutlineRole }, 366 { AccessibilityRole::TreeItem, NSAccessibilityRowRole }, 367 { AccessibilityRole::ListItem, NSAccessibilityGroupRole }, 368 { AccessibilityRole::Paragraph, NSAccessibilityGroupRole }, 369 { AccessibilityRole::Label, NSAccessibilityGroupRole }, 370 { AccessibilityRole::Div, NSAccessibilityGroupRole }, 371 { AccessibilityRole::Form, NSAccessibilityGroupRole }, 372 { AccessibilityRole::SpinButton, NSAccessibilityIncrementorRole }, 373 { AccessibilityRole::Footer, NSAccessibilityGroupRole }, 374 { AccessibilityRole::ToggleButton, NSAccessibilityCheckBoxRole }, 375 { AccessibilityRole::Canvas, NSAccessibilityImageRole }, 376 { AccessibilityRole::SVGRoot, NSAccessibilityGroupRole }, 377 { AccessibilityRole::Legend, NSAccessibilityGroupRole }, 378 { AccessibilityRole::MathElement, NSAccessibilityGroupRole }, 379 { AccessibilityRole::Audio, NSAccessibilityGroupRole }, 380 { AccessibilityRole::Video, NSAccessibilityGroupRole }, 381 { AccessibilityRole::HorizontalRule, NSAccessibilitySplitterRole }, 382 { AccessibilityRole::Blockquote, NSAccessibilityGroupRole }, 383 { AccessibilityRole::Switch, NSAccessibilityCheckBoxRole }, 384 { AccessibilityRole::SearchField, NSAccessibilityTextFieldRole }, 385 { AccessibilityRole::Pre, NSAccessibilityGroupRole }, 386 { AccessibilityRole::RubyBase, NSAccessibilityGroupRole }, 387 { AccessibilityRole::RubyBlock, NSAccessibilityGroupRole }, 388 { AccessibilityRole::RubyInline, NSAccessibilityGroupRole }, 389 { AccessibilityRole::RubyRun, NSAccessibilityGroupRole }, 390 { AccessibilityRole::RubyText, NSAccessibilityGroupRole }, 391 { AccessibilityRole::Details, NSAccessibilityGroupRole }, 392 { AccessibilityRole::Summary, NSAccessibilityButtonRole }, 393 { AccessibilityRole::SVGTextPath, NSAccessibilityGroupRole }, 394 { AccessibilityRole::SVGText, NSAccessibilityGroupRole }, 395 { AccessibilityRole::SVGTSpan, NSAccessibilityGroupRole }, 396 { AccessibilityRole::Inline, NSAccessibilityGroupRole }, 397 { AccessibilityRole::Mark, NSAccessibilityGroupRole }, 398 { AccessibilityRole::Time, NSAccessibilityGroupRole }, 399 { AccessibilityRole::Feed, NSAccessibilityGroupRole }, 400 { AccessibilityRole::Figure, NSAccessibilityGroupRole }, 401 { AccessibilityRole::Footnote, NSAccessibilityGroupRole }, 402 { AccessibilityRole::GraphicsDocument, NSAccessibilityGroupRole }, 403 { AccessibilityRole::GraphicsObject, NSAccessibilityGroupRole }, 404 { AccessibilityRole::GraphicsSymbol, NSAccessibilityImageRole }, 405 { AccessibilityRole::Caption, NSAccessibilityGroupRole }, 406 { AccessibilityRole::Deletion, NSAccessibilityGroupRole }, 407 { AccessibilityRole::Insertion, NSAccessibilityGroupRole }, 408 { AccessibilityRole::Subscript, NSAccessibilityGroupRole }, 409 { AccessibilityRole::Superscript, NSAccessibilityGroupRole }, 410 }; 411 PlatformRoleMap roleMap; 412 for (auto& role : roles) 413 roleMap.add(static_cast<unsigned>(role.value), role.string); 414 return roleMap; 415 } 416 417 } // namespace Accessibility 418 131 419 } // WebCore 132 420 -
trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm
r251974 r252181 327 327 - (AXCoreObject*)accessibilityObject 328 328 { 329 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)330 ASSERT(!_AXUIElementRequestServicedBySecondaryAXThread());331 #endif332 329 return m_object; 333 330 } … … 473 470 - (NSString *)ariaLandmarkRoleDescription 474 471 { 475 switch (_axBackingObject->roleValue()) { 476 case AccessibilityRole::LandmarkBanner: 477 return AXARIAContentGroupText(@"ARIALandmarkBanner"); 478 case AccessibilityRole::LandmarkComplementary: 479 return AXARIAContentGroupText(@"ARIALandmarkComplementary"); 480 case AccessibilityRole::LandmarkContentInfo: 481 return AXARIAContentGroupText(@"ARIALandmarkContentInfo"); 482 case AccessibilityRole::LandmarkMain: 483 return AXARIAContentGroupText(@"ARIALandmarkMain"); 484 case AccessibilityRole::LandmarkNavigation: 485 return AXARIAContentGroupText(@"ARIALandmarkNavigation"); 486 case AccessibilityRole::LandmarkDocRegion: 487 case AccessibilityRole::LandmarkRegion: 488 return AXARIAContentGroupText(@"ARIALandmarkRegion"); 489 case AccessibilityRole::LandmarkSearch: 490 return AXARIAContentGroupText(@"ARIALandmarkSearch"); 491 case AccessibilityRole::ApplicationAlert: 492 return AXARIAContentGroupText(@"ARIAApplicationAlert"); 493 case AccessibilityRole::ApplicationAlertDialog: 494 return AXARIAContentGroupText(@"ARIAApplicationAlertDialog"); 495 case AccessibilityRole::ApplicationDialog: 496 return AXARIAContentGroupText(@"ARIAApplicationDialog"); 497 case AccessibilityRole::ApplicationLog: 498 return AXARIAContentGroupText(@"ARIAApplicationLog"); 499 case AccessibilityRole::ApplicationMarquee: 500 return AXARIAContentGroupText(@"ARIAApplicationMarquee"); 501 case AccessibilityRole::ApplicationStatus: 502 return AXARIAContentGroupText(@"ARIAApplicationStatus"); 503 case AccessibilityRole::ApplicationTimer: 504 return AXARIAContentGroupText(@"ARIAApplicationTimer"); 505 case AccessibilityRole::Document: 506 return AXARIAContentGroupText(@"ARIADocument"); 507 case AccessibilityRole::DocumentArticle: 508 return AXARIAContentGroupText(@"ARIADocumentArticle"); 509 case AccessibilityRole::DocumentMath: 510 return AXARIAContentGroupText(@"ARIADocumentMath"); 511 case AccessibilityRole::DocumentNote: 512 return AXARIAContentGroupText(@"ARIADocumentNote"); 513 case AccessibilityRole::UserInterfaceTooltip: 514 return AXARIAContentGroupText(@"ARIAUserInterfaceTooltip"); 515 case AccessibilityRole::TabPanel: 516 return AXARIAContentGroupText(@"ARIATabPanel"); 517 case AccessibilityRole::WebApplication: 518 return AXARIAContentGroupText(@"ARIAWebApplication"); 519 default: 520 return nil; 521 } 472 return m_object->ariaLandmarkRoleDescription(); 522 473 } 523 474 -
trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
r252175 r252181 2031 2031 } 2032 2032 2033 using AccessibilityRoleMap = HashMap<int, CFStringRef>;2034 2035 static AccessibilityRoleMap createAccessibilityRoleMap()2036 {2037 struct RoleEntry {2038 AccessibilityRole value;2039 __unsafe_unretained NSString *string;2040 };2041 static const RoleEntry roles[] = {2042 { AccessibilityRole::Unknown, NSAccessibilityUnknownRole },2043 { AccessibilityRole::Button, NSAccessibilityButtonRole },2044 { AccessibilityRole::RadioButton, NSAccessibilityRadioButtonRole },2045 { AccessibilityRole::CheckBox, NSAccessibilityCheckBoxRole },2046 { AccessibilityRole::Slider, NSAccessibilitySliderRole },2047 { AccessibilityRole::TabGroup, NSAccessibilityTabGroupRole },2048 { AccessibilityRole::TextField, NSAccessibilityTextFieldRole },2049 { AccessibilityRole::StaticText, NSAccessibilityStaticTextRole },2050 { AccessibilityRole::TextArea, NSAccessibilityTextAreaRole },2051 { AccessibilityRole::ScrollArea, NSAccessibilityScrollAreaRole },2052 { AccessibilityRole::PopUpButton, NSAccessibilityPopUpButtonRole },2053 { AccessibilityRole::MenuButton, NSAccessibilityMenuButtonRole },2054 { AccessibilityRole::Table, NSAccessibilityTableRole },2055 { AccessibilityRole::Application, NSAccessibilityApplicationRole },2056 { AccessibilityRole::Group, NSAccessibilityGroupRole },2057 { AccessibilityRole::TextGroup, NSAccessibilityGroupRole },2058 { AccessibilityRole::RadioGroup, NSAccessibilityRadioGroupRole },2059 { AccessibilityRole::List, NSAccessibilityListRole },2060 { AccessibilityRole::Directory, NSAccessibilityListRole },2061 { AccessibilityRole::ScrollBar, NSAccessibilityScrollBarRole },2062 { AccessibilityRole::ValueIndicator, NSAccessibilityValueIndicatorRole },2063 { AccessibilityRole::Image, NSAccessibilityImageRole },2064 { AccessibilityRole::MenuBar, NSAccessibilityMenuBarRole },2065 { AccessibilityRole::Menu, NSAccessibilityMenuRole },2066 { AccessibilityRole::MenuItem, NSAccessibilityMenuItemRole },2067 { AccessibilityRole::MenuItemCheckbox, NSAccessibilityMenuItemRole },2068 { AccessibilityRole::MenuItemRadio, NSAccessibilityMenuItemRole },2069 { AccessibilityRole::Column, NSAccessibilityColumnRole },2070 { AccessibilityRole::Row, NSAccessibilityRowRole },2071 { AccessibilityRole::Toolbar, NSAccessibilityToolbarRole },2072 { AccessibilityRole::BusyIndicator, NSAccessibilityBusyIndicatorRole },2073 { AccessibilityRole::ProgressIndicator, NSAccessibilityProgressIndicatorRole },2074 { AccessibilityRole::Meter, NSAccessibilityLevelIndicatorRole },2075 { AccessibilityRole::Window, NSAccessibilityWindowRole },2076 { AccessibilityRole::Drawer, NSAccessibilityDrawerRole },2077 { AccessibilityRole::SystemWide, NSAccessibilitySystemWideRole },2078 { AccessibilityRole::Outline, NSAccessibilityOutlineRole },2079 { AccessibilityRole::Incrementor, NSAccessibilityIncrementorRole },2080 { AccessibilityRole::Browser, NSAccessibilityBrowserRole },2081 { AccessibilityRole::ComboBox, NSAccessibilityComboBoxRole },2082 { AccessibilityRole::SplitGroup, NSAccessibilitySplitGroupRole },2083 { AccessibilityRole::Splitter, NSAccessibilitySplitterRole },2084 { AccessibilityRole::ColorWell, NSAccessibilityColorWellRole },2085 { AccessibilityRole::GrowArea, NSAccessibilityGrowAreaRole },2086 { AccessibilityRole::Sheet, NSAccessibilitySheetRole },2087 { AccessibilityRole::HelpTag, NSAccessibilityHelpTagRole },2088 { AccessibilityRole::Matte, NSAccessibilityMatteRole },2089 { AccessibilityRole::Ruler, NSAccessibilityRulerRole },2090 { AccessibilityRole::RulerMarker, NSAccessibilityRulerMarkerRole },2091 { AccessibilityRole::Link, NSAccessibilityLinkRole },2092 { AccessibilityRole::DisclosureTriangle, NSAccessibilityDisclosureTriangleRole },2093 { AccessibilityRole::Grid, NSAccessibilityTableRole },2094 { AccessibilityRole::TreeGrid, NSAccessibilityTableRole },2095 { AccessibilityRole::WebCoreLink, NSAccessibilityLinkRole },2096 { AccessibilityRole::ImageMapLink, NSAccessibilityLinkRole },2097 { AccessibilityRole::ImageMap, @"AXImageMap" },2098 { AccessibilityRole::ListMarker, @"AXListMarker" },2099 { AccessibilityRole::WebArea, @"AXWebArea" },2100 { AccessibilityRole::Heading, @"AXHeading" },2101 { AccessibilityRole::ListBox, NSAccessibilityListRole },2102 { AccessibilityRole::ListBoxOption, NSAccessibilityStaticTextRole },2103 { AccessibilityRole::Cell, NSAccessibilityCellRole },2104 { AccessibilityRole::GridCell, NSAccessibilityCellRole },2105 { AccessibilityRole::TableHeaderContainer, NSAccessibilityGroupRole },2106 { AccessibilityRole::ColumnHeader, NSAccessibilityCellRole },2107 { AccessibilityRole::RowHeader, NSAccessibilityCellRole },2108 { AccessibilityRole::Definition, NSAccessibilityGroupRole },2109 { AccessibilityRole::DescriptionListDetail, NSAccessibilityGroupRole },2110 { AccessibilityRole::DescriptionListTerm, NSAccessibilityGroupRole },2111 { AccessibilityRole::Term, NSAccessibilityGroupRole },2112 { AccessibilityRole::DescriptionList, NSAccessibilityListRole },2113 { AccessibilityRole::SliderThumb, NSAccessibilityValueIndicatorRole },2114 { AccessibilityRole::WebApplication, NSAccessibilityGroupRole },2115 { AccessibilityRole::LandmarkBanner, NSAccessibilityGroupRole },2116 { AccessibilityRole::LandmarkComplementary, NSAccessibilityGroupRole },2117 { AccessibilityRole::LandmarkDocRegion, NSAccessibilityGroupRole },2118 { AccessibilityRole::LandmarkContentInfo, NSAccessibilityGroupRole },2119 { AccessibilityRole::LandmarkMain, NSAccessibilityGroupRole },2120 { AccessibilityRole::LandmarkNavigation, NSAccessibilityGroupRole },2121 { AccessibilityRole::LandmarkRegion, NSAccessibilityGroupRole },2122 { AccessibilityRole::LandmarkSearch, NSAccessibilityGroupRole },2123 { AccessibilityRole::ApplicationAlert, NSAccessibilityGroupRole },2124 { AccessibilityRole::ApplicationAlertDialog, NSAccessibilityGroupRole },2125 { AccessibilityRole::ApplicationDialog, NSAccessibilityGroupRole },2126 { AccessibilityRole::ApplicationGroup, NSAccessibilityGroupRole },2127 { AccessibilityRole::ApplicationTextGroup, NSAccessibilityGroupRole },2128 { AccessibilityRole::ApplicationLog, NSAccessibilityGroupRole },2129 { AccessibilityRole::ApplicationMarquee, NSAccessibilityGroupRole },2130 { AccessibilityRole::ApplicationStatus, NSAccessibilityGroupRole },2131 { AccessibilityRole::ApplicationTimer, NSAccessibilityGroupRole },2132 { AccessibilityRole::Document, NSAccessibilityGroupRole },2133 { AccessibilityRole::DocumentArticle, NSAccessibilityGroupRole },2134 { AccessibilityRole::DocumentMath, NSAccessibilityGroupRole },2135 { AccessibilityRole::DocumentNote, NSAccessibilityGroupRole },2136 { AccessibilityRole::UserInterfaceTooltip, NSAccessibilityGroupRole },2137 { AccessibilityRole::Tab, NSAccessibilityRadioButtonRole },2138 { AccessibilityRole::TabList, NSAccessibilityTabGroupRole },2139 { AccessibilityRole::TabPanel, NSAccessibilityGroupRole },2140 { AccessibilityRole::Tree, NSAccessibilityOutlineRole },2141 { AccessibilityRole::TreeItem, NSAccessibilityRowRole },2142 { AccessibilityRole::ListItem, NSAccessibilityGroupRole },2143 { AccessibilityRole::Paragraph, NSAccessibilityGroupRole },2144 { AccessibilityRole::Label, NSAccessibilityGroupRole },2145 { AccessibilityRole::Div, NSAccessibilityGroupRole },2146 { AccessibilityRole::Form, NSAccessibilityGroupRole },2147 { AccessibilityRole::SpinButton, NSAccessibilityIncrementorRole },2148 { AccessibilityRole::Footer, NSAccessibilityGroupRole },2149 { AccessibilityRole::ToggleButton, NSAccessibilityCheckBoxRole },2150 { AccessibilityRole::Canvas, NSAccessibilityImageRole },2151 { AccessibilityRole::SVGRoot, NSAccessibilityGroupRole },2152 { AccessibilityRole::Legend, NSAccessibilityGroupRole },2153 { AccessibilityRole::MathElement, NSAccessibilityGroupRole },2154 { AccessibilityRole::Audio, NSAccessibilityGroupRole },2155 { AccessibilityRole::Video, NSAccessibilityGroupRole },2156 { AccessibilityRole::HorizontalRule, NSAccessibilitySplitterRole },2157 { AccessibilityRole::Blockquote, NSAccessibilityGroupRole },2158 { AccessibilityRole::Switch, NSAccessibilityCheckBoxRole },2159 { AccessibilityRole::SearchField, NSAccessibilityTextFieldRole },2160 { AccessibilityRole::Pre, NSAccessibilityGroupRole },2161 { AccessibilityRole::RubyBase, NSAccessibilityGroupRole },2162 { AccessibilityRole::RubyBlock, NSAccessibilityGroupRole },2163 { AccessibilityRole::RubyInline, NSAccessibilityGroupRole },2164 { AccessibilityRole::RubyRun, NSAccessibilityGroupRole },2165 { AccessibilityRole::RubyText, NSAccessibilityGroupRole },2166 { AccessibilityRole::Details, NSAccessibilityGroupRole },2167 { AccessibilityRole::Summary, NSAccessibilityButtonRole },2168 { AccessibilityRole::SVGTextPath, NSAccessibilityGroupRole },2169 { AccessibilityRole::SVGText, NSAccessibilityGroupRole },2170 { AccessibilityRole::SVGTSpan, NSAccessibilityGroupRole },2171 { AccessibilityRole::Inline, NSAccessibilityGroupRole },2172 { AccessibilityRole::Mark, NSAccessibilityGroupRole },2173 { AccessibilityRole::Time, NSAccessibilityGroupRole },2174 { AccessibilityRole::Feed, NSAccessibilityGroupRole },2175 { AccessibilityRole::Figure, NSAccessibilityGroupRole },2176 { AccessibilityRole::Footnote, NSAccessibilityGroupRole },2177 { AccessibilityRole::GraphicsDocument, NSAccessibilityGroupRole },2178 { AccessibilityRole::GraphicsObject, NSAccessibilityGroupRole },2179 { AccessibilityRole::GraphicsSymbol, NSAccessibilityImageRole },2180 { AccessibilityRole::Caption, NSAccessibilityGroupRole },2181 { AccessibilityRole::Deletion, NSAccessibilityGroupRole },2182 { AccessibilityRole::Insertion, NSAccessibilityGroupRole },2183 { AccessibilityRole::Subscript, NSAccessibilityGroupRole },2184 { AccessibilityRole::Superscript, NSAccessibilityGroupRole },2185 };2186 AccessibilityRoleMap roleMap;2187 for (auto& role : roles)2188 roleMap.add(static_cast<int>(role.value), (__bridge CFStringRef)role.string);2189 return roleMap;2190 }2191 2192 static NSString *roleValueToNSString(AccessibilityRole value)2193 {2194 static NeverDestroyed<AccessibilityRoleMap> roleMap = createAccessibilityRoleMap();2195 return (__bridge NSString *)roleMap.get().get(static_cast<int>(value));2196 }2197 2198 2033 - (NSString*)role 2199 2034 { … … 2202 2037 return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityRoleAttribute]; 2203 2038 ALLOW_DEPRECATED_DECLARATIONS_END 2204 AccessibilityRole role = _axBackingObject->roleValue(); 2205 2206 if (role == AccessibilityRole::Label && is<AccessibilityLabel>(*m_object) && downcast<AccessibilityLabel>(*m_object).containsOnlyStaticText()) 2207 role = AccessibilityRole::StaticText; 2208 2209 // The mfenced element creates anonymous RenderMathMLOperators with no RenderText 2210 // descendants. Because these anonymous renderers are the only accessible objects 2211 // containing the operator, assign AccessibilityRole::StaticText. 2212 if (m_object->isAnonymousMathOperator()) 2213 role = AccessibilityRole::StaticText; 2214 2215 if (role == AccessibilityRole::Canvas && m_object->canvasHasFallbackContent()) 2216 role = AccessibilityRole::Group; 2217 NSString* string = roleValueToNSString(role); 2218 if (string != nil) 2039 2040 NSString *string = m_object->rolePlatformString(); 2041 if (string.length) 2219 2042 return string; 2220 2043 return NSAccessibilityUnknownRole; … … 2445 2268 ALLOW_DEPRECATED_DECLARATIONS_END 2446 2269 2447 const AtomString& overrideRoleDescription = m_object->roleDescription(); 2448 if (!overrideRoleDescription.isNull() && !overrideRoleDescription.isEmpty()) 2449 return overrideRoleDescription; 2450 2451 NSString* axRole = [self role]; 2452 2453 if ([axRole isEqualToString:NSAccessibilityGroupRole]) { 2454 2455 if (m_object->isOutput()) 2456 return AXOutputText(); 2457 2458 NSString *ariaLandmarkRoleDescription = [self ariaLandmarkRoleDescription]; 2459 if (ariaLandmarkRoleDescription) 2460 return ariaLandmarkRoleDescription; 2461 2462 switch (m_object->roleValue()) { 2463 case AccessibilityRole::Audio: 2464 return localizedMediaControlElementString("AudioElement"); 2465 case AccessibilityRole::Definition: 2466 return AXDefinitionText(); 2467 case AccessibilityRole::DescriptionListTerm: 2468 case AccessibilityRole::Term: 2469 return AXDescriptionListTermText(); 2470 case AccessibilityRole::DescriptionListDetail: 2471 return AXDescriptionListDetailText(); 2472 case AccessibilityRole::Details: 2473 return AXDetailsText(); 2474 case AccessibilityRole::Feed: 2475 return AXFeedText(); 2476 case AccessibilityRole::Footer: 2477 return AXFooterRoleDescriptionText(); 2478 case AccessibilityRole::Mark: 2479 return AXMarkText(); 2480 case AccessibilityRole::Video: 2481 return localizedMediaControlElementString("VideoElement"); 2482 case AccessibilityRole::GraphicsDocument: 2483 return AXARIAContentGroupText(@"ARIADocument"); 2484 default: 2485 return NSAccessibilityRoleDescription(NSAccessibilityGroupRole, [self subrole]); 2486 } 2487 } 2488 2489 if ([axRole isEqualToString:@"AXWebArea"]) 2490 return AXWebAreaText(); 2491 2492 if ([axRole isEqualToString:@"AXLink"]) 2493 return AXLinkText(); 2494 2495 if ([axRole isEqualToString:@"AXListMarker"]) 2496 return AXListMarkerText(); 2497 2498 if ([axRole isEqualToString:@"AXImageMap"]) 2499 return AXImageMapText(); 2500 2501 if ([axRole isEqualToString:@"AXHeading"]) 2502 return AXHeadingText(); 2503 2504 if ([axRole isEqualToString:NSAccessibilityTextFieldRole]) { 2505 auto* node = m_object->node(); 2506 if (is<HTMLInputElement>(node)) { 2507 auto& input = downcast<HTMLInputElement>(*node); 2508 if (input.isEmailField()) 2509 return AXEmailFieldText(); 2510 if (input.isTelephoneField()) 2511 return AXTelephoneFieldText(); 2512 if (input.isURLField()) 2513 return AXURLFieldText(); 2514 if (input.isNumberField()) 2515 return AXNumberFieldText(); 2516 2517 // These input types are not enabled on mac yet, we check the type attribute for now. 2518 auto& type = input.attributeWithoutSynchronization(typeAttr); 2519 if (equalLettersIgnoringASCIICase(type, "date")) 2520 return AXDateFieldText(); 2521 if (equalLettersIgnoringASCIICase(type, "time")) 2522 return AXTimeFieldText(); 2523 if (equalLettersIgnoringASCIICase(type, "week")) 2524 return AXWeekFieldText(); 2525 if (equalLettersIgnoringASCIICase(type, "month")) 2526 return AXMonthFieldText(); 2527 if (equalLettersIgnoringASCIICase(type, "datetime-local")) 2528 return AXDateTimeFieldText(); 2529 } 2530 } 2531 2532 if (_axBackingObject->isFileUploadButton()) 2533 return AXFileUploadButtonText(); 2534 2535 // Only returning for DL (not UL or OL) because description changed with HTML5 from 'definition list' to 2536 // superset 'description list' and does not return the same values in AX API on some OS versions. 2537 if (is<AccessibilityList>(*m_object)) { 2538 if (downcast<AccessibilityList>(*m_object).isDescriptionList()) 2539 return AXDescriptionListText(); 2540 } 2541 2542 if (m_object->roleValue() == AccessibilityRole::HorizontalRule) 2543 return AXHorizontalRuleDescriptionText(); 2544 2545 // AppKit also returns AXTab for the role description for a tab item. 2546 if (m_object->isTabItem()) 2547 return NSAccessibilityRoleDescription(@"AXTab", nil); 2548 2549 if (m_object->isSummary()) 2550 return AXSummaryText(); 2551 2552 // We should try the system default role description for all other roles. 2270 String roleDescription = m_object->roleDescription(); 2271 if (!roleDescription.isEmpty()) 2272 return roleDescription; 2273 2274 NSString *axRole = m_object->rolePlatformString(); 2275 // Fallback to the system default role description. 2553 2276 // If we get the same string back, then as a last resort, return unknown. 2554 NSString *defaultRoleDescription = NSAccessibilityRoleDescription(axRole, [self subrole]);2555 2277 NSString *defaultRoleDescription = NSAccessibilityRoleDescription(axRole, [self subrole]); 2278 2556 2279 // On earlier Mac versions (Lion), using a non-standard subrole would result in a role description 2557 2280 // being returned that looked like AXRole:AXSubrole. To make all platforms have the same role descriptions -
trunk/Source/WebCore/platform/LocalizedStrings.cpp
r249233 r252181 579 579 { 580 580 return WEB_UI_STRING("week and year field", "accessibility role description for a time field."); 581 } 582 583 String AXARIAContentGroupText(const String& ariaType) 584 { 585 if (ariaType == "ARIAApplicationAlert") 586 return WEB_UI_STRING("alert", "An ARIA accessibility group that acts as an alert."); 587 if (ariaType == "ARIAApplicationAlertDialog") 588 return WEB_UI_STRING("web alert dialog", "An ARIA accessibility group that acts as an alert dialog."); 589 if (ariaType == "ARIAApplicationDialog") 590 return WEB_UI_STRING("web dialog", "An ARIA accessibility group that acts as an dialog."); 591 if (ariaType == "ARIAApplicationLog") 592 return WEB_UI_STRING("log", "An ARIA accessibility group that acts as a console log."); 593 if (ariaType == "ARIAApplicationMarquee") 594 return WEB_UI_STRING("marquee", "An ARIA accessibility group that acts as a marquee."); 595 if (ariaType == "ARIAApplicationStatus") 596 return WEB_UI_STRING("application status", "An ARIA accessibility group that acts as a status update."); 597 if (ariaType == "ARIAApplicationTimer") 598 return WEB_UI_STRING("timer", "An ARIA accessibility group that acts as an updating timer."); 599 if (ariaType == "ARIADocument") 600 return WEB_UI_STRING("document", "An ARIA accessibility group that acts as a document."); 601 if (ariaType == "ARIADocumentArticle") 602 return WEB_UI_STRING("article", "An ARIA accessibility group that acts as an article."); 603 if (ariaType == "ARIADocumentNote") 604 return WEB_UI_STRING("note", "An ARIA accessibility group that acts as a note in a document."); 605 if (ariaType == "ARIAWebApplication") 606 return WEB_UI_STRING("web application", "An ARIA accessibility group that acts as an application."); 607 if (ariaType == "ARIALandmarkBanner") 608 return WEB_UI_STRING("banner", "An ARIA accessibility group that acts as a banner."); 609 if (ariaType == "ARIALandmarkComplementary") 610 return WEB_UI_STRING("complementary", "An ARIA accessibility group that acts as a region of complementary information."); 611 if (ariaType == "ARIALandmarkContentInfo") 612 return WEB_UI_STRING("content information", "An ARIA accessibility group that contains content."); 613 if (ariaType == "ARIALandmarkMain") 614 return WEB_UI_STRING("main", "An ARIA accessibility group that is the main portion of the website."); 615 if (ariaType == "ARIALandmarkNavigation") 616 return WEB_UI_STRING("navigation", "An ARIA accessibility group that contains the main navigation elements of a website."); 617 if (ariaType == "ARIALandmarkRegion") 618 return WEB_UI_STRING("region", "An ARIA accessibility group that acts as a distinct region in a document."); 619 if (ariaType == "ARIALandmarkSearch") 620 return WEB_UI_STRING("search", "An ARIA accessibility group that contains a search feature of a website."); 621 if (ariaType == "ARIAUserInterfaceTooltip") 622 return WEB_UI_STRING("tooltip", "An ARIA accessibility group that acts as a tooltip."); 623 if (ariaType == "ARIATabPanel") 624 return WEB_UI_STRING("tab panel", "An ARIA accessibility group that contains the content of a tab."); 625 if (ariaType == "ARIADocumentMath") 626 return WEB_UI_STRING("math", "An ARIA accessibility group that contains mathematical symbols."); 627 return String(); 628 } 629 630 String AXHorizontalRuleDescriptionText() 631 { 632 return WEB_UI_STRING("separator", "accessibility role description for a horizontal rule [<hr>]"); 633 } 634 635 String AXMarkText() 636 { 637 return WEB_UI_STRING("highlighted", "accessibility role description for a mark element"); 581 638 } 582 639 -
trunk/Source/WebCore/platform/LocalizedStrings.h
r250973 r252181 187 187 String AXNumberFieldText(); 188 188 String AXWeekFieldText(); 189 189 String AXARIAContentGroupText(const String& ariaType); 190 String AXHorizontalRuleDescriptionText(); 191 String AXMarkText(); 192 190 193 String AXButtonActionVerb(); 191 194 String AXRadioButtonActionVerb(); … … 204 207 #endif 205 208 #if PLATFORM(COCOA) 206 String AXARIAContentGroupText(const String& ariaType);207 String AXHorizontalRuleDescriptionText();208 String AXMarkText();209 209 #if ENABLE(METER_ELEMENT) 210 210 String AXMeterGaugeRegionOptimumText(); -
trunk/Source/WebCore/platform/cocoa/LocalizedStringsCocoa.mm
r239613 r252181 182 182 #endif // ENABLE(CONTEXT_MENUS) 183 183 184 String AXARIAContentGroupText(const String& ariaType)185 {186 if (ariaType == "ARIAApplicationAlert")187 return WEB_UI_STRING("alert", "An ARIA accessibility group that acts as an alert.");188 if (ariaType == "ARIAApplicationAlertDialog")189 return WEB_UI_STRING("web alert dialog", "An ARIA accessibility group that acts as an alert dialog.");190 if (ariaType == "ARIAApplicationDialog")191 return WEB_UI_STRING("web dialog", "An ARIA accessibility group that acts as an dialog.");192 if (ariaType == "ARIAApplicationLog")193 return WEB_UI_STRING("log", "An ARIA accessibility group that acts as a console log.");194 if (ariaType == "ARIAApplicationMarquee")195 return WEB_UI_STRING("marquee", "An ARIA accessibility group that acts as a marquee.");196 if (ariaType == "ARIAApplicationStatus")197 return WEB_UI_STRING("application status", "An ARIA accessibility group that acts as a status update.");198 if (ariaType == "ARIAApplicationTimer")199 return WEB_UI_STRING("timer", "An ARIA accessibility group that acts as an updating timer.");200 if (ariaType == "ARIADocument")201 return WEB_UI_STRING("document", "An ARIA accessibility group that acts as a document.");202 if (ariaType == "ARIADocumentArticle")203 return WEB_UI_STRING("article", "An ARIA accessibility group that acts as an article.");204 if (ariaType == "ARIADocumentNote")205 return WEB_UI_STRING("note", "An ARIA accessibility group that acts as a note in a document.");206 if (ariaType == "ARIAWebApplication")207 return WEB_UI_STRING("web application", "An ARIA accessibility group that acts as an application.");208 if (ariaType == "ARIALandmarkBanner")209 return WEB_UI_STRING("banner", "An ARIA accessibility group that acts as a banner.");210 if (ariaType == "ARIALandmarkComplementary")211 return WEB_UI_STRING("complementary", "An ARIA accessibility group that acts as a region of complementary information.");212 if (ariaType == "ARIALandmarkContentInfo")213 return WEB_UI_STRING("content information", "An ARIA accessibility group that contains content.");214 if (ariaType == "ARIALandmarkMain")215 return WEB_UI_STRING("main", "An ARIA accessibility group that is the main portion of the website.");216 if (ariaType == "ARIALandmarkNavigation")217 return WEB_UI_STRING("navigation", "An ARIA accessibility group that contains the main navigation elements of a website.");218 if (ariaType == "ARIALandmarkRegion")219 return WEB_UI_STRING("region", "An ARIA accessibility group that acts as a distinct region in a document.");220 if (ariaType == "ARIALandmarkSearch")221 return WEB_UI_STRING("search", "An ARIA accessibility group that contains a search feature of a website.");222 if (ariaType == "ARIAUserInterfaceTooltip")223 return WEB_UI_STRING("tooltip", "An ARIA accessibility group that acts as a tooltip.");224 if (ariaType == "ARIATabPanel")225 return WEB_UI_STRING("tab panel", "An ARIA accessibility group that contains the content of a tab.");226 if (ariaType == "ARIADocumentMath")227 return WEB_UI_STRING("math", "An ARIA accessibility group that contains mathematical symbols.");228 return String();229 }230 231 String AXHorizontalRuleDescriptionText()232 {233 return WEB_UI_STRING("separator", "accessibility role description for a horizontal rule [<hr>]");234 }235 236 String AXMarkText()237 {238 return WEB_UI_STRING("highlighted", "accessibility role description for a mark element");239 }240 241 184 #if ENABLE(METER_ELEMENT) 242 185 String AXMeterGaugeRegionOptimumText()
Note: See TracChangeset
for help on using the changeset viewer.