Changeset 235259 in webkit


Ignore:
Timestamp:
Aug 23, 2018 4:37:01 PM (6 years ago)
Author:
achristensen@apple.com
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):

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r235251 r235259  
     12018-08-23  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add new _webViewRequestPointerLock SPI with a completionHandler
     4        https://bugs.webkit.org/show_bug.cgi?id=188907
     5        <rdar://problem/35871109>
     6
     7        Reviewed by Andy Estes.
     8
     9        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
     10        * UIProcess/Cocoa/UIDelegate.h:
     11        * UIProcess/Cocoa/UIDelegate.mm:
     12        (WebKit::UIDelegate::setDelegate):
     13        (WebKit::UIDelegate::UIClient::requestPointerLock):
     14
    1152018-08-23  Andy Estes  <aestes@apple.com>
    216
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h

    r235137 r235259  
    9999- (void)_webViewDidExitFullscreen:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.11), ios(8.3));
    100100- (void)_webViewRequestPointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12.3));
     101- (void)_webViewDidRequestPointerLock:(WKWebView *)webView completionHandler:(void (^)(BOOL))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
    101102- (void)_webViewDidLosePointerLock:(WKWebView *)webView WK_API_AVAILABLE(macosx(10.12.3));
    102103- (void)_webView:(WKWebView *)webView hasVideoInPictureInPictureDidChange:(BOOL)hasVideoInPictureInPicture WK_API_AVAILABLE(macosx(10.13), ios(11.0));
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h

    r234157 r235259  
    211211#if ENABLE(POINTER_LOCK)
    212212        bool webViewRequestPointerLock : 1;
     213        bool webViewDidRequestPointerLockCompletionHandler : 1;
    213214        bool webViewDidLosePointerLock : 1;
    214215#endif
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm

    r234964 r235259  
    158158#if ENABLE(POINTER_LOCK)
    159159    m_delegateMethods.webViewRequestPointerLock = [delegate respondsToSelector:@selector(_webViewRequestPointerLock:)];
     160    m_delegateMethods.webViewDidRequestPointerLockCompletionHandler = [delegate respondsToSelector:@selector(_webViewDidRequestPointerLock:completionHandler:)];
    160161    m_delegateMethods.webViewDidLosePointerLock = [delegate respondsToSelector:@selector(_webViewDidLosePointerLock:)];
    161162#endif
     
    11661167#if ENABLE(POINTER_LOCK)
    11671168
    1168 void UIDelegate::UIClient::requestPointerLock(WebPageProxy*)
    1169 {
    1170     if (!m_uiDelegate.m_delegateMethods.webViewRequestPointerLock)
    1171         return;
    1172 
    1173     auto delegate = m_uiDelegate.m_delegate.get();
    1174     if (!delegate)
    1175         return;
    1176 
    1177     [static_cast<id <WKUIDelegatePrivate>>(delegate) _webViewRequestPointerLock:m_uiDelegate.m_webView];
     1169void UIDelegate::UIClient::requestPointerLock(WebPageProxy* page)
     1170{
     1171    if (!m_uiDelegate.m_delegateMethods.webViewRequestPointerLock && !m_uiDelegate.m_delegateMethods.webViewDidRequestPointerLockCompletionHandler)
     1172        return;
     1173
     1174    auto delegate = m_uiDelegate.m_delegate.get();
     1175    if (!delegate)
     1176        return;
     1177
     1178    if (m_uiDelegate.m_delegateMethods.webViewRequestPointerLock) {
     1179        [static_cast<id <WKUIDelegatePrivate>>(delegate) _webViewRequestPointerLock:m_uiDelegate.m_webView];
     1180        return;
     1181    }
     1182
     1183    auto checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webViewDidRequestPointerLock:completionHandler:));
     1184    [static_cast<id <WKUIDelegatePrivate>>(delegate) _webViewDidRequestPointerLock:m_uiDelegate.m_webView completionHandler:BlockPtr<void(BOOL)>::fromCallable([checker = WTFMove(checker), page = makeRefPtr(page)] (BOOL allow) {
     1185        if (checker->completionHandlerHasBeenCalled())
     1186            return;
     1187        checker->didCallCompletionHandler();
     1188
     1189        if (allow)
     1190            page->didAllowPointerLock();
     1191        else
     1192            page->didDenyPointerLock();
     1193    }).get()];
    11781194}
    11791195
  • trunk/Tools/ChangeLog

    r235258 r235259  
     12018-08-23  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add new _webViewRequestPointerLock SPI with a completionHandler
     4        https://bugs.webkit.org/show_bug.cgi?id=188907
     5        <rdar://problem/35871109>
     6
     7        Reviewed by Andy Estes.
     8
     9        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
     10        (-[PointerLockDelegate _webViewRequestPointerLock:completionHandler:]):
     11        (-[PointerLockDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
     12        (TEST):
     13
    1142018-08-23  David Fenton  <david_fenton@apple.com>
    215
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm

    r232549 r235259  
    227227}
    228228
     229@interface PointerLockDelegate : NSObject <WKUIDelegatePrivate>
     230@end
     231
     232@implementation PointerLockDelegate
     233
     234- (void)_webViewDidRequestPointerLock:(WKWebView *)webView completionHandler:(void (^)(BOOL))completionHandler
     235{
     236    completionHandler(YES);
     237    done = true;
     238}
     239
     240@end
     241
     242TEST(WebKit, PointerLock)
     243{
     244    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)]);
     245    auto delegate = adoptNS([[PointerLockDelegate alloc] init]);
     246    [webView setUIDelegate:delegate.get()];
     247    [webView synchronouslyLoadHTMLString:
     248        @"<canvas width='800' height='600'></canvas><script>"
     249        @"var canvas = document.querySelector('canvas');"
     250        @"canvas.onclick = ()=>{canvas.requestPointerLock()};"
     251        @"</script>"
     252    ];
     253    [webView sendClicksAtPoint:NSMakePoint(200, 200) numberOfClicks:1];
     254    TestWebKitAPI::Util::run(&done);
     255}
     256
    229257static bool resizableSet;
    230258
Note: See TracChangeset for help on using the changeset viewer.