Changeset 282358 in webkit
- Timestamp:
- Sep 13, 2021 2:20:16 PM (10 months ago)
- Location:
- trunk
- Files:
-
- 3 added
- 16 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/accessibility/mac/basic-embed-pdf-accessibility-expected.txt (added)
-
LayoutTests/accessibility/mac/basic-embed-pdf-accessibility.html (added)
-
LayoutTests/accessibility/resources/simple-webkit-pages.pdf (added)
-
LayoutTests/platform/mac-wk1/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/accessibility/AXObjectCache.cpp (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityRenderObject.cpp (modified) (3 diffs)
-
Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm (modified) (4 diffs)
-
Source/WebCore/platform/Widget.h (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h (modified) (3 diffs)
-
Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm (modified) (14 diffs)
-
Source/WebKit/WebProcess/Plugins/Plugin.h (modified) (1 diff)
-
Source/WebKit/WebProcess/Plugins/PluginView.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Plugins/PluginView.h (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r282357 r282358 1 2021-09-13 Tyler Wilcock <tyler_w@apple.com> 2 3 AX: Make PDFs loaded via <embed> accessible 4 https://bugs.webkit.org/show_bug.cgi?id=229556 5 6 Reviewed by Chris Fleizach and Andres Gonzalez. 7 8 Add a test ensuring the PDF accessibility tree of PDFs loaded via 9 `<embed>` elements is accessible. 10 11 * accessibility/mac/basic-embed-pdf-accessibility-expected.txt: Added. 12 * accessibility/mac/basic-embed-pdf-accessibility.html: Added. 13 * accessibility/resources/simple-webkit-pages.pdf: Added. 14 1 15 2021-09-13 Sam Sneddon <gsnedders@apple.com> 2 16 -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r282346 r282358 576 576 accessibility/parent-delete.html [ Failure ] 577 577 578 # Skip because the embedded plugin never resolves in WK1, resulting in a timeout. 579 accessibility/mac/basic-embed-pdf-accessibility.html [ Skip ] 580 578 581 # rdar://problem/26478296 579 582 svg/hixie/text/003.html [ Failure ] -
trunk/Source/WebCore/ChangeLog
r282357 r282358 1 2021-09-13 Tyler Wilcock <tyler_w@apple.com> 2 3 AX: Make PDFs loaded via <embed> accessible 4 https://bugs.webkit.org/show_bug.cgi?id=229556 5 6 Reviewed by Chris Fleizach and Andres Gonzalez. 7 8 This patch makes PDFs loaded in `<embed>` elements accessible to 9 clients by exposing the underlying `WKPDFPluginAccessibilityObject` 10 created by PDF plugins. 11 12 Full-frame PDF accessibility support (e.g. file:///path/to/example.pdf) was 13 implemented in https://bugs.webkit.org/show_bug.cgi?id=170589, but this 14 wasn't sufficient for PDFs loaded in `<embed>`s. 15 16 This patch only implements `<embed>` PDF support for Mac - iOS support will 17 need to follow in a separate patch. 18 19 Test: accessibility/mac/basic-embed-pdf-accessibility.html 20 21 * accessibility/AXObjectCache.cpp: 22 (WebCore::AXObjectCache::getOrCreate): 23 Change comment that suggests PluginViewBase Widgets are not supported, 24 because they are now. 25 26 * accessibility/AccessibilityRenderObject.cpp: 27 (WebCore::AccessibilityRenderObject::isAttachment const): 28 Don't consider plugins to be attachments since they need to be handled 29 differently. 30 (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const): 31 Don't ignore widgets with underlying accessibilty objects (such as PDF 32 plugins). 33 34 * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: 35 (-[WebAccessibilityObjectWrapper renderWidgetChildren]): 36 Extract underlying accessibility object from widgets that have one. 37 (-[WebAccessibilityObjectWrapper accessibilityHitTest:]): 38 Forward hit test to underlying plugin accessibility object if one 39 exists. 40 (isMatchingPlugin): Added. 41 (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): 42 Match `renderWidgetChildren` for searches with `SearchKey::AnyType` 43 criteria. 44 45 * platform/Widget.h: 46 (WebCore::Widget::accessibilityHitTest const): Added this virtual 47 method. 48 (WebCore::Widget::accessibilityObject const): Added this virtual 49 method. 50 1 51 2021-09-13 Sam Sneddon <gsnedders@apple.com> 2 52 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r282022 r282358 672 672 ASSERT(!get(widget)); 673 673 674 // Catch the case if an (unsupported) widget type is used. Only FrameView and ScrollBar are supported now.674 // Ensure we weren't given an unsupported widget type. 675 675 ASSERT(newObj); 676 676 if (!newObj) -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r281920 r282358 77 77 #include "Page.h" 78 78 #include "PathUtilities.h" 79 #include "PluginViewBase.h" 79 80 #include "ProgressTracker.h" 80 81 #include "Range.h" … … 532 533 if (!renderer) 533 534 return false; 535 536 // Although plugins are also a type of widget, we need to treat them differently than attachments. 537 if (is<PluginViewBase>(widget())) 538 return false; 539 534 540 // Widgets are the replaced elements that we represent to AX as attachments 535 541 bool isWidget = renderer->isWidget(); … … 1345 1351 if (isAttachment()) 1346 1352 return accessibilityIgnoreAttachment(); 1353 1354 #if PLATFORM(COCOA) 1355 // If this widget has an underlying AX object, don't ignore it. 1356 if (widget() && widget()->accessibilityObject()) 1357 return false; 1358 #endif 1347 1359 1348 1360 // ignore popup menu items because AppKit does -
trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
r281691 r282358 1658 1658 return nil; 1659 1659 1660 auto* widget = backingObject->widget(); 1661 if (widget && widget->accessibilityObject()) 1662 return @[widget->accessibilityObject()]; 1663 1660 1664 ALLOW_DEPRECATED_DECLARATIONS_BEGIN 1661 1665 return [backingObject->platformWidget() accessibilityAttributeValue:NSAccessibilityChildrenAttribute]; … … 2945 2949 if (axObject->isAttachment() && [axObject->wrapper() attachmentView]) 2946 2950 return [axObject->wrapper() attachmentView]; 2951 auto* widget = axObject->widget(); 2952 if (is<PluginViewBase>(widget)) 2953 return NSAccessibilityUnignoredAncestor(widget->accessibilityHitTest(IntPoint(point))); 2947 2954 return NSAccessibilityUnignoredAncestor(axObject->wrapper()); 2948 2955 } … … 3695 3702 } 3696 3703 3704 static BOOL isMatchingPlugin(AXCoreObject* axObject, const AccessibilitySearchCriteria& criteria) 3705 { 3706 auto* widget = axObject->widget(); 3707 if (!is<PluginViewBase>(widget)) 3708 return false; 3709 3710 return criteria.searchKeys.contains(AccessibilitySearchKey::AnyType) 3711 && (!criteria.visibleOnly || downcast<PluginViewBase>(widget)->isVisible()); 3712 } 3713 3697 3714 ALLOW_DEPRECATED_IMPLEMENTATIONS_BEGIN 3698 3715 - (id)accessibilityAttributeValue:(NSString*)attribute forParameter:(id)parameter … … 3798 3815 if ([attribute isEqualToString:NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute]) { 3799 3816 AccessibilitySearchCriteria criteria = accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute(dictionary); 3817 NSUInteger widgetChildrenSize = 0; 3818 if (isMatchingPlugin(backingObject, criteria)) { 3819 // FIXME: We should also be searching the tree(s) resulting from `renderWidgetChildren` for matches. 3820 // This is tracked by https://bugs.webkit.org/show_bug.cgi?id=230167. 3821 if (auto* widgetChildren = [self renderWidgetChildren]) { 3822 widgetChildrenSize = [widgetChildren count]; 3823 if (widgetChildrenSize >= criteria.resultsLimit) 3824 return @(std::min(widgetChildrenSize, NSUInteger(criteria.resultsLimit))); 3825 criteria.resultsLimit -= widgetChildrenSize; 3826 } 3827 } 3828 3800 3829 AccessibilityObject::AccessibilityChildrenVector results; 3801 3830 backingObject->findMatchingObjects(&criteria, results); 3802 return @(results.size() );3831 return @(results.size() + widgetChildrenSize); 3803 3832 } 3804 3833 3805 3834 if ([attribute isEqualToString:NSAccessibilityUIElementsForSearchPredicateParameterizedAttribute]) { 3806 3835 AccessibilitySearchCriteria criteria = accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute(dictionary); 3836 NSArray *widgetChildren = nil; 3837 if (isMatchingPlugin(backingObject, criteria)) { 3838 // FIXME: We should also be searching the tree(s) resulting from `renderWidgetChildren` for matches. 3839 // This is tracked by https://bugs.webkit.org/show_bug.cgi?id=230167. 3840 if (auto* children = [self renderWidgetChildren]) { 3841 NSUInteger includedChildrenCount = std::min([children count], NSUInteger(criteria.resultsLimit)); 3842 widgetChildren = [children subarrayWithRange:NSMakeRange(0, includedChildrenCount)]; 3843 if ([widgetChildren count] >= criteria.resultsLimit) 3844 return widgetChildren; 3845 criteria.resultsLimit -= [widgetChildren count]; 3846 } 3847 } 3848 3807 3849 AccessibilityObject::AccessibilityChildrenVector results; 3808 3850 backingObject->findMatchingObjects(&criteria, results); 3851 if (widgetChildren) 3852 return [widgetChildren arrayByAddingObjectsFromArray:convertToNSArray(results)]; 3809 3853 return convertToNSArray(results); 3810 3854 } -
trunk/Source/WebCore/platform/Widget.h
r259761 r282358 177 177 178 178 #if PLATFORM(COCOA) 179 virtual id accessibilityHitTest(const IntPoint&) const { return nil; } 180 virtual id accessibilityObject() const { return nil; } 179 181 NSView* getOuterView() const; 180 182 -
trunk/Source/WebKit/ChangeLog
r282349 r282358 1 2021-09-13 Tyler Wilcock <tyler_w@apple.com> 2 3 AX: Make PDFs loaded via <embed> accessible 4 https://bugs.webkit.org/show_bug.cgi?id=229556 5 6 Reviewed by Chris Fleizach and Andres Gonzalez. 7 8 This patch makes PDFs loaded in `<embed>` elements accessible to 9 clients by exposing the underlying `WKPDFPluginAccessibilityObject` 10 created by PDF plugins. 11 12 Full-frame PDF accessibility support (e.g. file:///path/to/example.pdf) was 13 implemented in https://bugs.webkit.org/show_bug.cgi?id=170589, but this 14 wasn't sufficient for PDFs loaded in `<embed>`s. 15 16 This patch only implements `<embed>` PDF support for Mac - iOS support will 17 need to follow in a separate patch. 18 19 * WebProcess/Plugins/PDF/PDFPlugin.h: 20 * WebProcess/Plugins/PDF/PDFPlugin.mm: 21 (-[WKPDFPluginAccessibilityObject initWithPDFPlugin:andElement:]): 22 Change this method to also accept the `HTMLPlugInElement` that the plugin 23 originates from. 24 (-[WKPDFPluginAccessibilityObject parent]): 25 Added. Returns the cached parent if present, otherwises tries to cache 26 the parent in the form of the `HTMLPlugInElement` that the plugin 27 originates from. 28 (-[WKPDFPluginAccessibilityObject setParent:]): Added. 29 (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]): 30 Query against newly added `parent` getter when fulfilling attribute 31 value requests. 32 (-[WKPDFPluginAccessibilityObject ALLOW_DEPRECATED_IMPLEMENTATIONS_END]): 33 (-[WKPDFPluginAccessibilityObject accessibilityHitTestIntPoint:]): Added. 34 (-[WKPDFPluginAccessibilityObject accessibilityHitTest:]): 35 Changed to convert `NSPoint` to `WebCore::IntPoint` and call 36 `accessibilityHitTestIntPoint`. 37 (WebKit::PDFPlugin::create): 38 Add parameter to accept the `HTMLPlugInElement` that the plugin 39 originates from. 40 (WebKit::PDFPlugin::PDFPlugin): 41 Add parameter to accept the `HTMLPlugInElement` that the plugin 42 originates from. 43 (WebKit::PDFPlugin::accessibilityHitTest const): Added. 44 (-[WKPDFPluginAccessibilityObject initWithPDFPlugin:]): Deleted. 45 46 * WebProcess/Plugins/Plugin.h: 47 (WebKit::Plugin::accessibilityHitTest const): Added. 48 (WebKit::Plugin::accessibilityObject const): Change the return type to 49 `id` as that is more common practice. 50 51 * WebProcess/Plugins/PluginView.h: 52 Add `id accessibilityHitTest` and change `accessibilityObject()` 53 to return `id`. 54 55 * WebProcess/Plugins/PluginView.cpp: 56 (WebKit::PluginView::accessibilityObject const): Change return type to 57 `id`. 58 59 * WebProcess/WebPage/WebPage.cpp: 60 (WebKit::WebPage::createPlugin): 61 Pass the originating `pluginElement` to `PDFPlugin::create`. 62 1 63 2021-09-13 Wenson Hsieh <wenson_hsieh@apple.com> 2 64 -
trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h
r278516 r282358 83 83 { 84 84 public: 85 static Ref<PDFPlugin> create(WebFrame& );85 static Ref<PDFPlugin> create(WebFrame&, WebCore::HTMLPlugInElement*); 86 86 ~PDFPlugin(); 87 87 … … 157 157 158 158 private: 159 explicit PDFPlugin(WebFrame& );159 explicit PDFPlugin(WebFrame&, WebCore::HTMLPlugInElement*); 160 160 161 161 // Plugin functions. … … 214 214 RetainPtr<PDFDocument> pdfDocumentForPrinting() const final { return m_pdfDocument; } 215 215 WebCore::FloatSize pdfDocumentSizeForPrinting() const final; 216 NSObject *accessibilityObject() const final; 216 id accessibilityHitTest(const WebCore::IntPoint&) const final; 217 id accessibilityObject() const final; 217 218 id accessibilityAssociatedPluginParentForElement(WebCore::Element*) const final; 218 219 -
trunk/Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm
r281470 r282358 102 102 #import <wtf/UUID.h> 103 103 #import <wtf/WTFSemaphore.h> 104 #import <wtf/WeakObjCPtr.h> 104 105 #import <wtf/WorkQueue.h> 105 106 #import <wtf/cocoa/VectorCocoa.h> … … 156 157 @interface WKPDFPluginAccessibilityObject : NSObject { 157 158 PDFLayerController *_pdfLayerController; 158 __unsafe_unretained NSObject *_parent;159 WeakObjCPtr<NSObject> _parent; 159 160 WebKit::PDFPlugin* _pdfPlugin; 161 WeakPtr<WebCore::HTMLPlugInElement> _pluginElement; 160 162 } 161 163 162 164 @property (assign) PDFLayerController *pdfLayerController; 163 @property (assign) NSObject *parent;164 165 @property (assign) WebKit::PDFPlugin* pdfPlugin; 165 166 - (id)initWithPDFPlugin:(WebKit::PDFPlugin *)plugin; 166 @property (assign) WeakPtr<WebCore::HTMLPlugInElement> pluginElement; 167 168 - (id)initWithPDFPlugin:(WebKit::PDFPlugin *)plugin andElement:(WebCore::HTMLPlugInElement *)element; 167 169 168 170 @end … … 170 172 @implementation WKPDFPluginAccessibilityObject 171 173 172 @synthesize parent = _parent;173 174 @synthesize pdfPlugin = _pdfPlugin; 174 175 - (id)initWithPDFPlugin:(WebKit::PDFPlugin *)plugin 175 @synthesize pluginElement = _pluginElement; 176 177 - (id)initWithPDFPlugin:(WebKit::PDFPlugin *)plugin andElement:(WebCore::HTMLPlugInElement *)element 176 178 { 177 179 if (!(self = [super init])) … … 179 181 180 182 _pdfPlugin = plugin; 183 _pluginElement = makeWeakPtr(element); 181 184 182 185 return self; 186 } 187 188 - (NSObject *)parent 189 { 190 if (!_parent) { 191 if (auto* axObjectCache = _pdfPlugin->axObjectCache()) { 192 if (auto* pluginAxObject = axObjectCache->getOrCreate(_pluginElement.get())) 193 _parent = pluginAxObject->wrapper(); 194 } 195 } 196 return _parent.get().get(); 197 } 198 199 - (void)setParent:(NSObject *)parent 200 { 201 _parent = parent; 183 202 } 184 203 … … 212 231 { 213 232 if ([attribute isEqualToString:NSAccessibilityParentAttribute]) 214 return _parent;233 return [self parent]; 215 234 if ([attribute isEqualToString:NSAccessibilityTopLevelUIElementAttribute]) 216 return [ _parentaccessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute];235 return [[self parent] accessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute]; 217 236 if ([attribute isEqualToString:NSAccessibilityWindowAttribute]) 218 return [ _parentaccessibilityAttributeValue:NSAccessibilityWindowAttribute];237 return [[self parent] accessibilityAttributeValue:NSAccessibilityWindowAttribute]; 219 238 if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) 220 239 return [NSValue valueWithSize:_pdfPlugin->boundsOnScreen().size()]; 221 240 if ([attribute isEqualToString:NSAccessibilityEnabledAttribute]) 222 return [ _parentaccessibilityAttributeValue:NSAccessibilityEnabledAttribute];241 return [[self parent] accessibilityAttributeValue:NSAccessibilityEnabledAttribute]; 223 242 if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) 224 243 return [NSValue valueWithPoint:_pdfPlugin->boundsOnScreen().location()]; … … 229 248 return NSAccessibilityGroupRole; 230 249 if ([attribute isEqualToString:NSAccessibilityPrimaryScreenHeightAttribute]) 231 return [_parent accessibilityAttributeValue:NSAccessibilityPrimaryScreenHeightAttribute]; 250 return [[self parent] accessibilityAttributeValue:NSAccessibilityPrimaryScreenHeightAttribute]; 251 if ([attribute isEqualToString:NSAccessibilitySubroleAttribute]) 252 return @"AXPDFPluginSubrole"; 232 253 233 254 return 0; … … 274 295 // PDFLayerController has its own accessibilityChildren. 275 296 NSAccessibilityChildrenAttribute, 276 NSAccessibilityPrimaryScreenHeightAttribute 297 NSAccessibilityPrimaryScreenHeightAttribute, 298 NSAccessibilitySubroleAttribute 277 299 ]; 278 300 … … 347 369 } 348 370 371 - (id)accessibilityHitTestIntPoint:(const WebCore::IntPoint&)point 372 { 373 auto convertedPoint = _pdfPlugin->convertFromRootViewToPDFView(point); 374 return [_pdfLayerController accessibilityHitTest:convertedPoint]; 375 } 376 349 377 - (id)accessibilityHitTest:(NSPoint)point 350 378 { 351 point = _pdfPlugin->convertFromRootViewToPDFView(WebCore::IntPoint(point)); 352 return [_pdfLayerController accessibilityHitTest:point]; 379 return [self accessibilityHitTestIntPoint:WebCore::IntPoint(point)]; 353 380 } 354 381 … … 362 389 @property (assign) WebKit::PDFPlugin* pdfPlugin; 363 390 391 - (id)initWithPDFPlugin:(WebKit::PDFPlugin *)plugin; 392 364 393 @end 365 394 … … 395 424 396 425 @property (assign) WebKit::PDFPlugin* pdfPlugin; 426 427 - (id)initWithPDFPlugin:(WebKit::PDFPlugin *)plugin; 397 428 398 429 @end … … 596 627 } 597 628 598 Ref<PDFPlugin> PDFPlugin::create(WebFrame& frame )599 { 600 return adoptRef(*new PDFPlugin(frame ));601 } 602 603 inline PDFPlugin::PDFPlugin(WebFrame& frame )629 Ref<PDFPlugin> PDFPlugin::create(WebFrame& frame, HTMLPlugInElement* pluginElement) 630 { 631 return adoptRef(*new PDFPlugin(frame, pluginElement)); 632 } 633 634 inline PDFPlugin::PDFPlugin(WebFrame& frame, HTMLPlugInElement* pluginElement) 604 635 : Plugin(PDFPluginType) 605 636 , m_frame(makeWeakPtr(frame)) … … 621 652 m_pdfLayerController.get().parentLayer = m_contentLayer.get(); 622 653 623 if (isFullFramePlugin()) { 654 bool isFullFrame = isFullFramePlugin(); 655 if (isFullFrame) { 624 656 auto* document = frame.coreFrame()->document(); 625 657 … … 640 672 } 641 673 642 m_accessibilityObject = adoptNS([[WKPDFPluginAccessibilityObject alloc] initWithPDFPlugin:this ]);674 m_accessibilityObject = adoptNS([[WKPDFPluginAccessibilityObject alloc] initWithPDFPlugin:this andElement:pluginElement]); 643 675 [m_accessibilityObject setPdfLayerController:m_pdfLayerController.get()]; 644 [m_accessibilityObject setParent:frame.page()->accessibilityRemoteObject()]; 676 if (isFullFrame) 677 [m_accessibilityObject setParent:frame.page()->accessibilityRemoteObject()]; 678 // If the plugin is not full-frame, we'll need to set the parent later after the AXObjectCache for the document has been initialized. 645 679 646 680 [m_containerLayer addSublayer:m_contentLayer.get()]; … … 3027 3061 } 3028 3062 3029 NSObject *PDFPlugin::accessibilityObject() const 3063 id PDFPlugin::accessibilityHitTest(const WebCore::IntPoint& point) const 3064 { 3065 return [m_accessibilityObject accessibilityHitTestIntPoint:point]; 3066 } 3067 3068 id PDFPlugin::accessibilityObject() const 3030 3069 { 3031 3070 return m_accessibilityObject.get(); -
trunk/Source/WebKit/WebProcess/Plugins/Plugin.h
r278516 r282358 278 278 virtual RetainPtr<PDFDocument> pdfDocumentForPrinting() const { return 0; } 279 279 virtual WebCore::FloatSize pdfDocumentSizeForPrinting() const; 280 virtual NSObject *accessibilityObject() const { return 0; } 280 virtual id accessibilityHitTest(const WebCore::IntPoint&) const { return nil; } 281 virtual id accessibilityObject() const { return nil; } 281 282 virtual id accessibilityAssociatedPluginParentForElement(WebCore::Element*) const { return nullptr; } 282 283 #endif -
trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp
r282191 r282358 546 546 } 547 547 548 NSObject *PluginView::accessibilityObject() const548 id PluginView::accessibilityObject() const 549 549 { 550 550 if (!m_isInitialized || !m_plugin) -
trunk/Source/WebKit/WebProcess/Plugins/PluginView.h
r278516 r282358 88 88 bool sendComplexTextInput(uint64_t pluginComplexTextInputIdentifier, const String& textInput); 89 89 RetainPtr<PDFDocument> pdfDocumentForPrinting() const { return m_plugin->pdfDocumentForPrinting(); } 90 NSObject *accessibilityObject() const; 90 id accessibilityHitTest(const WebCore::IntPoint& point) const override { return m_plugin->accessibilityHitTest(point); } 91 id accessibilityObject() const override; 91 92 id accessibilityAssociatedPluginParentForElement(WebCore::Element*) const override; 92 93 #endif -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r282314 r282358 1168 1168 #if ENABLE(PDFKIT_PLUGIN) 1169 1169 if (shouldUsePDFPlugin(parameters.mimeType, parameters.url.path())) 1170 return PDFPlugin::create(*frame );1170 return PDFPlugin::create(*frame, pluginElement); 1171 1171 #endif 1172 1172 } -
trunk/Tools/ChangeLog
r282347 r282358 1 2021-09-13 Tyler Wilcock <tyler_w@apple.com> 2 3 AX: Make PDFs loaded via <embed> accessible 4 https://bugs.webkit.org/show_bug.cgi?id=229556 5 6 Reviewed by Chris Fleizach and Andres Gonzalez. 7 8 * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: 9 (WTR::attributeValue): 10 Some PDFKit elements don't respond to `accessibilityAttributeValue`, 11 so before calling that selector first check to see if the given `element` responds 12 to an attribute-specific selector (like `accessibilityRole`). 13 1 14 2021-09-13 Jonathan Bedard <jbedard@apple.com> 2 15 -
trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
r281274 r282358 146 146 BEGIN_AX_OBJC_EXCEPTIONS 147 147 AccessibilityUIElement::s_controller->executeOnAXThreadAndWait([&element, &attribute, &value] { 148 value = [element accessibilityAttributeValue:attribute]; 148 // The given `element` may not respond to `accessibilityAttributeValue`, so first check to see if it responds to the attribute-specific selector. 149 if ([attribute isEqual:NSAccessibilityChildrenAttribute] && [element respondsToSelector:@selector(accessibilityChildren)]) 150 value = [element accessibilityChildren]; 151 else if ([attribute isEqual:NSAccessibilityDescriptionAttribute] && [element respondsToSelector:@selector(accessibilityLabel)]) 152 value = [element accessibilityLabel]; 153 else if ([attribute isEqual:NSAccessibilityParentAttribute] && [element respondsToSelector:@selector(accessibilityParent)]) 154 value = [element accessibilityParent]; 155 else if ([attribute isEqual:NSAccessibilityRoleAttribute] && [element respondsToSelector:@selector(accessibilityRole)]) 156 value = [element accessibilityRole]; 157 else if ([attribute isEqual:NSAccessibilityValueAttribute] && [element respondsToSelector:@selector(accessibilityValue)]) 158 value = [element accessibilityValue]; 159 else 160 value = [element accessibilityAttributeValue:attribute]; 149 161 }); 150 162 END_AX_OBJC_EXCEPTIONS
Note: See TracChangeset
for help on using the changeset viewer.