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;
}