Changeset 252181 in webkit


Ignore:
Timestamp:
Nov 7, 2019 5:21:57 AM (4 years ago)
Author:
Andres Gonzalez
Message:

Implement AXIsolatedTreeNode::roleDescription.
https://bugs.webkit.org/show_bug.cgi?id=203863
<rdar://problem/56934443>

Reviewed by Chris Fleizach.

No new tests needed, no new functionality.

AccessibilityObjectWrapper cannot call any of the AX.*Text functions to
retrieve localized role descriptions, because when running on the
secondary thread, those AtomStrings are not accessible. Moreover, some
of the special cases require access to DOM objects that are not
available in the secondary thread. Therefore, added
AXCoreObject::rolePlatformDescription that runs in the main thread to
initialize the corresponding attribute in AXIsolatedTreeNode.
rolePlatformString, createPlatformRoleMap, roleToPlatformString,
ariaLandmarkRoleDescription, are helper functions. The platform
functions allow to customize the behavior of roleDescription in each
platform. The platform overrides are implemented for mac. Other
platforms are pending.

  • accessibility/AccessibilityObject.cpp:

(WebCore::AccessibilityObject::rolePlatformString const):
(WebCore::AccessibilityObject::rolePlatformDescription const):
(WebCore::AccessibilityObject::ariaLandmarkRoleDescription const):
(WebCore::AccessibilityObject::roleDescription const):
(WebCore::Accessibility::createPlatformRoleMap):
(WebCore::Accessibility::roleToPlatformString):

  • accessibility/AccessibilityObject.h:
  • accessibility/AccessibilityObjectInterface.h:
  • accessibility/isolatedtree/AXIsolatedTreeNode.cpp:

(WebCore::AXIsolatedTreeNode::initializeAttributeData):

  • accessibility/isolatedtree/AXIsolatedTreeNode.h:
  • accessibility/mac/AccessibilityObjectMac.mm:

(WebCore::AccessibilityObject::rolePlatformString const):
(WebCore::AccessibilityObject::rolePlatformDescription const):
(WebCore::Accessibility::createPlatformRoleMap):

  • accessibility/mac/WebAccessibilityObjectWrapperBase.mm:

(-[WebAccessibilityObjectWrapperBase accessibilityObject]):
(-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]): Implementation moved to AccessibilityObject.

  • accessibility/mac/WebAccessibilityObjectWrapperMac.mm:

(-[WebAccessibilityObjectWrapper role]): Special cases moved to rolePlatformString.
(-[WebAccessibilityObjectWrapper roleDescription]):
(createAccessibilityRoleMap): Deleted, became Accessibility::createPlatformRoleMap.
(roleValueToNSString): Deleted, became Accessibility::roleToPlatformString.

  • platform/LocalizedStrings.cpp:

(WebCore::AXARIAContentGroupText):
(WebCore::AXHorizontalRuleDescriptionText):
(WebCore::AXMarkText):

  • platform/LocalizedStrings.h:
  • platform/cocoa/LocalizedStringsCocoa.mm:

(WebCore::AXARIAContentGroupText): Deleted, moved to LocalizedStrings.cpp.
(WebCore::AXHorizontalRuleDescriptionText): Deleted, moved to LocalizedStrings.cpp.
(WebCore::AXMarkText): Deleted, moved to LocalizedStrings.cpp.

Location:
trunk/Source/WebCore
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252179 r252181  
     12019-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
    1582019-11-07  Chris Lord  <clord@igalia.com>
    259
  • trunk/Source/WebCore/accessibility/AccessibilityObject.cpp

    r251870 r252181  
    26022602}
    26032603
     2604#if !PLATFORM(MAC)
     2605String AccessibilityObject::rolePlatformString() const
     2606{
     2607    // FIXME: implement in other platforms.
     2608    return String();
     2609}
     2610
     2611String AccessibilityObject::rolePlatformDescription() const
     2612{
     2613    // FIXME: implement in other platforms.
     2614    return String();
     2615}
     2616#endif
     2617
     2618String 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
    26042669String AccessibilityObject::roleDescription() const
    26052670{
    26062671    // aria-roledescription takes precedence over any other rule.
    26072672    String roleDescription = stripLeadingAndTrailingHTMLSpaces(getAttribute(aria_roledescriptionAttr));
     2673    if (!roleDescription.isEmpty())
     2674        return roleDescription;
     2675
     2676    roleDescription = rolePlatformDescription();
    26082677    if (!roleDescription.isEmpty())
    26092678        return roleDescription;
     
    37673836}
    37683837
     3838namespace Accessibility {
     3839
     3840#if !PLATFORM(MAC)
     3841// FIXME: implement in other platforms.
     3842PlatformRoleMap createPlatformRoleMap() { return PlatformRoleMap(); }
     3843#endif
     3844
     3845String roleToPlatformString(AccessibilityRole role)
     3846{
     3847    static NeverDestroyed<PlatformRoleMap> roleMap = createPlatformRoleMap();
     3848    return roleMap->get(static_cast<unsigned>(role));
     3849}
     3850
     3851} // namespace Accessibility
     3852
    37693853} // namespace WebCore
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r251870 r252181  
    327327    const AtomString& linkRelValue() const override;
    328328    void classList(Vector<String>&) const override;
    329     String roleDescription() const override;
    330329    AccessibilityCurrentState currentState() const override;
    331330    String currentValue() const override;
     
    429428
    430429    AccessibilityRole roleValue() const override { return m_role; }
     430    String rolePlatformString() const override;
     431    String roleDescription() const override;
     432    String ariaLandmarkRoleDescription() const override;
    431433
    432434    AXObjectCache* axObjectCache() const override;
     
    795797    static bool objectMatchesSearchCriteriaWithResultLimit(AXCoreObject*, AccessibilitySearchCriteria*, AccessibilityChildrenVector&);
    796798    virtual AccessibilityRole buttonRoleType() const;
     799    String rolePlatformDescription() const;
    797800    bool isOnScreen() const override;
    798801    bool dispatchTouchEvent();
     
    829832AccessibilityObject* firstAccessibleObjectFromNode(const Node*, const WTF::Function<bool(const AccessibilityObject&)>& isAccessible);
    830833
     834namespace Accessibility {
     835
     836using PlatformRoleMap = HashMap<AccessibilityRole, String, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned>>;
     837
     838PlatformRoleMap createPlatformRoleMap();
     839String roleToPlatformString(AccessibilityRole);
     840
     841} // namespace Accessibility
     842
    831843} // namespace WebCore
    832844
  • trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h

    r251870 r252181  
    670670    virtual const AtomString& linkRelValue() const = 0;
    671671    virtual void classList(Vector<String>&) const = 0;
    672     virtual String roleDescription() const = 0;
    673672    virtual AccessibilityCurrentState currentState() const = 0;
    674673    virtual String currentValue() const = 0;
     
    765764
    766765    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;
    767772
    768773    virtual AXObjectCache* axObjectCache() const = 0;
  • trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.cpp

    r251974 r252181  
    5555{
    5656    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());
    5760    setProperty(AXPropertyName::IsAttachment, object.isAttachment());
    5861    setProperty(AXPropertyName::IsMediaControlLabel, object.isMediaControlLabel());
  • trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTreeNode.h

    r251974 r252181  
    5555    void init() override { }
    5656
     57    AccessibilityObjectWrapper* wrapper() const override { return m_wrapper.get(); }
    5758    void detach(AccessibilityDetachmentType, AXObjectCache* = nullptr) override { }
    5859    bool isDetached() const override { return false; }
     60
     61    void setTreeIdentifier(AXIsolatedTreeID);
     62    void setParent(AXID);
     63    void appendChild(AXID);
    5964
    6065private:
     
    260265    const AtomString& linkRelValue() const override { return nullAtom(); }
    261266    void classList(Vector<String>&) const override { }
    262     String roleDescription() const override { return String(); }
    263267    AccessibilityCurrentState currentState() const override { return AccessibilityCurrentState::False; }
    264268    String currentValue() const override { return String(); }
     
    344348
    345349    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); }
    346353
    347354    AXObjectCache* axObjectCache() const override { return nullptr; }
     
    591598    bool isHidden() const override { return false; }
    592599
    593     AccessibilityObjectWrapper* wrapper() const override { return m_wrapper.get(); }
    594600    void setWrapper(AccessibilityObjectWrapper* wrapper) override { m_wrapper = wrapper; }
    595601
     
    631637    void clearIsIgnoredFromParentData() override { }
    632638    void setIsIgnoredFromParentDataForChild(AXCoreObject*) override { }
    633 
    634     void setTreeIdentifier(AXIsolatedTreeID);
    635     AXIsolatedTree* tree() const;
    636     void setParent(AXID);
    637     void appendChild(AXID);
    638639
    639640    enum class AXPropertyName : uint8_t {
     
    653654        RelativeFrame,
    654655        RoleValue,
     656        RolePlatformString,
     657        RoleDescription,
     658        ARIALandmarkRoleDescription,
    655659        SpeechHint,
    656660        Title,
     
    660664
    661665    AXIsolatedTreeID treeIdentifier() const { return m_treeIdentifier; }
     666    AXIsolatedTree* tree() const;
    662667
    663668    AXIsolatedTreeNode() = default;
  • trunk/Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm

    r251798 r252181  
    2626#import "config.h"
    2727#import "AccessibilityObject.h"
     28#import "AccessibilityLabel.h"
     29#import "AccessibilityList.h"
    2830#import "ElementAncestorIterator.h"
    2931#import "HTMLFieldSetElement.h"
     32#import "HTMLInputElement.h"
     33#import "LocalizedStrings.h"
    3034#import "RenderObject.h"
    3135#import "Settings.h"
     
    129133}
    130134
     135String 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
     152String 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
     258namespace Accessibility {
     259
     260PlatformRoleMap 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
    131419} // WebCore
    132420
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.mm

    r251974 r252181  
    327327- (AXCoreObject*)accessibilityObject
    328328{
    329 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
    330     ASSERT(!_AXUIElementRequestServicedBySecondaryAXThread());
    331 #endif
    332329    return m_object;
    333330}
     
    473470- (NSString *)ariaLandmarkRoleDescription
    474471{
    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();
    522473}
    523474
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm

    r252175 r252181  
    20312031}
    20322032
    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 
    21982033- (NSString*)role
    21992034{
     
    22022037        return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityRoleAttribute];
    22032038    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)
    22192042        return string;
    22202043    return NSAccessibilityUnknownRole;
     
    24452268    ALLOW_DEPRECATED_DECLARATIONS_END
    24462269
    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.
    25532276    // 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
    25562279    // On earlier Mac versions (Lion), using a non-standard subrole would result in a role description
    25572280    // being returned that looked like AXRole:AXSubrole. To make all platforms have the same role descriptions
  • trunk/Source/WebCore/platform/LocalizedStrings.cpp

    r249233 r252181  
    579579{
    580580    return WEB_UI_STRING("week and year field", "accessibility role description for a time field.");
     581}
     582
     583String 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
     630String AXHorizontalRuleDescriptionText()
     631{
     632    return WEB_UI_STRING("separator", "accessibility role description for a horizontal rule [<hr>]");
     633}
     634
     635String AXMarkText()
     636{
     637    return WEB_UI_STRING("highlighted", "accessibility role description for a mark element");
    581638}
    582639
  • trunk/Source/WebCore/platform/LocalizedStrings.h

    r250973 r252181  
    187187    String AXNumberFieldText();
    188188    String AXWeekFieldText();
    189    
     189    String AXARIAContentGroupText(const String& ariaType);
     190    String AXHorizontalRuleDescriptionText();
     191    String AXMarkText();
     192
    190193    String AXButtonActionVerb();
    191194    String AXRadioButtonActionVerb();
     
    204207#endif
    205208#if PLATFORM(COCOA)
    206     String AXARIAContentGroupText(const String& ariaType);
    207     String AXHorizontalRuleDescriptionText();
    208     String AXMarkText();
    209209#if ENABLE(METER_ELEMENT)
    210210    String AXMeterGaugeRegionOptimumText();
  • trunk/Source/WebCore/platform/cocoa/LocalizedStringsCocoa.mm

    r239613 r252181  
    182182#endif // ENABLE(CONTEXT_MENUS)
    183183
    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 
    241184#if ENABLE(METER_ELEMENT)
    242185String AXMeterGaugeRegionOptimumText()
Note: See TracChangeset for help on using the changeset viewer.