Changeset 252417 in webkit
- Timestamp:
- Nov 13, 2019, 11:00:20 AM (7 years ago)
- Location:
- trunk/Source
- Files:
-
- 9 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/accessibility/AXObjectCache.cpp (modified) (7 diffs)
-
WebCore/accessibility/AXObjectCache.h (modified) (2 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp (modified) (2 diffs)
-
WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h (modified) (1 diff)
-
WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm (modified) (4 diffs)
-
WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm (modified) (2 diffs)
-
WebKitLegacy/win/AccessibleDocument.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r252415 r252417 1 2019-11-13 Andres Gonzalez <andresg_22@apple.com> 2 3 AXObjectCache::rootObject should generate the isolated tree. 4 https://bugs.webkit.org/show_bug.cgi?id=204131 5 6 Reviewed by Chris Fleizach. 7 8 No new tests, no change in functionality. 9 10 AXObjectCache::rootObject now returns an AccessibilityObject or an 11 IsolatedObject. This makes it possible for client code to use the 12 isolated tree seamlessly, as long as the client call happens on a 13 secondary thread. This allows WKTR AccessibilityController to use the 14 isolated tree in LayoutTests. 15 16 * accessibility/AXObjectCache.cpp: 17 (WebCore::AXObjectCache::clientSupportsIsolatedTree): 18 (WebCore::AXObjectCache::rootObject): 19 (WebCore::AXObjectCache::createIsolatedTreeHierarchy): 20 (WebCore::AXObjectCache::generateIsolatedTree): 21 (WebCore::AXObjectCache::rootWebArea): 22 (WebCore::AXObjectCache::createIsolatedAccessibilityTreeHierarchy): Renamed. 23 (WebCore::AXObjectCache::generateIsolatedAccessibilityTree): renamed. 24 * accessibility/AXObjectCache.h: 25 1 26 2019-11-13 Zalan Bujtas <zalan@apple.com> 2 27 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r252182 r252417 102 102 #include "TextControlInnerElements.h" 103 103 #include "TextIterator.h" 104 105 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) && PLATFORM(MAC) 106 #include <pal/spi/mac/HIServicesSPI.h> 107 #endif 108 104 109 #include <wtf/DataLog.h> 105 110 #include <wtf/SetForScope.h> … … 124 129 static const Seconds accessibilityLiveRegionChangedNotificationInterval { 20_ms }; 125 130 static const Seconds accessibilityFocusModalNodeNotificationInterval { 50_ms }; 126 131 127 132 static bool rendererNeedsDeferredUpdate(const RenderObject& renderer) 128 133 { … … 649 654 return newObj.get(); 650 655 } 651 652 AccessibilityObject* AXObjectCache::rootObject() 656 657 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) 658 bool AXObjectCache::clientSupportsIsolatedTree() 659 { 660 AXClientType type = _AXGetClientForCurrentRequestUntrusted(); 661 // FIXME: Remove unknown client before enabling ACCESSIBILITY_ISOLATED_TREE. 662 return type == kAXClientTypeVoiceOver 663 || type == kAXClientTypeUnknown 664 || type == kAXClientTypeNoActiveRequestFound; // For LayoutTests. 665 } 666 #endif 667 668 AXCoreObject* AXObjectCache::rootObject() 653 669 { 654 670 if (!gAccessibilityEnabled) 655 671 return nullptr; 656 672 673 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) 674 if (clientSupportsIsolatedTree()) 675 return isolatedTreeRootObject(); 676 #endif 677 657 678 return getOrCreate(m_document.view()); 658 679 } 680 681 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) 682 AXCoreObject* AXObjectCache::isolatedTreeRootObject() 683 { 684 auto pageID = m_document.pageID(); 685 if (!pageID) 686 return nullptr; 687 688 auto tree = AXIsolatedTree::treeForPageID(*pageID); 689 if (!tree && isMainThread()) { 690 tree = generateIsolatedTree(*pageID); 691 // Now that we have created our tree, initialize the secondary thread, 692 // so future requests come in on the other thread. 693 _AXUIElementUseSecondaryAXThread(true); 694 return tree->rootNode().get(); 695 } 696 697 if (tree && !isMainThread()) { 698 tree->applyPendingChanges(); 699 return tree->rootNode().get(); 700 } 701 702 // Should not get here, couldn't create or update the IsolatedTree. 703 ASSERT(false); 704 return nullptr; 705 } 706 #endif 659 707 660 708 AccessibilityObject* AXObjectCache::rootObjectForFrame(Frame* frame) … … 2944 2992 2945 2993 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) 2946 Ref<AXIsolatedObject> AXObjectCache::createIsolated AccessibilityTreeHierarchy(AXCoreObject& object, AXID parentID, AXIsolatedTree& tree, Vector<Ref<AXIsolatedObject>>& nodeChanges)2994 Ref<AXIsolatedObject> AXObjectCache::createIsolatedTreeHierarchy(AXCoreObject& object, AXID parentID, AXIsolatedTree& tree, Vector<Ref<AXIsolatedObject>>& nodeChanges) 2947 2995 { 2948 2996 auto isolatedTreeNode = AXIsolatedObject::create(object); … … 2954 3002 2955 3003 for (const auto& child : object.children()) { 2956 auto staticChild = createIsolated AccessibilityTreeHierarchy(*child, isolatedTreeNode->objectID(), tree, nodeChanges);3004 auto staticChild = createIsolatedTreeHierarchy(*child, isolatedTreeNode->objectID(), tree, nodeChanges); 2957 3005 isolatedTreeNode->appendChild(staticChild->objectID()); 2958 3006 } … … 2961 3009 } 2962 3010 2963 Ref<AXIsolatedTree> AXObjectCache::generateIsolated AccessibilityTree()3011 Ref<AXIsolatedTree> AXObjectCache::generateIsolatedTree(PageIdentifier pageID) 2964 3012 { 2965 3013 RELEASE_ASSERT(isMainThread()); 2966 3014 2967 auto tree = AXIsolatedTree::treeForPageID( *m_document.pageID());3015 auto tree = AXIsolatedTree::treeForPageID(pageID); 2968 3016 if (!tree) 2969 tree = AXIsolatedTree::createTreeForPageID( *m_document.pageID());3017 tree = AXIsolatedTree::createTreeForPageID(pageID); 2970 3018 2971 3019 Vector<Ref<AXIsolatedObject>> nodeChanges; 2972 auto root = createIsolatedAccessibilityTreeHierarchy(*rootObject(), InvalidAXID, *tree, nodeChanges); 2973 tree->setRoot(root); 3020 AccessibilityObject* axRoot = getOrCreate(m_document.view()); 3021 auto isolatedRoot = createIsolatedTreeHierarchy(*axRoot, InvalidAXID, *tree, nodeChanges); 3022 tree->setRoot(isolatedRoot); 2974 3023 tree->appendNodeChanges(nodeChanges); 2975 3024 … … 3065 3114 AccessibilityObject* AXObjectCache::rootWebArea() 3066 3115 { 3067 A ccessibilityObject* rootObject = this->rootObject();3116 AXCoreObject* rootObject = this->rootObject(); 3068 3117 if (!rootObject || !rootObject->isAccessibilityScrollView()) 3069 3118 return nullptr; -
trunk/Source/WebCore/accessibility/AXObjectCache.h
r252399 r252417 152 152 153 153 // Returns the root object for the entire document. 154 WEBCORE_EXPORT A ccessibilityObject* rootObject();154 WEBCORE_EXPORT AXCoreObject* rootObject(); 155 155 // Returns the root object for a specific frame. 156 156 WEBCORE_EXPORT AccessibilityObject* rootObjectForFrame(Frame*); … … 193 193 194 194 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) 195 WEBCORE_EXPORT Ref<AXIsolatedTree> generateIsolatedAccessibilityTree(); 196 197 Ref<AXIsolatedObject> createIsolatedAccessibilityTreeHierarchy(AXCoreObject&, AXID, AXIsolatedTree&, Vector<Ref<AXIsolatedObject>>&); 198 #endif 199 195 WEBCORE_EXPORT static bool clientSupportsIsolatedTree(); 196 private: 197 AXCoreObject* isolatedTreeRootObject(); 198 Ref<AXIsolatedTree> generateIsolatedTree(PageIdentifier); 199 Ref<AXIsolatedObject> createIsolatedTreeHierarchy(AXCoreObject&, AXID, AXIsolatedTree&, Vector<Ref<AXIsolatedObject>>&); 200 #endif 201 202 public: 200 203 #if ENABLE(ACCESSIBILITY) 201 204 WEBCORE_EXPORT static void enableAccessibility(); -
trunk/Source/WebKit/ChangeLog
r252412 r252417 1 2019-11-13 Andres Gonzalez <andresg_22@apple.com> 2 3 AXObjectCache::rootObject should generate the isolated tree. 4 https://bugs.webkit.org/show_bug.cgi?id=204131 5 6 Reviewed by Chris Fleizach. 7 8 * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h: 9 * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: 10 (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]): 11 (-[WKAccessibilityWebPageObjectBase clientSupportsIsolatedTree]): Became a member of AXObjectCache. 12 (-[WKAccessibilityWebPageObjectBase isolatedTreeRootObject]): Deleted. 13 * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: 14 (-[WKAccessibilityWebPageObject accessibilityHitTest:]): 15 1 16 2019-11-13 Youenn Fablet <youenn@apple.com> 2 17 -
trunk/Source/WebKit/WebProcess/WebPage/atk/WebKitWebPageAccessibilityObject.cpp
r247367 r252417 54 54 } 55 55 56 static AccessibilityObjectWrapper* rootWebAreaWrapper(A ccessibilityObject& rootObject)56 static AccessibilityObjectWrapper* rootWebAreaWrapper(AXCoreObject& rootObject) 57 57 { 58 58 if (!rootObject.isAccessibilityScrollView()) … … 86 86 return nullptr; 87 87 88 A ccessibilityObject* coreRootObject = cache->rootObject();88 AXCoreObject* coreRootObject = cache->rootObject(); 89 89 if (!coreRootObject) 90 90 return nullptr; -
trunk/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h
r245796 r252417 47 47 - (id)accessibilityFocusedUIElement; 48 48 49 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)50 - (BOOL)clientSupportsIsolatedTree;51 #endif52 53 49 @end 54 50 -
trunk/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm
r251179 r252417 27 27 #import "WKAccessibilityWebPageObjectBase.h" 28 28 29 #import "ApplicationServicesSPI.h"30 29 #import "WebFrame.h" 31 30 #import "WebPage.h" … … 36 35 #import "WKString.h" 37 36 #import "WKStringCF.h" 38 #import <WebCore/AXIsolatedTree.h>39 37 #import <WebCore/AXObjectCache.h> 40 38 #import <WebCore/Document.h> … … 86 84 } 87 85 88 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)89 - (BOOL)clientSupportsIsolatedTree90 {91 AXClientType type = _AXGetClientForCurrentRequestUntrusted();92 // FIXME: Remove unknown client before enabling ACCESSIBILITY_ISOLATED_TREE.93 return type == kAXClientTypeVoiceOver || type == kAXClientTypeUnknown;94 }95 96 - (id)isolatedTreeRootObject97 {98 if (isMainThread()) {99 if (auto cache = [self axObjectCache]) {100 auto tree = cache->generateIsolatedAccessibilityTree();101 102 // Now that we have created our tree, initialize the secondary thread,103 // so future requests come in on the other thread.104 _AXUIElementUseSecondaryAXThread(true);105 if (auto rootNode = tree->rootNode())106 return rootNode->wrapper();107 }108 } else {109 auto tree = WebCore::AXIsolatedTree::treeForPageID(m_pageID);110 tree->applyPendingChanges();111 if (auto rootNode = tree->rootNode())112 return rootNode->wrapper();113 }114 115 return nil;116 }117 #endif118 119 86 - (id)accessibilityRootObjectWrapper 120 87 { … … 125 92 return self.accessibilityPluginObject; 126 93 127 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE)128 // If VoiceOver is on, ensure subsequent requests are now handled on the secondary AX thread.129 bool clientSupportsIsolatedTree = [self clientSupportsIsolatedTree];130 if (clientSupportsIsolatedTree)131 return [self isolatedTreeRootObject];132 #endif133 134 94 if (auto cache = [self axObjectCache]) { 135 if (WebCore::A ccessibilityObject* root = cache->rootObject())95 if (WebCore::AXCoreObject* root = cache->rootObject()) 136 96 return root->wrapper(); 137 97 } -
trunk/Source/WebKit/WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm
r252175 r252417 29 29 #if PLATFORM(MAC) 30 30 31 #import "ApplicationServicesSPI.h" 31 32 #import "PluginView.h" 32 33 #import "WebFrame.h" … … 254 255 // Isolated tree frames have the offset encoded into them so we don't need to undo here. 255 256 #if ENABLE(ACCESSIBILITY_ISOLATED_TREE) 256 bool queryingIsolatedTree = [self clientSupportsIsolatedTree]&& _AXUIElementRequestServicedBySecondaryAXThread();257 bool queryingIsolatedTree = WebCore::AXObjectCache::clientSupportsIsolatedTree() && _AXUIElementRequestServicedBySecondaryAXThread(); 257 258 applyContentOffset = !queryingIsolatedTree; 258 259 #endif -
trunk/Source/WebKitLegacy/win/AccessibleDocument.cpp
r176892 r252417 35 35 // AccessibleDocument 36 36 AccessibleDocument::AccessibleDocument(Document* doc, HWND window) 37 : AccessibleBase( doc->axObjectCache()->rootObject(), window)37 : AccessibleBase(static_cast<AccessibilityObject*>(doc->axObjectCache()->rootObject()), window) 38 38 { 39 39 }
Note:
See TracChangeset
for help on using the changeset viewer.