Changeset 285859 in webkit
- Timestamp:
- Nov 16, 2021, 6:38:18 AM (5 years ago)
- Location:
- trunk/Tools
- Files:
-
- 9 edited
-
ChangeLog (modified) (1 diff)
-
WebKitTestRunner/InjectedBundle/AccessibilityController.cpp (modified) (1 diff)
-
WebKitTestRunner/InjectedBundle/AccessibilityController.h (modified) (1 diff)
-
WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (modified) (1 diff)
-
WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp (modified) (1 diff)
-
WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (modified) (2 diffs)
-
WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm (modified) (1 diff)
-
WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm (modified) (5 diffs)
-
WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r285819 r285859 1 2021-11-16 Tyler Wilcock <tyler_w@apple.com> 2 3 AX: Stop returning AccessibilityUIElements backed by a null pointer 4 https://bugs.webkit.org/show_bug.cgi?id=233138 5 6 Reviewed by Andres Gonzalez. 7 8 Prior to this patch, some callers of AccessibilityUIElement::create 9 passed null `id`s, resulting in a seemingly valid AccessibilityUIElement 10 that is actually backed by a null pointer. This makes writing tests harder, 11 since you can't rely on common operations like `!myElement` to do the right thing. 12 13 With this patch, we add a RELEASE_ASSERT to 14 AccessibilityUIElement::create requiring the passed pointer to be 15 valid. This patch also fixes up some callsites where we could (and did) pass null pointers. 16 17 * WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp: 18 (WTR::AccessibilityController::focusedElement): 19 * WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp: 20 (WTR::AccessibilityController::focusedElement): 21 * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp: 22 (WTR::AccessibilityController::focusedElement): 23 Return RefPtr instead of Ref, since it's possible that no element is 24 focused. 25 26 * WebKitTestRunner/InjectedBundle/AccessibilityController.h: 27 * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: 28 (WTR::AccessibilityUIElement::create): 29 Add RELEASE_ASSERT() to verify passed pointer is valid. 30 31 * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: 32 (WTR::AccessibilityUIElement::focusedElement const): 33 (WTR::AccessibilityUIElement::uiElementForSearchPredicate): 34 * WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm: 35 (-[AccessibilityNotificationHandler _notificationReceived:]): 36 * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: 37 (WTR::AccessibilityUIElement::uiElementAttributeValue const): 38 (WTR::AccessibilityUIElement::uiElementForSearchPredicate): 39 (WTR::AccessibilityUIElement::cellForColumnAndRow): 40 (WTR::AccessibilityUIElement::horizontalScrollbar const): 41 (WTR::AccessibilityUIElement::verticalScrollbar const): 42 Don't call AccessibilityUIElement::create with null pointers. 43 1 44 2021-11-15 Michael Catanzaro <mcatanzaro@gnome.org> 2 45 -
trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.cpp
r285671 r285859 91 91 } 92 92 93 Ref <AccessibilityUIElement> AccessibilityController::focusedElement()93 RefPtr<AccessibilityUIElement> AccessibilityController::focusedElement() 94 94 { 95 95 auto page = InjectedBundle::singleton().page()->page(); 96 96 auto root = static_cast<PlatformUIElement>(WKAccessibilityRootObject(page)); 97 97 auto rootElement = AccessibilityUIElement::create(root); 98 if (auto focusedElement = rootElement->focusedElement()) 99 return *focusedElement; 100 return AccessibilityUIElement::create(nullptr); 98 return rootElement->focusedElement(); 101 99 } 102 100 -
trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h
r285671 r285859 64 64 #if HAVE(ACCESSIBILITY) 65 65 Ref<AccessibilityUIElement> rootElement(); 66 Ref <AccessibilityUIElement> focusedElement();66 RefPtr<AccessibilityUIElement> focusedElement(); 67 67 #endif 68 68 RefPtr<AccessibilityUIElement> elementAtPoint(int x, int y); -
trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp
r285589 r285859 36 36 Ref<AccessibilityUIElement> AccessibilityUIElement::create(PlatformUIElement uiElement) 37 37 { 38 RELEASE_ASSERT(uiElement); 38 39 return adoptRef(*new AccessibilityUIElement(uiElement)); 39 40 } -
trunk/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp
r282643 r285859 113 113 } 114 114 115 Ref <AccessibilityUIElement> AccessibilityController::focusedElement()115 RefPtr<AccessibilityUIElement> AccessibilityController::focusedElement() 116 116 { 117 117 WKBundlePageRef page = InjectedBundle::singleton().page()->page(); -
trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm
r285589 r285859 636 636 RefPtr<AccessibilityUIElement> AccessibilityUIElement::focusedElement() const 637 637 { 638 return AccessibilityUIElement::create([m_element accessibilityFocusedUIElement]); 638 if (id focusedUIElement = [m_element accessibilityFocusedUIElement]) 639 return AccessibilityUIElement::create(focusedUIElement); 640 return nullptr; 639 641 } 640 642 … … 766 768 { 767 769 NSDictionary *parameterizedAttribute = searchPredicateParameterizedAttributeForSearchCriteria(context, startElement, isDirectionNext, 5, searchKey, searchText, visibleOnly, immediateDescendantsOnly); 768 id value= [m_element accessibilityFindMatchingObjects:parameterizedAttribute];769 if (![ valueisKindOfClass:[NSArray class]])770 id results = [m_element accessibilityFindMatchingObjects:parameterizedAttribute]; 771 if (![results isKindOfClass:[NSArray class]]) 770 772 return nullptr; 771 for (id element in value) { 773 774 for (id element in results) { 772 775 if ([element isAccessibilityElement]) 773 776 return AccessibilityUIElement::create(element); 774 777 } 775 return AccessibilityUIElement::create([value firstObject]); 778 779 if (id firstResult = [results firstObject]) 780 return AccessibilityUIElement::create(firstResult); 781 return nullptr; 776 782 } 777 783 -
trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm
r261081 r285859 128 128 // A global listener gets the element, notification name and userInfo. 129 129 JSValueRef arguments[3]; 130 arguments[0] = toJS(context, WTR::AccessibilityUIElement::create([notification object]).ptr()); 130 id notificationObject = [notification object]; 131 arguments[0] = toJS(context, notificationObject ? WTR::AccessibilityUIElement::create(notificationObject).ptr() : nullptr); 131 132 arguments[1] = notificationNameArgument; 132 133 arguments[2] = userInfoArgument; -
trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
r285677 r285859 618 618 RefPtr<AccessibilityUIElement> AccessibilityUIElement::uiElementAttributeValue(JSStringRef attribute) const 619 619 { 620 auto value = attributeValue([NSString stringWithJSStringRef:attribute]); 621 return AccessibilityUIElement::create(value.get()); 620 if (auto value = attributeValue([NSString stringWithJSStringRef:attribute])) 621 return AccessibilityUIElement::create(value.get()); 622 return nullptr; 622 623 } 623 624 … … 1242 1243 BEGIN_AX_OBJC_EXCEPTIONS 1243 1244 NSDictionary *parameterizedAttribute = searchPredicateParameterizedAttributeForSearchCriteria(context, startElement, isDirectionNext, 1, searchKey, searchText, visibleOnly, immediateDescendantsOnly); 1244 id value = [m_element accessibilityAttributeValue:@"AXUIElementsForSearchPredicate" forParameter:parameterizedAttribute]; 1245 if ([value isKindOfClass:[NSArray class]]) 1246 return AccessibilityUIElement::create([value lastObject]); 1245 id searchResults = [m_element accessibilityAttributeValue:@"AXUIElementsForSearchPredicate" forParameter:parameterizedAttribute]; 1246 if ([searchResults isKindOfClass:[NSArray class]]) { 1247 if (id lastResult = [searchResults lastObject]) 1248 return AccessibilityUIElement::create(lastResult); 1249 } 1247 1250 END_AX_OBJC_EXCEPTIONS 1248 1251 … … 1411 1414 NSArray *colRowArray = @[@(col), @(row)]; 1412 1415 BEGIN_AX_OBJC_EXCEPTIONS 1413 return AccessibilityUIElement::create([m_element accessibilityAttributeValue:@"AXCellForColumnAndRow" forParameter:colRowArray]); 1416 if (id cell = [m_element accessibilityAttributeValue:@"AXCellForColumnAndRow" forParameter:colRowArray]) 1417 return AccessibilityUIElement::create(cell); 1414 1418 END_AX_OBJC_EXCEPTIONS 1415 1419 … … 1423 1427 1424 1428 BEGIN_AX_OBJC_EXCEPTIONS 1425 return AccessibilityUIElement::create(attributeValue(NSAccessibilityHorizontalScrollBarAttribute).get()); 1429 if (id scrollbar = attributeValue(NSAccessibilityHorizontalScrollBarAttribute).get()) 1430 return AccessibilityUIElement::create(scrollbar); 1426 1431 END_AX_OBJC_EXCEPTIONS 1427 1432 … … 1435 1440 1436 1441 BEGIN_AX_OBJC_EXCEPTIONS 1437 return AccessibilityUIElement::create(attributeValue(NSAccessibilityVerticalScrollBarAttribute).get()); 1442 if (id scrollbar = attributeValue(NSAccessibilityVerticalScrollBarAttribute).get()) 1443 return AccessibilityUIElement::create(scrollbar); 1438 1444 END_AX_OBJC_EXCEPTIONS 1439 1445 -
trunk/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp
r277971 r285859 62 62 } 63 63 64 Ref <AccessibilityUIElement> AccessibilityController::focusedElement()64 RefPtr<AccessibilityUIElement> AccessibilityController::focusedElement() 65 65 { 66 66 notImplemented(); 67 return AccessibilityUIElement::create(nullptr);67 return nullptr; 68 68 } 69 69
Note:
See TracChangeset
for help on using the changeset viewer.