Title: [221982] trunk
Revision
221982
Author
[email protected]
Date
2017-09-13 11:38:04 -0700 (Wed, 13 Sep 2017)

Log Message

Add WKUIDelegatePrivate equivalent of WKPageUIClient's setIsResizable, getWindowFrame, and setWindowFrame
https://bugs.webkit.org/show_bug.cgi?id=176857
<rdar://problem/29270035>

Reviewed by Tim Horton.

Source/WebKit:

isResizable is unreachable code because nothing sends Messages::WebPageProxy::GetIsResizable, so I removed it.

* UIProcess/API/APIUIClient.h:
(API::UIClient::setStatusBarIsVisible):
(API::UIClient::isResizable): Deleted.
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageUIClient):
* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* UIProcess/API/glib/WebKitUIClient.cpp:
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::setIsResizable):
(WebKit::UIDelegate::UIClient::setWindowFrame):
(WebKit::UIDelegate::UIClient::windowFrame):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::getIsResizable): Deleted.
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
(-[ModalDelegate _webViewRunModal:]):
(-[ModalDelegate _webView:setResizable:]):
(-[WindowFrameDelegate _webView:setWindowFrame:]):
(-[WindowFrameDelegate _webView:getWindowFrameWithCompletionHandler:]):
(-[WindowFrameDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
(TEST):
(-[ResizableDelegate _webView:setResizable:]):
(-[ResizableDelegate _webView:getIsResizableWithCompletionHandler:]):
(-[ResizableDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (221981 => 221982)


--- trunk/Source/WebKit/ChangeLog	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/ChangeLog	2017-09-13 18:38:04 UTC (rev 221982)
@@ -1,3 +1,31 @@
+2017-09-13  Alex Christensen  <[email protected]>
+
+        Add WKUIDelegatePrivate equivalent of WKPageUIClient's setIsResizable, getWindowFrame, and setWindowFrame
+        https://bugs.webkit.org/show_bug.cgi?id=176857
+        <rdar://problem/29270035>
+
+        Reviewed by Tim Horton.
+
+        isResizable is unreachable code because nothing sends Messages::WebPageProxy::GetIsResizable, so I removed it.
+
+        * UIProcess/API/APIUIClient.h:
+        (API::UIClient::setStatusBarIsVisible):
+        (API::UIClient::isResizable): Deleted.
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageSetPageUIClient):
+        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+        * UIProcess/API/glib/WebKitUIClient.cpp:
+        * UIProcess/Cocoa/UIDelegate.h:
+        * UIProcess/Cocoa/UIDelegate.mm:
+        (WebKit::UIDelegate::setDelegate):
+        (WebKit::UIDelegate::UIClient::setIsResizable):
+        (WebKit::UIDelegate::UIClient::setWindowFrame):
+        (WebKit::UIDelegate::UIClient::windowFrame):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::getIsResizable): Deleted.
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+
 2017-09-13  Youenn Fablet  <[email protected]>
 
         Add a lambda-based map for Vectors

Modified: trunk/Source/WebKit/UIProcess/API/APIUIClient.h (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/API/APIUIClient.h	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/API/APIUIClient.h	2017-09-13 18:38:04 UTC (rev 221982)
@@ -102,7 +102,6 @@
     virtual void setMenuBarIsVisible(WebKit::WebPageProxy&, bool) { }
     virtual void statusBarIsVisible(WebKit::WebPageProxy&, Function<void(bool)>&& completionHandler) { completionHandler(true); }
     virtual void setStatusBarIsVisible(WebKit::WebPageProxy&, bool) { }
-    virtual void isResizable(WebKit::WebPageProxy&, Function<void(bool)>&& completionHandler) { completionHandler(true); }
     virtual void setIsResizable(WebKit::WebPageProxy&, bool) { }
 
     virtual void setWindowFrame(WebKit::WebPageProxy&, const WebCore::FloatRect&) { }

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2017-09-13 18:38:04 UTC (rev 221982)
@@ -1874,13 +1874,6 @@
             m_client.setStatusBarIsVisible(toAPI(&page), visible, m_client.base.clientInfo);
         }
 
-        void isResizable(WebPageProxy& page, Function<void(bool)>&& completionHandler) final
-        {
-            if (!m_client.isResizable)
-                return completionHandler(true);
-            completionHandler(m_client.isResizable(toAPI(&page), m_client.base.clientInfo));
-        }
-
         void setIsResizable(WebPageProxy& page, bool resizable) final
         {
             if (!m_client.setIsResizable)

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h	2017-09-13 18:38:04 UTC (rev 221982)
@@ -164,6 +164,9 @@
 - (void)_webView:(WKWebView *)webView requestNotificationPermissionForSecurityOrigin:(WKSecurityOrigin *)securityOrigin decisionHandler:(void (^)(BOOL))decisionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA));
 - (void)_webView:(WKWebView *)webview mouseDidMoveOverElement:(_WKHitTestResult *)hitTestResult withFlags:(NSEventModifierFlags)flags userInfo:(id <NSSecureCoding>)userInfo;
 - (void)_webView:(WKWebView *)webView didExceedBackgroundResourceLimitWhileInForeground:(_WKResourceLimit)limit WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+- (void)_webView:(WKWebView *)webView setResizable:(BOOL)isResizable WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+- (void)_webView:(WKWebView *)webView getWindowFrameWithCompletionHandler:(void (^)(CGRect))completionHandler WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+- (void)_webView:(WKWebView *)webView setWindowFrame:(CGRect)frame WK_API_AVAILABLE(macosx(WK_MAC_TBA));
 - (void)_webView:(WKWebView *)webView unavailablePlugInButtonClickedWithReason:(_WKPlugInUnavailabilityReason)reason plugInInfo:(NSDictionary *)plugInInfo;
 - (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element WK_API_AVAILABLE(macosx(10.12));
 - (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(10.12));

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitUIClient.cpp	2017-09-13 18:38:04 UTC (rev 221982)
@@ -127,11 +127,6 @@
         webkitWindowPropertiesSetStatusbarVisible(webkit_web_view_get_window_properties(m_webView), visible);
     }
 
-    void isResizable(WebPageProxy&, Function<void(bool)>&& completionHandler) final
-    {
-        completionHandler(webkit_window_properties_get_resizable(webkit_web_view_get_window_properties(m_webView)));
-    }
-
     void setIsResizable(WebPageProxy&, bool resizable) final
     {
         webkitWindowPropertiesSetResizable(webkit_web_view_get_window_properties(m_webView), resizable);

Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h	2017-09-13 18:38:04 UTC (rev 221982)
@@ -101,6 +101,9 @@
         bool canRunModal() const final;
         void runModal(WebPageProxy&) final;
         void pageDidScroll(WebPageProxy*) final;
+        void setIsResizable(WebPageProxy&, bool) final;
+        void setWindowFrame(WebPageProxy&, const WebCore::FloatRect&) final;
+        void windowFrame(WebPageProxy&, Function<void(WebCore::FloatRect)>&&) final;
         void didNotHandleWheelEvent(WebPageProxy*, const NativeWebWheelEvent&) final;
         void decidePolicyForNotificationPermissionRequest(WebPageProxy&, API::SecurityOrigin&, Function<void(bool)>&&) final;
         void handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) final;
@@ -157,10 +160,13 @@
         bool webViewRunModal : 1;
         bool webViewTakeFocus : 1;
         bool webViewDidScroll : 1;
+        bool webViewSetResizable : 1;
+        bool webViewSetWindowFrame : 1;
         bool webViewDidNotHandleWheelEvent : 1;
         bool webViewHandleAutoplayEventWithFlags : 1;
         bool webViewUnavailablePlugInButtonClicked : 1;
         bool webViewDidClickAutoFillButtonWithUserInfo : 1;
+        bool webViewGetWindowFrameWithCompletionHandler : 1;
         bool webViewMouseDidMoveOverElementWithFlagsUserInfo : 1;
         bool webViewGetToolbarsAreVisibleWithCompletionHandler : 1;
         bool webViewDidExceedBackgroundResourceLimitWhileInForeground : 1;

Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm	2017-09-13 18:38:04 UTC (rev 221982)
@@ -114,6 +114,9 @@
     m_delegateMethods.webViewDidScroll = [delegate respondsToSelector:@selector(_webViewDidScroll:)];
     m_delegateMethods.webViewGetToolbarsAreVisibleWithCompletionHandler = [delegate respondsToSelector:@selector(_webView:getToolbarsAreVisibleWithCompletionHandler:)];
     m_delegateMethods.webViewDidNotHandleWheelEvent = [delegate respondsToSelector:@selector(_webView:didNotHandleWheelEvent:)];
+    m_delegateMethods.webViewSetResizable = [delegate respondsToSelector:@selector(_webView:setResizable:)];
+    m_delegateMethods.webViewGetWindowFrameWithCompletionHandler = [delegate respondsToSelector:@selector(_webView:getWindowFrameWithCompletionHandler:)];
+    m_delegateMethods.webViewSetWindowFrame = [delegate respondsToSelector:@selector(_webView:setWindowFrame:)];
     m_delegateMethods.webViewUnavailablePlugInButtonClicked = [delegate respondsToSelector:@selector(_webView:unavailablePlugInButtonClickedWithReason:plugInInfo:)];
     m_delegateMethods.webViewHandleAutoplayEventWithFlags = [delegate respondsToSelector:@selector(_webView:handleAutoplayEvent:withFlags:)];
     m_delegateMethods.webViewDidClickAutoFillButtonWithUserInfo = [delegate respondsToSelector:@selector(_webView:didClickAutoFillButtonWithUserInfo:)];
@@ -518,6 +521,47 @@
     [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView didNotHandleWheelEvent:event.nativeEvent()];
 }
 
+void UIDelegate::UIClient::setIsResizable(WebKit::WebPageProxy&, bool resizable)
+{
+    if (!m_uiDelegate.m_delegateMethods.webViewSetResizable)
+        return;
+    
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return;
+    
+    [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView setResizable:resizable];
+}
+
+void UIDelegate::UIClient::setWindowFrame(WebKit::WebPageProxy&, const WebCore::FloatRect& frame)
+{
+    if (!m_uiDelegate.m_delegateMethods.webViewSetWindowFrame)
+        return;
+    
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return;
+    
+    [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView setWindowFrame:frame];
+}
+
+void UIDelegate::UIClient::windowFrame(WebKit::WebPageProxy&, Function<void(WebCore::FloatRect)>&& completionHandler)
+{
+    if (!m_uiDelegate.m_delegateMethods.webViewGetWindowFrameWithCompletionHandler)
+        return completionHandler({ });
+    
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return completionHandler({ });
+    
+    [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView getWindowFrameWithCompletionHandler:BlockPtr<void(CGRect)>::fromCallable([completionHandler = WTFMove(completionHandler), checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:getWindowFrameWithCompletionHandler:))](CGRect frame) {
+        if (checker->completionHandlerHasBeenCalled())
+            return;
+        checker->didCallCompletionHandler();
+        completionHandler(frame);
+    }).get()];
+}
+
 static NSEventModifierFlags toNSEventModifierFlags(WebEvent::Modifiers modifiers)
 {
     NSEventModifierFlags flags = 0;

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-09-13 18:38:04 UTC (rev 221982)
@@ -4092,13 +4092,6 @@
     m_uiClient->setIsResizable(*this, isResizable);
 }
 
-void WebPageProxy::getIsResizable(Ref<Messages::WebPageProxy::GetIsResizable::DelayedReply>&& reply)
-{
-    m_uiClient->isResizable(*this, [reply = WTFMove(reply)] (bool resizable) {
-        reply->send(resizable);
-    });
-}
-
 void WebPageProxy::setWindowFrame(const FloatRect& newWindowFrame)
 {
     m_uiClient->setWindowFrame(*this, m_pageClient.convertToDeviceSpace(newWindowFrame));

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-09-13 18:38:04 UTC (rev 221982)
@@ -1315,7 +1315,6 @@
     void setStatusBarIsVisible(bool statusBarIsVisible);
     void getStatusBarIsVisible(Ref<Messages::WebPageProxy::GetStatusBarIsVisible::DelayedReply>&&);
     void setIsResizable(bool isResizable);
-    void getIsResizable(Ref<Messages::WebPageProxy::GetIsResizable::DelayedReply>&&);
     void screenToRootView(const WebCore::IntPoint& screenPoint, Ref<Messages::WebPageProxy::ScreenToRootView::DelayedReply>&&);
     void rootViewToScreen(const WebCore::IntRect& viewRect, Ref<Messages::WebPageProxy::RootViewToScreen::DelayedReply>&&);
 #if PLATFORM(IOS)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (221981 => 221982)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2017-09-13 18:38:04 UTC (rev 221982)
@@ -57,7 +57,6 @@
     SetStatusBarIsVisible(bool statusBarIsVisible)
     GetStatusBarIsVisible() -> (bool statusBarIsVisible) Delayed
     SetIsResizable(bool isResizable)
-    GetIsResizable() -> (bool isResizable) Delayed
     SetWindowFrame(WebCore::FloatRect windowFrame)
     GetWindowFrame() -> (WebCore::FloatRect windowFrame) Delayed
     ScreenToRootView(WebCore::IntPoint screenPoint) -> (WebCore::IntPoint windowPoint) Delayed

Modified: trunk/Tools/ChangeLog (221981 => 221982)


--- trunk/Tools/ChangeLog	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Tools/ChangeLog	2017-09-13 18:38:04 UTC (rev 221982)
@@ -1,3 +1,22 @@
+2017-09-13  Alex Christensen  <[email protected]>
+
+        Add WKUIDelegatePrivate equivalent of WKPageUIClient's setIsResizable, getWindowFrame, and setWindowFrame
+        https://bugs.webkit.org/show_bug.cgi?id=176857
+        <rdar://problem/29270035>
+
+        Reviewed by Tim Horton.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
+        (-[ModalDelegate _webViewRunModal:]):
+        (-[ModalDelegate _webView:setResizable:]):
+        (-[WindowFrameDelegate _webView:setWindowFrame:]):
+        (-[WindowFrameDelegate _webView:getWindowFrameWithCompletionHandler:]):
+        (-[WindowFrameDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+        (TEST):
+        (-[ResizableDelegate _webView:setResizable:]):
+        (-[ResizableDelegate _webView:getIsResizableWithCompletionHandler:]):
+        (-[ResizableDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+
 2017-09-13  Youenn Fablet  <[email protected]>
 
         Add a lambda-based map for Vectors

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm (221981 => 221982)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm	2017-09-13 18:25:11 UTC (rev 221981)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm	2017-09-13 18:38:04 UTC (rev 221982)
@@ -201,6 +201,8 @@
     ASSERT_EQ(webViewFromDelegateCallback, createdWebView);
 }
 
+static bool resizableSet;
+
 @interface ModalDelegate : NSObject <WKUIDelegatePrivate>
 @end
 
@@ -208,10 +210,17 @@
 
 - (void)_webViewRunModal:(WKWebView *)webView
 {
+    EXPECT_TRUE(resizableSet);
     EXPECT_EQ(webView, createdWebView.get());
     done = true;
 }
 
+- (void)_webView:(WKWebView *)webView setResizable:(BOOL)isResizable
+{
+    EXPECT_FALSE(isResizable);
+    resizableSet = true;
+}
+
 - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
 {
     createdWebView = [[[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration] autorelease];
@@ -233,6 +242,46 @@
     TestWebKitAPI::Util::run(&done);
 }
 
+static bool receivedWindowFrame;
+
+@interface WindowFrameDelegate : NSObject <WKUIDelegatePrivate>
+@end
+
+@implementation WindowFrameDelegate
+
+- (void)_webView:(WKWebView *)webView setWindowFrame:(CGRect)frame
+{
+    EXPECT_EQ(frame.origin.x, 160);
+    EXPECT_EQ(frame.origin.y, 230);
+    EXPECT_EQ(frame.size.width, 350);
+    EXPECT_EQ(frame.size.height, 450);
+    receivedWindowFrame = true;
+}
+
+- (void)_webView:(WKWebView *)webView getWindowFrameWithCompletionHandler:(void (^)(CGRect))completionHandler
+{
+    completionHandler(CGRectMake(150, 250, 350, 450));
+}
+
+- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
+{
+    EXPECT_STREQ("350", message.UTF8String);
+    completionHandler();
+    done = true;
+}
+
+@end
+
+TEST(WebKit, WindowFrame)
+{
+    auto delegate = adoptNS([[WindowFrameDelegate alloc] init]);
+    auto webView = adoptNS([[WKWebView alloc] init]);
+    [webView setUIDelegate:delegate.get()];
+    [webView loadHTMLString:@"<script>moveBy(10,20);alert(outerWidth);</script>" baseURL:nil];
+    TestWebKitAPI::Util::run(&receivedWindowFrame);
+    TestWebKitAPI::Util::run(&done);
+}
+
 @interface NotificationDelegate : NSObject <WKUIDelegatePrivate> {
     bool _allowNotifications;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to