Changeset 153404 in webkit
- Timestamp:
- Jul 27, 2013 4:44:27 PM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r153402 r153404 1 2013-07-27 Chris Fleizach <cfleizach@apple.com> 2 3 AX: VoiceOver not working with data detection page overlays 4 https://bugs.webkit.org/show_bug.cgi?id=118680 5 6 Reviewed by Sam Weinig. 7 8 Expose API in BundlePageOverlay so that accessibility attributes can be retrieved through the overlay. 9 This requires two methods in a new callback struct. One to copy the attribute names, and the other to 10 copy the attribute values. I've folded both parameterized and non-parameterized attribute names into one method 11 with a boolean to determine which one should be used. The non-parameterized attributes are not used or passed to the 12 overlay at this time as there are no clients with such a need. 13 14 * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: 15 (PageOverlayClientImpl::setAccessibilityClient): 16 (PageOverlayClientImpl::PageOverlayClientImpl): 17 (PageOverlayClientImpl::copyAccessibilityAttributeValue): 18 (PageOverlayClientImpl::copyAccessibilityAttributeNames): 19 (WKBundlePageOverlaySetAccessibilityClient): 20 * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h: 21 * WebProcess/WebPage/PageOverlay.cpp: 22 (WebKit::PageOverlay::copyAccessibilityAttributeValue): 23 (WebKit::PageOverlay::copyAccessibilityAttributeNames): 24 * WebProcess/WebPage/PageOverlay.h: 25 (WebKit::PageOverlay::Client::copyAccessibilityAttributeValue): 26 (WebKit::PageOverlay::Client::copyAccessibilityAttributeNames): 27 (WebKit::PageOverlay::client): 28 * WebProcess/WebPage/WebPage.cpp: 29 (WebKit::WebPage::pageOverlayCopyAccessibilityAttributeValue): 30 (WebKit::WebPage::pageOverlayCopyAccessibilityAttributesNames): 31 * WebProcess/WebPage/WebPage.h: 32 * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm: 33 (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]): 34 (-[WKAccessibilityWebPageObject _convertScreenPointToWindow:]): 35 (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]): 36 1 37 2013-07-27 Simon Fraser <simon.fraser@apple.com> 2 38 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp
r152795 r153404 43 43 } 44 44 45 virtual void setAccessibilityClient(WKBundlePageOverlayAccessibilityClient* client) 46 { 47 if (client) 48 m_accessibilityClient = *client; 49 } 50 45 51 private: 46 52 explicit PageOverlayClientImpl(WKBundlePageOverlayClient* client) 47 53 : m_client() 54 , m_accessibilityClient() 48 55 { 49 56 if (client) … … 116 123 } 117 124 125 virtual WKTypeRef copyAccessibilityAttributeValue(PageOverlay* pageOverlay, WKStringRef attribute, WKTypeRef parameter) 126 { 127 if (!m_accessibilityClient.copyAccessibilityAttributeValue) 128 return 0; 129 return m_accessibilityClient.copyAccessibilityAttributeValue(toAPI(pageOverlay), attribute, parameter, m_client.clientInfo); 130 } 131 132 virtual WKArrayRef copyAccessibilityAttributeNames(PageOverlay* pageOverlay, bool paramerizedNames) 133 { 134 if (!m_accessibilityClient.copyAccessibilityAttributeNames) 135 return 0; 136 return m_accessibilityClient.copyAccessibilityAttributeNames(toAPI(pageOverlay), paramerizedNames, m_client.clientInfo); 137 } 138 118 139 WKBundlePageOverlayClient m_client; 140 WKBundlePageOverlayAccessibilityClient m_accessibilityClient; 119 141 }; 120 142 … … 134 156 } 135 157 158 void WKBundlePageOverlaySetAccessibilityClient(WKBundlePageOverlayRef bundlePageOverlayRef, WKBundlePageOverlayAccessibilityClient* client) 159 { 160 if (client && client->version) 161 return; 162 static_cast<PageOverlayClientImpl*>(toImpl(bundlePageOverlayRef)->client())->setAccessibilityClient(client); 163 } 164 136 165 void WKBundlePageOverlaySetNeedsDisplay(WKBundlePageOverlayRef bundlePageOverlayRef, WKRect rect) 137 166 { -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h
r152795 r153404 63 63 typedef struct WKBundlePageOverlayClient WKBundlePageOverlayClient; 64 64 65 enum { kWKBundlePageOverlayClientCurrentVersion = 0 }; 65 enum { kWKBundlePageOverlayClientCurrentVersion = 0 }; 66 67 typedef WKTypeRef (*WKAccessibilityAttributeValueCallback)(WKBundlePageOverlayRef pageOverlay, WKStringRef attribute, WKTypeRef parameter, const void* clientInfo); 68 typedef WKArrayRef (*WKAccessibilityAttributeNamesCallback)(WKBundlePageOverlayRef pageOverlay, bool parameterizedNames, const void* clientInfo); 69 70 struct WKBundlePageOverlayAccessibilityClient { 71 int version; 72 const void * clientInfo; 73 WKAccessibilityAttributeValueCallback copyAccessibilityAttributeValue; 74 WKAccessibilityAttributeNamesCallback copyAccessibilityAttributeNames; 75 }; 76 typedef struct WKBundlePageOverlayAccessibilityClient WKBundlePageOverlayAccessibilityClient; 77 78 enum { kWKBundlePageOverlayAccessibilityClientCurrentVersion = 0 }; 66 79 67 80 WK_EXPORT WKTypeID WKBundlePageOverlayGetTypeID(); … … 70 83 WK_EXPORT void WKBundlePageOverlaySetNeedsDisplay(WKBundlePageOverlayRef bundlePageOverlay, WKRect rect); 71 84 WK_EXPORT float WKBundlePageOverlayFractionFadedIn(WKBundlePageOverlayRef bundlePageOverlay); 85 WK_EXPORT void WKBundlePageOverlaySetAccessibilityClient(WKBundlePageOverlayRef bundlePageOverlay, WKBundlePageOverlayAccessibilityClient* client); 72 86 73 87 #ifdef __cplusplus -
trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp
r152795 r153404 131 131 } 132 132 133 WKTypeRef PageOverlay::copyAccessibilityAttributeValue(WKStringRef attribute, WKTypeRef parameter) 134 { 135 return m_client->copyAccessibilityAttributeValue(this, attribute, parameter); 136 } 137 138 WKArrayRef PageOverlay::copyAccessibilityAttributeNames(bool parameterizedNames) 139 { 140 return m_client->copyAccessibilityAttributeNames(this, parameterizedNames); 141 } 142 133 143 void PageOverlay::startFadeInAnimation() 134 144 { -
trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h
r152795 r153404 28 28 29 29 #include "APIObject.h" 30 #include "WKBase.h" 30 31 #include <WebCore/RunLoop.h> 31 32 #include <wtf/PassRefPtr.h> … … 33 34 namespace WebCore { 34 35 class GraphicsContext; 36 class IntPoint; 35 37 class IntRect; 36 38 } … … 53 55 virtual void drawRect(PageOverlay*, WebCore::GraphicsContext&, const WebCore::IntRect& dirtyRect) = 0; 54 56 virtual bool mouseEvent(PageOverlay*, const WebMouseEvent&) = 0; 57 58 virtual WKTypeRef copyAccessibilityAttributeValue(PageOverlay*, WKStringRef attribute, WKTypeRef parameter) { return 0; } 59 virtual WKArrayRef copyAccessibilityAttributeNames(PageOverlay*, bool parameterizedNames) { return 0; } 55 60 }; 56 61 … … 65 70 bool mouseEvent(const WebMouseEvent&); 66 71 72 WKTypeRef copyAccessibilityAttributeValue(WKStringRef attribute, WKTypeRef parameter); 73 WKArrayRef copyAccessibilityAttributeNames(bool parameterizedNames); 74 67 75 void startFadeInAnimation(); 68 76 void startFadeOutAnimation(); … … 70 78 71 79 float fractionFadedIn() const { return m_fractionFadedIn; } 72 80 Client* client() const { return m_client; } 81 73 82 protected: 74 83 explicit PageOverlay(Client*); -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r153378 r153404 1838 1838 } 1839 1839 #endif 1840 1841 WKTypeRef WebPage::pageOverlayCopyAccessibilityAttributeValue(WKStringRef attribute, WKTypeRef parameter) 1842 { 1843 if (!m_pageOverlays.size()) 1844 return 0; 1845 PageOverlayList::reverse_iterator end = m_pageOverlays.rend(); 1846 for (PageOverlayList::reverse_iterator it = m_pageOverlays.rbegin(); it != end; ++it) { 1847 WKTypeRef value = (*it)->copyAccessibilityAttributeValue(attribute, parameter); 1848 if (value) 1849 return value; 1850 } 1851 return 0; 1852 } 1853 1854 WKArrayRef WebPage::pageOverlayCopyAccessibilityAttributesNames(bool parameterizedNames) 1855 { 1856 if (!m_pageOverlays.size()) 1857 return 0; 1858 PageOverlayList::reverse_iterator end = m_pageOverlays.rend(); 1859 for (PageOverlayList::reverse_iterator it = m_pageOverlays.rbegin(); it != end; ++it) { 1860 WKArrayRef value = (*it)->copyAccessibilityAttributeNames(parameterizedNames); 1861 if (value) 1862 return value; 1863 } 1864 return 0; 1865 } 1840 1866 1841 1867 void WebPage::validateCommand(const String& commandName, uint64_t callbackID) -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r153378 r153404 663 663 void setScrollPinningBehavior(uint32_t /* WebCore::ScrollPinningBehavior */ pinning); 664 664 665 WKTypeRef pageOverlayCopyAccessibilityAttributeValue(WKStringRef attribute, WKTypeRef parameter); 666 WKArrayRef pageOverlayCopyAccessibilityAttributesNames(bool parameterizedNames); 667 665 668 private: 666 669 WebPage(uint64_t pageID, const WebPageCreationParameters&); -
trunk/Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm
r152795 r153404 29 29 #import "WebFrame.h" 30 30 #import "WebPage.h" 31 #import "WKArray.h" 32 #import "WKNumber.h" 33 #import "WKRetainPtr.h" 34 #import "WKSharedAPICast.h" 35 #import "WKString.h" 36 #import "WKStringCF.h" 31 37 #import <WebCore/AXObjectCache.h> 32 38 #import <WebCore/Frame.h> … … 102 108 103 109 return m_attributeNames; 110 } 111 112 - (NSArray *)accessibilityParameterizedAttributeNames 113 { 114 WKRetainPtr<WKArrayRef> result = adoptWK(m_page->pageOverlayCopyAccessibilityAttributesNames(true)); 115 if (!result) 116 return nil; 117 118 NSMutableArray *names = [NSMutableArray array]; 119 size_t count = WKArrayGetSize(result.get()); 120 for (size_t k = 0; k < count; k++) { 121 WKTypeRef item = WKArrayGetItemAtIndex(result.get(), k); 122 if (toImpl(item)->type() == WKStringGetTypeID()) { 123 RetainPtr<CFStringRef> name = adoptCF(WKStringCopyCFString(kCFAllocatorDefault, (WKStringRef)item)); 124 [names addObject:(NSString *)name.get()]; 125 } 126 } 127 128 return names; 104 129 } 105 130 … … 163 188 } 164 189 190 - (NSPoint)_convertScreenPointToWindow:(NSPoint)point 191 { 192 return m_page->screenToWindow(IntPoint(point.x, point.y)); 193 } 194 195 - (id)accessibilityAttributeValue:(NSString *)attribute forParameter:(id)parameter 196 { 197 WKRetainPtr<WKTypeRef> pageOverlayParameter = 0; 198 199 if ([parameter isKindOfClass:[NSValue class]] && strcmp([(NSValue*)parameter objCType], @encode(NSPoint)) == 0) { 200 NSPoint point = [self _convertScreenPointToWindow:[(NSValue *)parameter pointValue]]; 201 pageOverlayParameter = WKPointCreate(WKPointMake(point.x, point.y)); 202 } 203 204 WKRetainPtr<WKStringRef> attributeRef = adoptWK(WKStringCreateWithCFString((CFStringRef)attribute)); 205 WKRetainPtr<WKTypeRef> result = adoptWK(m_page->pageOverlayCopyAccessibilityAttributeValue(attributeRef.get(), pageOverlayParameter.get())); 206 if (!result) 207 return nil; 208 209 if (toImpl(result.get())->type() == WKStringGetTypeID()) 210 return [(NSString *)WKStringCopyCFString(kCFAllocatorDefault, (WKStringRef)result.get()) autorelease]; 211 else if (toImpl(result.get())->type() == WKBooleanGetTypeID()) 212 return [NSNumber numberWithBool:WKBooleanGetValue(static_cast<WKBooleanRef>(result.get()))]; 213 214 return nil; 215 } 216 165 217 - (BOOL)accessibilityShouldUseUniqueId 166 218 {
Note: See TracChangeset
for help on using the changeset viewer.