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

Reply via email to