Source/WebKit2/ChangeLog

 12017-01-20 Nan Wang <n_wang@apple.com>
 2
 3 AX: Speak Selection does not work in an iframe
 4 https://bugs.webkit.org/show_bug.cgi?id=166794
 5 <rdar://problem/29913013>
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 Making sure WebPage::getSelectionOrContentsAsString() is getting the
 10 selection content in the right frame.
 11
 12 * UIProcess/API/Cocoa/WKWebView.mm:
 13 (-[WKWebView _accessibilityRetrieveSpeakSelectionContent]):
 14 (-[WKWebView _accessibilityDidGetSpeakSelectionContent:]):
 15 * UIProcess/API/Cocoa/WKWebViewInternal.h:
 16 * UIProcess/ios/WKContentViewInteraction.h:
 17 * UIProcess/ios/WKContentViewInteraction.mm:
 18 (-[WKContentView accessibilityRetrieveSpeakSelectionContent]):
 19 * WebProcess/WebPage/WebPage.cpp:
 20 (WebKit::WebPage::getSelectionOrContentsAsString):
 21
1222017-01-20 Antoine Quint <graouts@apple.com>
223
324 [Modern Media Controls] Turn modern media controls on by default
210974

Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

@@- (void)_navigationGestureDidEnd
23242324 _frozenUnobscuredContentRect = std::nullopt;
23252325}
23262326
 2327- (void)_accessibilityRetrieveSpeakSelectionContent
 2328{
 2329 [_contentView accessibilityRetrieveSpeakSelectionContent];
 2330}
 2331
 2332- (void)_accessibilityDidGetSpeakSelectionContent:(NSString *)content
 2333{
 2334}
 2335
23272336#endif // PLATFORM(IOS)
23282337
23292338#pragma mark OS X-specific methods
210974

Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h

@@struct PrintInfo;
115115- (void)_navigationGestureDidBegin;
116116- (void)_navigationGestureDidEnd;
117117
 118- (void)_accessibilityDidGetSpeakSelectionContent:(NSString *)content;
 119
118120@property (nonatomic, readonly) BOOL _isBackground;
119121
120122@property (nonatomic, readonly) WKWebViewContentProviderRegistry *_contentProviderRegistry;
210974

Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h

@@struct WKAutoCorrectionData {
231231- (void)_setDoubleTapGesturesEnabled:(BOOL)enabled;
232232- (NSArray *)_dataDetectionResults;
233233- (NSArray<NSValue *> *)_uiTextSelectionRects;
 234- (void)accessibilityRetrieveSpeakSelectionContent;
234235@end
235236
236237@interface WKContentView (WKTesting)
210974

Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm

@@- (void)_define:(id)sender
20902090- (void)accessibilityRetrieveSpeakSelectionContent
20912091{
20922092 RetainPtr<WKContentView> view = self;
2093  _page->getSelectionOrContentsAsString([view](const String& string, WebKit::CallbackBase::Error error) {
 2093 RetainPtr<WKWebView> webView = _webView;
 2094 _page->getSelectionOrContentsAsString([view, webView](const String& string, WebKit::CallbackBase::Error error) {
20942095 if (error != WebKit::CallbackBase::Error::None)
20952096 return;
 2097 [webView _accessibilityDidGetSpeakSelectionContent:string];
20962098 if ([view respondsToSelector:@selector(accessibilitySpeakSelectionSetContent:)])
20972099 [view accessibilitySpeakSelectionSetContent:string];
20982100 });
210974

Source/WebKit2/WebProcess/WebPage/WebPage.cpp

@@void WebPage::getSelectionAsWebArchiveDa
28322832
28332833void WebPage::getSelectionOrContentsAsString(uint64_t callbackID)
28342834{
2835  String resultString = m_mainFrame->selectionAsString();
 2835 WebFrame* focusedOrMainFrame = WebFrame::fromCoreFrame(m_page->focusController().focusedOrMainFrame());
 2836 String resultString = focusedOrMainFrame->selectionAsString();
28362837 if (resultString.isEmpty())
2837  resultString = m_mainFrame->contentsAsString();
 2838 resultString = focusedOrMainFrame->contentsAsString();
28382839 send(Messages::WebPageProxy::StringCallback(resultString, callbackID));
28392840}
28402841
210974

Tools/ChangeLog

 12017-01-20 Nan Wang <n_wang@apple.com>
 2
 3 AX: Speak Selection does not work in an iframe
 4 https://bugs.webkit.org/show_bug.cgi?id=166794
 5 <rdar://problem/29913013>
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * DumpRenderTree/ios/UIScriptControllerIOS.mm:
 10 (WTR::UIScriptController::retrieveSpeakSelectionContent):
 11 (WTR::UIScriptController::accessibilitySpeakSelectionContent):
 12 * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
 13 * TestRunnerShared/UIScriptContext/UIScriptController.cpp:
 14 (WTR::UIScriptController::retrieveSpeakSelectionContent):
 15 (WTR::UIScriptController::accessibilitySpeakSelectionContent):
 16 * TestRunnerShared/UIScriptContext/UIScriptController.h:
 17 * WebKitTestRunner/cocoa/TestRunnerWKWebView.h:
 18 * WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:
 19 (-[TestRunnerWKWebView dealloc]):
 20 (-[TestRunnerWKWebView _accessibilityDidGetSpeakSelectionContent:]):
 21 (-[TestRunnerWKWebView accessibilityRetrieveSpeakSelectionContentWithCompletionHandler:]):
 22 * WebKitTestRunner/ios/UIScriptControllerIOS.mm:
 23 (WTR::UIScriptController::retrieveSpeakSelectionContent):
 24 (WTR::UIScriptController::accessibilitySpeakSelectionContent):
 25
1262017-01-20 Youenn Fablet <youenn@apple.com>
227
328 [WebRTC] Add libwebrtc build infrastructure
210974

Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm

@@JSRetainPtr<JSStringRef> UIScriptControl
289289 return nullptr;
290290}
291291
 292void UIScriptController::retrieveSpeakSelectionContent(JSValueRef)
 293{
 294}
 295
 296JSRetainPtr<JSStringRef> UIScriptController::accessibilitySpeakSelectionContent() const
 297{
 298 return nullptr;
 299}
 300
292301}
293302
294303#endif // PLATFORM(IOS)
210974

Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp

@@void UIScriptController::platformSetDidH
375375void UIScriptController::platformClearAllCallbacks()
376376{
377377}
 378
 379void UIScriptController::retrieveSpeakSelectionContent(JSValueRef)
 380{
 381}
 382
 383JSRetainPtr<JSStringRef> UIScriptController::accessibilitySpeakSelectionContent() const
 384{
 385 return nullptr;
 386}
 387
378388#endif
379389
380390#if !PLATFORM(MAC)
210974

Tools/TestRunnerShared/UIScriptContext/UIScriptController.h

@@public:
139139 JSRetainPtr<JSStringRef> scrollingTreeAsText() const;
140140
141141 void uiScriptComplete(JSStringRef result);
 142
 143 void retrieveSpeakSelectionContent(JSValueRef callback);
 144 JSRetainPtr<JSStringRef> accessibilitySpeakSelectionContent() const;
142145
143146private:
144147 UIScriptController(UIScriptContext&);
210974

Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl

@@interface UIScriptController {
214214 readonly attribute DOMString scrollingTreeAsText;
215215
216216 void uiScriptComplete(DOMString result);
 217
 218 void retrieveSpeakSelectionContent(object callback);
 219 readonly attribute DOMString accessibilitySpeakSelectionContent;
217220};
210974

Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.h

4040@property (nonatomic, copy) void (^didShowKeyboardCallback)(void);
4141@property (nonatomic, copy) void (^didHideKeyboardCallback)(void);
4242@property (nonatomic, copy) void (^didEndScrollingCallback)(void);
 43@property (nonatomic, copy) NSString *accessibilitySpeakSelectionContent;
4344
4445- (void)zoomToScale:(double)scale animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler;
 46- (void)accessibilityRetrieveSpeakSelectionContentWithCompletionHandler:(void (^)(void))completionHandler;
 47
4548#endif
4649
4750@property (nonatomic, retain, setter=_setStableStateOverride:) NSNumber *_stableStateOverride;
210974

Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm

2626#import "config.h"
2727#import "TestRunnerWKWebView.h"
2828
 29#import <JavaScriptCore/JSStringRefCF.h>
2930#import "WebKitTestRunnerDraggingInfo.h"
3031#import <wtf/Assertions.h>
3132#import <wtf/RetainPtr.h>

@@- (void)scrollViewWillBeginZooming:(UISc
3839- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale;
3940- (void)_didFinishScrolling;
4041- (void)_updateVisibleContentRects;
 42- (void)_accessibilityRetrieveSpeakSelectionContent;
4143
4244@end
4345#endif

@@@interface TestRunnerWKWebView () {
5052
5153@property (nonatomic, copy) void (^zoomToScaleCompletionHandler)(void);
5254@property (nonatomic, copy) void (^showKeyboardCompletionHandler)(void);
 55@property (nonatomic, copy) void (^retrieveSpeakSelectionContentCompletionHandler)(void);
5356@property (nonatomic) BOOL isShowingKeyboard;
5457
5558@end

@@- (void)dealloc
9194
9295 self.zoomToScaleCompletionHandler = nil;
9396 self.showKeyboardCompletionHandler = nil;
 97 self.retrieveSpeakSelectionContentCompletionHandler = nil;
9498
9599 [super dealloc];
96100}

@@- (void)_setStableStateOverride:(NSNumbe
187191 [self _updateVisibleContentRects];
188192}
189193
 194- (void)_accessibilityDidGetSpeakSelectionContent:(NSString *)content
 195{
 196 self.accessibilitySpeakSelectionContent = content;
 197 if (self.retrieveSpeakSelectionContentCompletionHandler)
 198 self.retrieveSpeakSelectionContentCompletionHandler();
 199}
 200
 201- (void)accessibilityRetrieveSpeakSelectionContentWithCompletionHandler:(void (^)(void))completionHandler
 202{
 203 self.retrieveSpeakSelectionContentCompletionHandler = completionHandler;
 204 [self _accessibilityRetrieveSpeakSelectionContent];
 205}
 206
190207#endif
191208
192209@end
210974

Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm

@@void UIScriptController::zoomToScale(dou
107107 }];
108108}
109109
 110void UIScriptController::retrieveSpeakSelectionContent(JSValueRef callback)
 111{
 112 TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
 113
 114 unsigned callbackID = m_context->prepareForAsyncTask(callback, CallbackTypeNonPersistent);
 115
 116 [webView accessibilityRetrieveSpeakSelectionContentWithCompletionHandler:^(void) {
 117 if (!m_context)
 118 return;
 119 m_context->asyncTaskComplete(callbackID);
 120 }];
 121}
 122
 123JSRetainPtr<JSStringRef> UIScriptController::accessibilitySpeakSelectionContent() const
 124{
 125 TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView();
 126 return JSStringCreateWithCFString((CFStringRef)webView.accessibilitySpeakSelectionContent);
 127}
 128
110129void UIScriptController::simulateAccessibilitySettingsChangeNotification(JSValueRef callback)
111130{
112131 unsigned callbackID = m_context->prepareForAsyncTask(callback, CallbackTypeNonPersistent);
210974

LayoutTests/ChangeLog

 12017-01-20 Nan Wang <n_wang@apple.com>
 2
 3 AX: Speak Selection does not work in an iframe
 4 https://bugs.webkit.org/show_bug.cgi?id=166794
 5 <rdar://problem/29913013>
 6
 7 Reviewed by NOBODY (OOPS!).
 8
 9 * accessibility/ios-simulator/speak-selection-content-expected.txt: Added.
 10 * accessibility/ios-simulator/speak-selection-content.html: Added.
 11 * platform/ios-simulator-wk1/TestExpectations:
 12
1132017-01-20 Antoine Quint <graouts@apple.com>
214
315 [Modern Media Controls] Turn modern media controls on by default
210974

LayoutTests/accessibility/ios-simulator/speak-selection-content-expected.txt

 1This test has to run in iOS WebKitTestRunner.
 2
 3
 4This tests that accessibility speak selection content is correct.
 5
 6On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 7
 8
 9Content: Text outside iframe
 10Content: Text inside iframe
 11PASS successfullyParsed is true
 12
 13TEST COMPLETE
 14
nonexistent

LayoutTests/accessibility/ios-simulator/speak-selection-content.html

 1<!DOCTYPE html>
 2<html>
 3<head>
 4<script src="../../resources/js-test-pre.js"></script>
 5<script id="ui-script" type="text/plain">
 6 (function() {
 7 uiController.retrieveSpeakSelectionContent(function() {
 8 uiController.uiScriptComplete(uiController.accessibilitySpeakSelectionContent);
 9 });
 10 })();
 11</script>
 12</head>
 13
 14<body onload="runTest();">
 15<p id="result">This test has to run in iOS WebKitTestRunner.</p>
 16
 17<input type="text" id="myText" value="Text outside iframe">
 18<iframe id="frame" srcdoc="<html><body><input id='myText2' type='text' value='Text inside iframe'></body></html>"></iframe>
 19
 20<p id="description"></p>
 21<div id="console"></div>
 22
 23<script>
 24 description("This tests that accessibility speak selection content is correct.");
 25
 26 if (window.testRunner) {
 27 window.jsTestIsAsync = true;
 28 }
 29
 30 function runTest()
 31 {
 32 var input1 = document.getElementById("myText");
 33 selectInputContent(input1);
 34
 35 if (testRunner.runUIScript) {
 36 var uiScript = document.getElementById('ui-script').text;
 37 testRunner.runUIScript(uiScript, function(result) {
 38 debug("Content: " + result);
 39 testInsideFrame();
 40 });
 41 }
 42 }
 43
 44 function testInsideFrame()
 45 {
 46 var iframeDocument = document.getElementById('frame').contentWindow.document;
 47 var input2 = iframeDocument.getElementById("myText2");
 48 selectInputContent(input2);
 49 if (testRunner.runUIScript) {
 50 var uiScript = document.getElementById('ui-script').text;
 51 testRunner.runUIScript(uiScript, function(result) {
 52 debug("Content: " + result);
 53 finishJSTest();
 54 });
 55 }
 56 }
 57
 58 function selectInputContent(input) {
 59 input.focus();
 60 input.selectionStart = 0;
 61 input.selectionEnd = 100;
 62 }
 63</script>
 64
 65<script src="../../resources/js-test-post.js"></script>
 66</body>
 67</html>
nonexistent

LayoutTests/platform/ios-simulator-wk1/TestExpectations

@@editing/unsupported-content/table-type-b
105105# Zooming works differently in iOS DRT
106106fast/zooming/uiscript-zooming.html [ Failure ]
107107
 108# Not support on WK1
 109accessibility/ios-simulator/speak-selection-content.html [ Skip ]
 110
108111# FIXME: Tests that fail due to lack of textInputController <rdar://problem/5106287>
109112editing/inserting/insert-composition-whitespace.html [ Failure ]
110113
210974