Changeset 257739 in webkit


Ignore:
Timestamp:
Mar 2, 2020 2:50:30 PM (4 years ago)
Author:
Andres Gonzalez
Message:

Fix for LayoutTests/accessibility/mac/search-text/search-text.html in IsolatedTree mode.
https://bugs.webkit.org/show_bug.cgi?id=208434

Reviewed by Chris Fleizach.

Source/WebCore:

Covered by LayoutTests/accessibility/mac/search-text/search-text.html

  • Updates IsolatedTree for AXSelectedTextChanged notifications.
  • Exposes webAreaObject through the AXCoreObject interface.
  • AXIsolatedObject implementation for hasApplePDFAnnotationAttribute,

webAreaObject and stringForRange.

  • accessibility/AXObjectCache.cpp:

(WebCore::AXObjectCache::postTextStateChangeNotification):
(WebCore::AXObjectCache::updateIsolatedTree):
(WebCore::AXObjectCache::rootWebArea):

  • accessibility/AXObjectCache.h:
  • accessibility/AccessibilityObject.h:
  • accessibility/AccessibilityObjectInterface.h:
  • accessibility/AccessibilityRenderObject.cpp:

(WebCore::AccessibilityRenderObject::isLoaded const):
(WebCore::AccessibilityRenderObject::accessKey const):

  • accessibility/AccessibilityScrollView.h:
  • accessibility/ios/AXObjectCacheIOS.mm:

(WebCore::AXObjectCache::postTextStateChangePlatformNotification):
(WebCore::AXObjectCache::postTextReplacementPlatformNotification):
(WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl):

  • accessibility/isolatedtree/AXIsolatedObject.cpp:

(WebCore::AXIsolatedObject::initializeAttributeData):
(WebCore::AXIsolatedObject::stringForRange const):
(WebCore::AXIsolatedObject::hasApplePDFAnnotationAttribute const): Deleted.

  • accessibility/isolatedtree/AXIsolatedObject.h:
  • accessibility/isolatedtree/AXIsolatedTree.cpp:

(WebCore::AXIsolatedTree::removeNode):
(WebCore::AXIsolatedTree::applyPendingChanges):

  • accessibility/mac/AXObjectCacheMac.mm:

(WebCore::AXObjectCache::postTextStateChangePlatformNotification):
(WebCore::addTextMarkerFor):
(WebCore::textReplacementChangeDictionary):
(WebCore::postUserInfoForChanges):
(WebCore::AXObjectCache::postTextReplacementPlatformNotification):
(WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl):

  • accessibility/mac/WebAccessibilityObjectWrapperMac.mm:

(-[WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
(-[WebAccessibilityObjectWrapper associatedPluginParent]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

Tools:

  • WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:

(WTR::AccessibilityController::AccessibilityController): Initializes m_useAXThread.
(WTR::AccessibilityController::rootElement): No need to set m_useAXThread here since it is initialize in the constructor.

  • WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:

(WTR::AccessibilityController::accessibleElementById): Same as above.

LayoutTests:

  • accessibility/mac/aria-expanded-notifications.html:

With this change, we now get the FocusChanged notification when the
script sets focus to a tree item.

Location:
trunk
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r257738 r257739  
     12020-03-02  Andres Gonzalez  <andresg_22@apple.com>
     2
     3        Fix for LayoutTests/accessibility/mac/search-text/search-text.html in IsolatedTree mode.
     4        https://bugs.webkit.org/show_bug.cgi?id=208434
     5
     6        Reviewed by Chris Fleizach.
     7
     8        * accessibility/mac/aria-expanded-notifications.html:
     9        With this change, we now get the FocusChanged notification when the
     10        script sets focus to a tree item.
     11
    1122020-03-02  Jason Lawrence  <lawrence.j@apple.com>
    213
  • trunk/LayoutTests/accessibility/mac/aria-expanded-notifications.html

    r228279 r257739  
    3131    // The order of notifications should be Row Count, Row Collapsed, Row Count, Row Expanded
    3232    function notifyCallback(element, notification) { 
    33         if (notification == "AXLoadComplete" || notification == "AXLayoutComplete")
     33        if (notification == "AXLoadComplete"
     34            || notification == "AXLayoutComplete"
     35            || notification == "AXFocusChanged")
    3436            return;
    3537        notifyName = notification;
  • trunk/Source/WebCore/ChangeLog

    r257732 r257739  
     12020-03-02  Andres Gonzalez  <andresg_22@apple.com>
     2
     3        Fix for LayoutTests/accessibility/mac/search-text/search-text.html in IsolatedTree mode.
     4        https://bugs.webkit.org/show_bug.cgi?id=208434
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Covered by LayoutTests/accessibility/mac/search-text/search-text.html
     9
     10        - Updates IsolatedTree for AXSelectedTextChanged notifications.
     11        - Exposes webAreaObject through the AXCoreObject interface.
     12        - AXIsolatedObject implementation for hasApplePDFAnnotationAttribute,
     13        webAreaObject and stringForRange.
     14
     15        * accessibility/AXObjectCache.cpp:
     16        (WebCore::AXObjectCache::postTextStateChangeNotification):
     17        (WebCore::AXObjectCache::updateIsolatedTree):
     18        (WebCore::AXObjectCache::rootWebArea):
     19        * accessibility/AXObjectCache.h:
     20        * accessibility/AccessibilityObject.h:
     21        * accessibility/AccessibilityObjectInterface.h:
     22        * accessibility/AccessibilityRenderObject.cpp:
     23        (WebCore::AccessibilityRenderObject::isLoaded const):
     24        (WebCore::AccessibilityRenderObject::accessKey const):
     25        * accessibility/AccessibilityScrollView.h:
     26        * accessibility/ios/AXObjectCacheIOS.mm:
     27        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
     28        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
     29        (WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl):
     30        * accessibility/isolatedtree/AXIsolatedObject.cpp:
     31        (WebCore::AXIsolatedObject::initializeAttributeData):
     32        (WebCore::AXIsolatedObject::stringForRange const):
     33        (WebCore::AXIsolatedObject::hasApplePDFAnnotationAttribute const): Deleted.
     34        * accessibility/isolatedtree/AXIsolatedObject.h:
     35        * accessibility/isolatedtree/AXIsolatedTree.cpp:
     36        (WebCore::AXIsolatedTree::removeNode):
     37        (WebCore::AXIsolatedTree::applyPendingChanges):
     38        * accessibility/mac/AXObjectCacheMac.mm:
     39        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
     40        (WebCore::addTextMarkerFor):
     41        (WebCore::textReplacementChangeDictionary):
     42        (WebCore::postUserInfoForChanges):
     43        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
     44        (WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl):
     45        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
     46        (-[WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
     47        (-[WebAccessibilityObjectWrapper associatedPluginParent]):
     48        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
     49        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
     50
    1512020-03-02  Wenson Hsieh  <wenson_hsieh@apple.com>
    252
  • trunk/Source/WebCore/accessibility/AXObjectCache.cpp

    r257292 r257739  
    13651365    }
    13661366
     1367#if ENABLE(ACCESSIBILITY_ISOLATED_TREE)
     1368    updateIsolatedTree(object, AXSelectedTextChanged);
     1369#endif
     1370
    13671371    postTextStateChangeNotification(object, intent, selection);
    13681372#else
     
    31403144    case AXCheckedStateChanged:
    31413145    case AXChildrenChanged:
     3146    case AXSelectedTextChanged:
    31423147    case AXValueChanged: {
    31433148        tree->removeSubtree(object->objectID());
     
    32403245}
    32413246
    3242 AccessibilityObject* AXObjectCache::rootWebArea()
     3247AXCoreObject* AXObjectCache::rootWebArea()
    32433248{
    32443249    AXCoreObject* rootObject = this->rootObject();
    32453250    if (!rootObject || !rootObject->isAccessibilityScrollView())
    32463251        return nullptr;
    3247     return downcast<AccessibilityScrollView>(*rootObject).webAreaObject();
     3252    return rootObject->webAreaObject();
    32483253}
    32493254
  • trunk/Source/WebCore/accessibility/AXObjectCache.h

    r256442 r257739  
    369369
    370370#if PLATFORM(COCOA)
    371     void postTextStateChangePlatformNotification(AccessibilityObject*, const AXTextStateChangeIntent&, const VisibleSelection&);
     371    void postTextStateChangePlatformNotification(AXCoreObject*, const AXTextStateChangeIntent&, const VisibleSelection&);
    372372    void postTextStateChangePlatformNotification(AccessibilityObject*, AXTextEditType, const String&, const VisiblePosition&);
    373     void postTextReplacementPlatformNotificationForTextControl(AccessibilityObject*, const String& deletedText, const String& insertedText, HTMLTextFormControlElement&);
    374     void postTextReplacementPlatformNotification(AccessibilityObject*, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&);
     373    void postTextReplacementPlatformNotificationForTextControl(AXCoreObject*, const String& deletedText, const String& insertedText, HTMLTextFormControlElement&);
     374    void postTextReplacementPlatformNotification(AXCoreObject*, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&);
    375375#else
    376376    static AXTextChange textChangeForEditType(AXTextEditType);
     
    413413
    414414private:
    415     AccessibilityObject* rootWebArea();
     415    AXCoreObject* rootWebArea();
    416416
    417417    static AccessibilityObject* focusedImageMapUIElement(HTMLAreaElement*);
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r257589 r257739  
    757757
    758758    const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const override;
     759    AccessibilityObject* webAreaObject() const override { return nullptr; }
    759760
    760761    void clearIsIgnoredFromParentData() override { m_isIgnoredFromParentData = AccessibilityIsIgnoredFromParentData(); }
  • trunk/Source/WebCore/accessibility/AccessibilityObjectInterface.h

    r257589 r257739  
    11611161
    11621162    virtual const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const = 0;
     1163    virtual AXCoreObject* webAreaObject() const = 0;
    11631164
    11641165    virtual void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&) = 0;
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp

    r257592 r257739  
    14931493bool AccessibilityRenderObject::isLoaded() const
    14941494{
    1495     return !m_renderer->document().parser();
     1495    return m_renderer ? !m_renderer->document().parser() : false;
    14961496}
    14971497
     
    15731573String AccessibilityRenderObject::accessKey() const
    15741574{
     1575    if (!m_renderer)
     1576        return String();
     1577
    15751578    Node* node = m_renderer->node();
    15761579    if (!is<Element>(node))
    1577         return nullAtom();
     1580        return String();
     1581
    15781582    return downcast<Element>(*node).attributeWithoutSynchronization(accesskeyAttr);
    15791583}
  • trunk/Source/WebCore/accessibility/AccessibilityScrollView.h

    r255167 r257739  
    4242    virtual ~AccessibilityScrollView();
    4343
    44     AccessibilityObject* webAreaObject() const;
     44    AccessibilityObject* webAreaObject() const override;
    4545
    4646private:
     
    7272    AccessibilityObject* parentObject() const override;
    7373    AccessibilityObject* parentObjectIfExists() const override;
    74    
     74
    7575    AccessibilityObject* firstChild() const override { return webAreaObject(); }
    7676    AccessibilityScrollbar* addChildScrollbar(Scrollbar*);
  • trunk/Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm

    r255167 r257739  
    9393}
    9494
    95 void AXObjectCache::postTextStateChangePlatformNotification(AccessibilityObject* object, const AXTextStateChangeIntent&, const VisibleSelection&)
     95void AXObjectCache::postTextStateChangePlatformNotification(AXCoreObject* object, const AXTextStateChangeIntent&, const VisibleSelection&)
    9696{
    9797    postPlatformNotification(object, AXSelectedTextChanged);
     
    103103}
    104104
    105 void AXObjectCache::postTextReplacementPlatformNotification(AccessibilityObject* object, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&)
     105void AXObjectCache::postTextReplacementPlatformNotification(AXCoreObject* object, AXTextEditType, const String&, AXTextEditType, const String&, const VisiblePosition&)
    106106{
    107107    postPlatformNotification(object, AXValueChanged);
    108108}
    109109
    110 void AXObjectCache::postTextReplacementPlatformNotificationForTextControl(AccessibilityObject* object, const String&, const String&, HTMLTextFormControlElement&)
     110void AXObjectCache::postTextReplacementPlatformNotificationForTextControl(AXCoreObject* object, const String&, const String&, HTMLTextFormControlElement&)
    111111{
    112112    postPlatformNotification(object, AXValueChanged);
  • trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp

    r257589 r257739  
    6060    setProperty(AXPropertyName::Description, object.descriptionAttributeValue().isolatedCopy());
    6161    setProperty(AXPropertyName::ElementRect, object.elementRect());
     62    setProperty(AXPropertyName::HasARIAValueNow, object.hasARIAValueNow());
     63    setProperty(AXPropertyName::HasApplePDFAnnotationAttribute, object.hasApplePDFAnnotationAttribute());
    6264    setProperty(AXPropertyName::HelpText, object.helpTextAttributeValue().isolatedCopy());
    6365    setProperty(AXPropertyName::IsAccessibilityIgnored, object.accessibilityIsIgnored());
     
    207209    setProperty(AXPropertyName::Language, object.language());
    208210    setProperty(AXPropertyName::CanHaveSelectedChildren, object.canHaveSelectedChildren());
    209     setProperty(AXPropertyName::HasARIAValueNow, object.hasARIAValueNow());
    210211    setProperty(AXPropertyName::TagName, object.tagName().isolatedCopy());
    211212    setProperty(AXPropertyName::SupportsLiveRegion, object.supportsLiveRegion());
     
    379380   
    380381    if (isRoot) {
     382        setObjectProperty(AXPropertyName::WebArea, object.webAreaObject());
    381383        setProperty(AXPropertyName::PreventKeyboardDOMEventDispatch, object.preventKeyboardDOMEventDispatch());
    382384        setProperty(AXPropertyName::SessionID, object.sessionID());
     
    865867}
    866868
     869String AXIsolatedObject::stringForRange(RefPtr<Range> range) const
     870{
     871    return Accessibility::retrieveValueFromMainThread<String>([&range, this] () -> String {
     872        if (auto* object = associatedAXObject())
     873            return object->stringForRange(range);
     874        return String();
     875    });
     876}
     877
    867878Vector<RefPtr<Range>> AXIsolatedObject::findTextRanges(AccessibilitySearchTextCriteria const& criteria) const
    868879{
     
    18711882}
    18721883
    1873 bool AXIsolatedObject::hasApplePDFAnnotationAttribute() const
    1874 {
    1875     ASSERT_NOT_REACHED();
    1876     return false;
    1877 }
    1878 
    18791884const AccessibilityScrollView* AXIsolatedObject::ancestorAccessibilityScrollView(bool) const
    18801885{
  • trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h

    r257589 r257739  
    145145        FocusableAncestor,
    146146        HasARIAValueNow,
     147        HasApplePDFAnnotationAttribute,
    147148        HasChildren,
    148149        HasPopup,
     
    329330        VisibleChildren,
    330331        VisibleRows,
     332        WebArea,
    331333    };
    332334   
     
    644646    VisiblePositionRange lineRangeForPosition(const VisiblePosition&) const override { return VisiblePositionRange(); }
    645647    RefPtr<Range> rangeForPlainTextRange(const PlainTextRange&) const override { return nullptr; }
    646     String stringForRange(RefPtr<Range>) const override { return String(); }
     648    String stringForRange(RefPtr<Range>) const override;
    647649    IntRect boundsForVisiblePositionRange(const VisiblePositionRange&) const override { return IntRect(); }
    648650    IntRect boundsForRange(const RefPtr<Range>) const override { return IntRect(); }
     
    876878    bool accessibilityIgnoreAttachment() const override;
    877879    AccessibilityObjectInclusion accessibilityPlatformIncludesObject() const override;
    878     bool hasApplePDFAnnotationAttribute() const override;
     880    bool hasApplePDFAnnotationAttribute() const override { return boolAttributeValue(AXPropertyName::HasApplePDFAnnotationAttribute); }
    879881    const AccessibilityScrollView* ancestorAccessibilityScrollView(bool includeSelf) const override;
     882    AXCoreObject* webAreaObject() const override { return objectAttributeValue(AXPropertyName::WebArea); }
    880883    void setIsIgnoredFromParentData(AccessibilityIsIgnoredFromParentData&) override;
    881884    void clearIsIgnoredFromParentData() override;
  • trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp

    r257200 r257739  
    175175{
    176176    LockHolder locker { m_changeLogLock };
    177     ASSERT(m_readerThreadNodeMap.contains(axID));
    178177    m_pendingRemovals.append(axID);
    179178}
     
    216215
    217216    for (const auto& item : m_pendingAppends) {
    218         ASSERT(!m_readerThreadNodeMap.contains(item.m_isolatedObject->objectID())
    219             || item.m_isolatedObject->objectID() == m_rootNodeID);
    220 
    221         if (item.m_wrapper)
    222             item.m_isolatedObject->attachPlatformWrapper(item.m_wrapper);
    223 
    224         m_readerThreadNodeMap.add(item.m_isolatedObject->objectID(), item.m_isolatedObject.get());
     217        AXID axID = item.m_isolatedObject->objectID();
     218
     219        if (m_readerThreadNodeMap.get(axID) != &item.m_isolatedObject.get()) {
     220            // The new IsolatedObject is a replacement for an existing object
     221            // as the result of an update. Thus detach the existing one before
     222            // adding the new one.
     223            if (auto object = nodeForID(axID))
     224                object->detach(AccessibilityDetachmentType::ElementDestroyed);
     225            m_readerThreadNodeMap.remove(axID);
     226        }
     227
     228        if (m_readerThreadNodeMap.add(axID, item.m_isolatedObject.get()) && item.m_wrapper)
     229            m_readerThreadNodeMap.get(axID)->attachPlatformWrapper(item.m_wrapper);
     230
    225231        // The reference count of the just added IsolatedObject must be 2
    226232        // because it is referenced by m_readerThreadNodeMap and m_pendingAppends.
    227233        // When m_pendingAppends is cleared, the object will be held only by m_readerThreadNodeMap.
    228         ASSERT(m_readerThreadNodeMap.get(item.m_isolatedObject->objectID())->refCount() == 2);
     234        ASSERT(m_readerThreadNodeMap.get(axID)->refCount() == 2);
    229235    }
    230236    m_pendingAppends.clear();
  • trunk/Source/WebCore/accessibility/mac/AXObjectCacheMac.mm

    r257200 r257739  
    365365}
    366366
    367 void AXObjectCache::postTextStateChangePlatformNotification(AccessibilityObject* object, const AXTextStateChangeIntent& intent, const VisibleSelection& selection)
     367void AXObjectCache::postTextStateChangePlatformNotification(AXCoreObject* object, const AXTextStateChangeIntent& intent, const VisibleSelection& selection)
    368368{
    369369    if (!object)
     
    420420}
    421421
    422 static void addTextMarkerFor(NSMutableDictionary* change, AccessibilityObject& object, const VisiblePosition& position)
     422static void addTextMarkerFor(NSMutableDictionary* change, AXCoreObject& object, const VisiblePosition& position)
    423423{
    424424    if (position.isNull())
     
    428428}
    429429
    430 static void addTextMarkerFor(NSMutableDictionary* change, AccessibilityObject& object, HTMLTextFormControlElement& textControl)
     430static void addTextMarkerFor(NSMutableDictionary* change, AXCoreObject& object, HTMLTextFormControlElement& textControl)
    431431{
    432432    if (id textMarker = [object.wrapper() textMarkerForFirstPositionInTextControl:textControl])
     
    435435
    436436template <typename TextMarkerTargetType>
    437 static NSDictionary *textReplacementChangeDictionary(AccessibilityObject& object, AXTextEditType type, const String& string, TextMarkerTargetType& markerTarget)
     437static NSDictionary *textReplacementChangeDictionary(AXCoreObject& object, AXTextEditType type, const String& string, TextMarkerTargetType& markerTarget)
    438438{
    439439    NSString *text = (NSString *)string;
     
    460460}
    461461
    462 static void postUserInfoForChanges(AccessibilityObject& rootWebArea, AccessibilityObject& object, NSMutableArray* changes)
     462static void postUserInfoForChanges(AXCoreObject& rootWebArea, AXCoreObject& object, NSMutableArray* changes)
    463463{
    464464    NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] initWithCapacity:4];
     
    477477}
    478478
    479 void AXObjectCache::postTextReplacementPlatformNotification(AccessibilityObject* object, AXTextEditType deletionType, const String& deletedText, AXTextEditType insertionType, const String& insertedText, const VisiblePosition& position)
     479void AXObjectCache::postTextReplacementPlatformNotification(AXCoreObject* object, AXTextEditType deletionType, const String& deletedText, AXTextEditType insertionType, const String& insertedText, const VisiblePosition& position)
    480480{
    481481    if (!object)
     
    494494}
    495495
    496 void AXObjectCache::postTextReplacementPlatformNotificationForTextControl(AccessibilityObject* object, const String& deletedText, const String& insertedText, HTMLTextFormControlElement& textControl)
     496void AXObjectCache::postTextReplacementPlatformNotificationForTextControl(AXCoreObject* object, const String& deletedText, const String& insertedText, HTMLTextFormControlElement& textControl)
    497497{
    498498    if (!object)
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm

    r257589 r257739  
    13351335- (id)textMarkerRangeFromVisiblePositions:(const VisiblePosition&)startPosition endPosition:(const VisiblePosition&)endPosition
    13361336{
    1337     return textMarkerRangeFromVisiblePositions(self.axBackingObject->axObjectCache(), startPosition, endPosition);
     1337    auto* backingObject = self.updateObjectBackingStore;
     1338    if (!backingObject)
     1339        return nil;
     1340
     1341    return textMarkerRangeFromVisiblePositions(backingObject->axObjectCache(), startPosition, endPosition);
    13381342}
    13391343
     
    19561960{
    19571961    return Accessibility::retrieveAutoreleasedValueFromMainThread<id>([protectedSelf = RetainPtr<WebAccessibilityObjectWrapper>(self)] () -> RetainPtr<id> {
    1958         if (!protectedSelf.get().axBackingObject || !protectedSelf.get().axBackingObject->hasApplePDFAnnotationAttribute())
     1962        auto* backingObject = protectedSelf.get().axBackingObject;
     1963        if (!backingObject || !backingObject->hasApplePDFAnnotationAttribute())
    19591964            return nil;
    1960    
    1961         if (!protectedSelf.get().axBackingObject->document()->isPluginDocument())
     1965
     1966        if (!backingObject->document()->isPluginDocument())
    19621967            return nil;
    1963        
    1964         Widget* pluginWidget = static_cast<PluginDocument*>(protectedSelf.get().axBackingObject->document())->pluginWidget();
     1968
     1969        Widget* pluginWidget = static_cast<PluginDocument*>(backingObject->document())->pluginWidget();
    19651970        if (!pluginWidget || !pluginWidget->isPluginViewBase())
    19661971            return nil;
    1967        
    1968         return static_cast<PluginViewBase*>(pluginWidget)->accessibilityAssociatedPluginParentForElement(protectedSelf.get().axBackingObject->element());
     1972
     1973        return static_cast<PluginViewBase*>(pluginWidget)->accessibilityAssociatedPluginParentForElement(backingObject->element());
    19691974    });
    19701975}
     
    30723077        return [self baseAccessibilitySpeechHint];
    30733078
    3074     // Used by DRT to find an accessible node by its element id.
     3079    // Used by TestRunner and DRT AccessibilityController to find an accessible node by its element id.
    30753080    if ([attributeName isEqualToString:@"AXDRTElementIdAttribute"])
    30763081        return backingObject->identifierAttribute();
     
    39883993
    39893994    if ([attribute isEqualToString:@"AXStringForTextMarkerRange"]) {
    3990         RefPtr<Range> range = [self rangeForTextMarkerRange:textMarkerRange];
    3991         return backingObject->stringForRange(range);
     3995        return Accessibility::retrieveValueFromMainThread<String>([&textMarkerRange, protectedSelf = RetainPtr<WebAccessibilityObjectWrapper>(self)] () -> String {
     3996            RefPtr<Range> range = [protectedSelf rangeForTextMarkerRange:textMarkerRange];
     3997            auto* backingObject = protectedSelf.get().axBackingObject;
     3998            return backingObject ? backingObject->stringForRange(range) : String();
     3999        });
    39924000    }
    39934001
  • trunk/Source/WebKit/WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp

    r252417 r257739  
    5656static AccessibilityObjectWrapper* rootWebAreaWrapper(AXCoreObject& rootObject)
    5757{
    58     if (!rootObject.isAccessibilityScrollView())
     58    if (!rootObject.isScrollView())
    5959        return nullptr;
    6060
    61     if (auto* webAreaObject = downcast<AccessibilityScrollView>(rootObject).webAreaObject())
     61    if (auto* webAreaObject = rootObject.webAreaObject())
    6262        return webAreaObject->wrapper();
    6363
  • trunk/Tools/ChangeLog

    r257726 r257739  
     12020-03-02  Andres Gonzalez  <andresg_22@apple.com>
     2
     3        Fix for LayoutTests/accessibility/mac/search-text/search-text.html in IsolatedTree mode.
     4        https://bugs.webkit.org/show_bug.cgi?id=208434
     5
     6        Reviewed by Chris Fleizach.
     7
     8        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
     9        (WTR::AccessibilityController::AccessibilityController): Initializes m_useAXThread.
     10        (WTR::AccessibilityController::rootElement): No need to set m_useAXThread here since it is initialize in the constructor.
     11        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
     12        (WTR::AccessibilityController::accessibleElementById): Same as above.
     13
    1142020-03-02  John Wilander  <wilander@apple.com>
    215
  • trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.cpp

    r257688 r257739  
    4747AccessibilityController::AccessibilityController()
    4848{
     49#if PLATFORM(COCOA)
     50    m_useAXThread = WKAccessibilityCanUseSecondaryAXThread(InjectedBundle::singleton().page()->page());
     51#endif
    4952}
    5053
     
    7881    WKBundlePageRef page = InjectedBundle::singleton().page()->page();
    7982    PlatformUIElement root = static_cast<PlatformUIElement>(WKAccessibilityRootObject(page));
    80 
    81     // Now that we have a root and the isolated tree is generated, set
    82     // m_useAXThread to true for next request to be handled in the secondary thread.
    83     if (WKAccessibilityCanUseSecondaryAXThread(InjectedBundle::singleton().page()->page()))
    84         m_useAXThread = true;
    8583
    8684    return AccessibilityUIElement::create(root);
  • trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h

    r253565 r257739  
    9797    // WebCore/accessibility via JavaScript without going through HIServices.
    9898    // Thus to simulate the behavior of HIServices, AccessibilityController is spawning a secondary thread to service the JavaScript requests.
    99     // The following flag allows to run the very first request in the main
    100     // thread and all subsequent requests in the secondary thread. this is what
    101     // the behavior would be if using HIServices.
    102     // The first request has to be served in the main thread in order to build
    103     // the AXIsolatedTree.
    10499    bool m_useAXThread { false };
    105100    BinarySemaphore m_semaphore;
  • trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm

    r257688 r257739  
    104104    });
    105105
    106     // Now that we have a root and the isolated tree is generated, set
    107     // m_useAXThread to true for next request to be handled in the secondary thread.
    108     if (WKAccessibilityCanUseSecondaryAXThread(InjectedBundle::singleton().page()->page()))
    109         m_useAXThread = true;
    110 
    111106    id result;
    112107    executeOnAXThreadIfPossible([&root, &idAttribute, &result] {
Note: See TracChangeset for help on using the changeset viewer.