Title: [235259] trunk
- Revision
- 235259
- Author
- [email protected]
- Date
- 2018-08-23 16:37:01 -0700 (Thu, 23 Aug 2018)
Log Message
Add new _webViewRequestPointerLock SPI with a completionHandler
https://bugs.webkit.org/show_bug.cgi?id=188907
<rdar://problem/35871109>
Reviewed by Andy Estes.
Source/WebKit:
* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::requestPointerLock):
Tools:
* TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
(-[PointerLockDelegate _webViewRequestPointerLock:completionHandler:]):
(-[PointerLockDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
(TEST):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (235258 => 235259)
--- trunk/Source/WebKit/ChangeLog 2018-08-23 23:36:02 UTC (rev 235258)
+++ trunk/Source/WebKit/ChangeLog 2018-08-23 23:37:01 UTC (rev 235259)
@@ -1,3 +1,17 @@
+2018-08-23 Alex Christensen <[email protected]>
+
+ Add new _webViewRequestPointerLock SPI with a completionHandler
+ https://bugs.webkit.org/show_bug.cgi?id=188907
+ <rdar://problem/35871109>
+
+ Reviewed by Andy Estes.
+
+ * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+ * UIProcess/Cocoa/UIDelegate.h:
+ * UIProcess/Cocoa/UIDelegate.mm:
+ (WebKit::UIDelegate::setDelegate):
+ (WebKit::UIDelegate::UIClient::requestPointerLock):
+
2018-08-23 Andy Estes <[email protected]>
[Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (235258 => 235259)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2018-08-23 23:36:02 UTC (rev 235258)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2018-08-23 23:37:01 UTC (rev 235259)
@@ -98,6 +98,7 @@
- (void)_webViewDidEnterFullscreen:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.11), ios(8.3));
- (void)_webViewDidExitFullscreen:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.11), ios(8.3));
- (void)_webViewRequestPointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12.3));
+- (void)_webViewDidRequestPointerLock:(WKWebView *)webView completionHandler:(void (^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
- (void)_webViewDidLosePointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12.3));
- (void)_webView:(WKWebView *)webView hasVideoInPictureInPictureDidChange:(BOOL)hasVideoInPictureInPicture WK_API_AVAILABLE(macosx(10.13), ios(11.0));
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (235258 => 235259)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2018-08-23 23:36:02 UTC (rev 235258)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2018-08-23 23:37:01 UTC (rev 235259)
@@ -210,6 +210,7 @@
bool webViewImageOrMediaDocumentSizeChanged : 1;
#if ENABLE(POINTER_LOCK)
bool webViewRequestPointerLock : 1;
+ bool webViewDidRequestPointerLockCompletionHandler : 1;
bool webViewDidLosePointerLock : 1;
#endif
#if ENABLE(CONTEXT_MENUS)
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (235258 => 235259)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2018-08-23 23:36:02 UTC (rev 235258)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2018-08-23 23:37:01 UTC (rev 235259)
@@ -157,6 +157,7 @@
#if ENABLE(POINTER_LOCK)
m_delegateMethods.webViewRequestPointerLock = [delegate respondsToSelector:@selector(_webViewRequestPointerLock:)];
+ m_delegateMethods.webViewDidRequestPointerLockCompletionHandler = [delegate respondsToSelector:@selector(_webViewDidRequestPointerLock:completionHandler:)];
m_delegateMethods.webViewDidLosePointerLock = [delegate respondsToSelector:@selector(_webViewDidLosePointerLock:)];
#endif
#if ENABLE(CONTEXT_MENUS)
@@ -1165,9 +1166,9 @@
#if ENABLE(POINTER_LOCK)
-void UIDelegate::UIClient::requestPointerLock(WebPageProxy*)
+void UIDelegate::UIClient::requestPointerLock(WebPageProxy* page)
{
- if (!m_uiDelegate.m_delegateMethods.webViewRequestPointerLock)
+ if (!m_uiDelegate.m_delegateMethods.webViewRequestPointerLock && !m_uiDelegate.m_delegateMethods.webViewDidRequestPointerLockCompletionHandler)
return;
auto delegate = m_uiDelegate.m_delegate.get();
@@ -1174,7 +1175,22 @@
if (!delegate)
return;
- [static_cast<id <WKUIDelegatePrivate>>(delegate) _webViewRequestPointerLock:m_uiDelegate.m_webView];
+ if (m_uiDelegate.m_delegateMethods.webViewRequestPointerLock) {
+ [static_cast<id <WKUIDelegatePrivate>>(delegate) _webViewRequestPointerLock:m_uiDelegate.m_webView];
+ return;
+ }
+
+ auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webViewDidRequestPointerLock:completionHandler:));
+ [static_cast<id <WKUIDelegatePrivate>>(delegate) _webViewDidRequestPointerLock:m_uiDelegate.m_webView completionHandler:BlockPtr<void(BOOL)>::fromCallable([checker = WTFMove(checker), page = makeRefPtr(page)] (BOOL allow) {
+ if (checker->completionHandlerHasBeenCalled())
+ return;
+ checker->didCallCompletionHandler();
+
+ if (allow)
+ page->didAllowPointerLock();
+ else
+ page->didDenyPointerLock();
+ }).get()];
}
void UIDelegate::UIClient::didLosePointerLock(WebPageProxy*)
Modified: trunk/Tools/ChangeLog (235258 => 235259)
--- trunk/Tools/ChangeLog 2018-08-23 23:36:02 UTC (rev 235258)
+++ trunk/Tools/ChangeLog 2018-08-23 23:37:01 UTC (rev 235259)
@@ -1,3 +1,16 @@
+2018-08-23 Alex Christensen <[email protected]>
+
+ Add new _webViewRequestPointerLock SPI with a completionHandler
+ https://bugs.webkit.org/show_bug.cgi?id=188907
+ <rdar://problem/35871109>
+
+ Reviewed by Andy Estes.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
+ (-[PointerLockDelegate _webViewRequestPointerLock:completionHandler:]):
+ (-[PointerLockDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+ (TEST):
+
2018-08-23 David Fenton <[email protected]>
Unreviewed, rolling out r235129.
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm (235258 => 235259)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm 2018-08-23 23:36:02 UTC (rev 235258)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm 2018-08-23 23:37:01 UTC (rev 235259)
@@ -226,6 +226,34 @@
ASSERT_EQ(webViewFromDelegateCallback, createdWebView);
}
+@interface PointerLockDelegate : NSObject <WKUIDelegatePrivate>
+@end
+
+@implementation PointerLockDelegate
+
+- (void)_webViewDidRequestPointerLock:(WKWebView *)webView completionHandler:(void (^)(BOOL))completionHandler
+{
+ completionHandler(YES);
+ done = true;
+}
+
+@end
+
+TEST(WebKit, PointerLock)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)]);
+ auto delegate = adoptNS([[PointerLockDelegate alloc] init]);
+ [webView setUIDelegate:delegate.get()];
+ [webView synchronouslyLoadHTMLString:
+ @"<canvas width='800' height='600'></canvas><script>"
+ @"var canvas = document.querySelector('canvas');"
+ @"canvas._onclick_ = ()=>{canvas.requestPointerLock()};"
+ @"</script>"
+ ];
+ [webView sendClicksAtPoint:NSMakePoint(200, 200) numberOfClicks:1];
+ TestWebKitAPI::Util::run(&done);
+}
+
static bool resizableSet;
@interface ModalDelegate : NSObject <WKUIDelegatePrivate>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes