Diff
Modified: trunk/Source/WebKit/ChangeLog (221432 => 221433)
--- trunk/Source/WebKit/ChangeLog 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Source/WebKit/ChangeLog 2017-08-31 19:20:36 UTC (rev 221433)
@@ -1,3 +1,19 @@
+2017-08-30 Alex Christensen <achristen...@webkit.org>
+
+ Add WKUIDelegatePrivate equivalent of WKPageUIClient's didClickAutoFillButton
+ https://bugs.webkit.org/show_bug.cgi?id=176139
+ <rdar://problem/29270035>
+
+ Reviewed by Tim Horton.
+
+ Covered by a cool new API test!
+
+ * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+ * UIProcess/Cocoa/UIDelegate.h:
+ * UIProcess/Cocoa/UIDelegate.mm:
+ (WebKit::UIDelegate::setDelegate):
+ (WebKit::UIDelegate::UIClient::didClickAutoFillButton):
+
2017-08-31 Chris Dumez <cdu...@apple.com>
Use WTF::crossThreadCopy() in more places
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (221432 => 221433)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2017-08-31 19:20:36 UTC (rev 221433)
@@ -149,6 +149,7 @@
- (void)_webView:(WKWebView *)webView takeFocus:(_WKFocusDirection)direction WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView didNotHandleWheelEvent:(NSEvent *)event WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView handleAutoplayEvent:(_WKAutoplayEvent)event withFlags:(_WKAutoplayEventFlags)flags WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+- (void)_webView:(WKWebView *)webView didClickAutoFillButtonWithUserInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView saveDataToFile:(NSData *)data suggestedFilename:(NSString *)suggestedFilename mimeType:(NSString *)mimeType originatingURL:(NSURL *)url WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (void)_webView:(WKWebView *)webView didExceedBackgroundResourceLimitWhileInForeground:(_WKResourceLimit)limit WK_API_AVAILABLE(macosx(WK_MAC_TBA));
- (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element WK_API_AVAILABLE(macosx(10.12));
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (221432 => 221433)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h 2017-08-31 19:20:36 UTC (rev 221433)
@@ -102,6 +102,7 @@
void unfocus(WebPageProxy*) final;
void didNotHandleWheelEvent(WebPageProxy*, const NativeWebWheelEvent&) final;
void handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) final;
+ void didClickAutoFillButton(WebPageProxy&, API::Object*) final;
bool runOpenPanel(WebPageProxy*, WebFrameProxy*, const WebCore::SecurityOriginData&, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) final;
void didExceedBackgroundResourceLimitWhileInForeground(WebPageProxy&, WKResourceLimit) final;
void saveDataToFileInDownloadsFolder(WebPageProxy*, const WTF::String&, const WTF::String&, const WebCore::URL&, API::Data&) final;
@@ -150,6 +151,7 @@
bool webViewTakeFocus : 1;
bool webViewDidNotHandleWheelEvent : 1;
bool webViewHandleAutoplayEventWithFlags : 1;
+ bool webViewDidClickAutoFillButtonWithUserInfo : 1;
bool webViewDidExceedBackgroundResourceLimitWhileInForeground : 1;
bool webViewSaveDataToFileSuggestedFilenameMimeTypeOriginatingURL : 1;
bool webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler : 1;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (221432 => 221433)
--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm 2017-08-31 19:20:36 UTC (rev 221433)
@@ -108,6 +108,7 @@
m_delegateMethods.webViewTakeFocus = [delegate respondsToSelector:@selector(_webView:takeFocus:)];
m_delegateMethods.webViewDidNotHandleWheelEvent = [delegate respondsToSelector:@selector(_webView:didNotHandleWheelEvent:)];
m_delegateMethods.webViewHandleAutoplayEventWithFlags = [delegate respondsToSelector:@selector(_webView:handleAutoplayEvent:withFlags:)];
+ m_delegateMethods.webViewDidClickAutoFillButtonWithUserInfo = [delegate respondsToSelector:@selector(_webView:didClickAutoFillButtonWithUserInfo:)];
m_delegateMethods.webViewDidExceedBackgroundResourceLimitWhileInForeground = [delegate respondsToSelector:@selector(_webView:didExceedBackgroundResourceLimitWhileInForeground:)];
m_delegateMethods.webViewSaveDataToFileSuggestedFilenameMimeTypeOriginatingURL = [delegate respondsToSelector:@selector(_webView:saveDataToFile:suggestedFilename:mimeType:originatingURL:)];
m_delegateMethods.webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler = [delegate respondsToSelector:@selector(webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:)];
@@ -489,6 +490,18 @@
return _WKAutoplayEventDidPlayMediaPreventedFromAutoplaying;
}
+void UIDelegate::UIClient::didClickAutoFillButton(WebPageProxy&, API::Object* userInfo)
+{
+ if (!m_uiDelegate.m_delegateMethods.webViewDidClickAutoFillButtonWithUserInfo)
+ return;
+
+ auto delegate = m_uiDelegate.m_delegate.get();
+ if (!delegate)
+ return;
+
+ [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView didClickAutoFillButtonWithUserInfo:userInfo ?static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil];
+}
+
void UIDelegate::UIClient::handleAutoplayEvent(WebKit::WebPageProxy&, WebCore::AutoplayEvent event, OptionSet<WebCore::AutoplayEventFlags> flags)
{
if (!m_uiDelegate.m_delegateMethods.webViewHandleAutoplayEventWithFlags)
Modified: trunk/Tools/ChangeLog (221432 => 221433)
--- trunk/Tools/ChangeLog 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Tools/ChangeLog 2017-08-31 19:20:36 UTC (rev 221433)
@@ -1,3 +1,20 @@
+2017-08-30 Alex Christensen <achristen...@webkit.org>
+
+ Add WKUIDelegatePrivate equivalent of WKPageUIClient's didClickAutoFillButton
+ https://bugs.webkit.org/show_bug.cgi?id=176139
+ <rdar://problem/29270035>
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/Tests/WebKitCocoa/ClickAutoFillButton.mm: Added.
+ (didClickAutoFillButton):
+ (-[ClickAutoFillButton webProcessPlugIn:didCreateBrowserContextController:]):
+ * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
+ (-[AutoFillDelegate _webView:didClickAutoFillButtonWithUserInfo:]):
+ (-[AutoFillDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
+ (TEST):
+
2017-08-31 Carlos Garcia Campos <cgar...@igalia.com>
[GTK] Several InputMethodFilter tests are failing and crashing
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (221432 => 221433)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2017-08-31 19:20:36 UTC (rev 221433)
@@ -234,6 +234,7 @@
5C9E59411D3EB5AC00E3C62E /* ApplicationCache.db in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */; };
5C9E59421D3EB5AC00E3C62E /* ApplicationCache.db-shm in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */; };
5C9E59431D3EB5AC00E3C62E /* ApplicationCache.db-wal in Copy Resources */ = {isa = PBXBuildFile; fileRef = 5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */; };
+ 5CB18BA81F5645E300EE23C4 /* ClickAutoFillButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */; };
5CB40B4E1F4B98D3007DC7B9 /* UIDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */; };
5CE354D91E70DA5C00BEFE3B /* WKContentExtensionStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CE354D81E70D9C300BEFE3B /* WKContentExtensionStore.mm */; };
5E4B1D2E1D404C6100053621 /* WKScrollViewDelegateCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */; };
@@ -1312,6 +1313,7 @@
5C9E593E1D3EB1DE00E3C62E /* ApplicationCache.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = ApplicationCache.db; sourceTree = "<group>"; };
5C9E593F1D3EB1DE00E3C62E /* ApplicationCache.db-shm */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-shm"; sourceTree = "<group>"; };
5C9E59401D3EB1DE00E3C62E /* ApplicationCache.db-wal */ = {isa = PBXFileReference; lastKnownFileType = file; path = "ApplicationCache.db-wal"; sourceTree = "<group>"; };
+ 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ClickAutoFillButton.mm; sourceTree = "<group>"; };
5CB40B4D1F4B98BE007DC7B9 /* UIDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UIDelegate.mm; sourceTree = "<group>"; };
5CE354D81E70D9C300BEFE3B /* WKContentExtensionStore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKContentExtensionStore.mm; sourceTree = "<group>"; };
5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKScrollViewDelegateCrash.mm; path = ../ios/WKScrollViewDelegateCrash.mm; sourceTree = "<group>"; };
@@ -1897,6 +1899,7 @@
37A709AC1E3EA7E800CA5969 /* BundleRangeHandleProtocol.h */,
1C2B817E1C891E4200A5529F /* CancelFontSubresource.mm */,
1C2B81811C891EFA00A5529F /* CancelFontSubresourcePlugIn.mm */,
+ 5CB18BA71F5645B200EE23C4 /* ClickAutoFillButton.mm */,
1AAD19F51C7CE20300831E47 /* Coding.mm */,
7C3DB8E21D12129B00AE8CC3 /* CommandBackForward.mm */,
A18AA8CC1C3FA218009B2B97 /* ContentFiltering.h */,
@@ -3435,6 +3438,7 @@
A13EBBB01B87436F00097110 /* BundleParametersPlugIn.mm in Sources */,
37A709AF1E3EA97E00CA5969 /* BundleRangeHandlePlugIn.mm in Sources */,
1C2B81831C891F0900A5529F /* CancelFontSubresourcePlugIn.mm in Sources */,
+ 5CB18BA81F5645E300EE23C4 /* ClickAutoFillButton.mm in Sources */,
A14FC58B1B89927100D107EB /* ContentFilteringPlugIn.mm in Sources */,
A13EBBAB1B87434600097110 /* PlatformUtilitiesCocoa.mm in Sources */,
1A4F81CF1BDFFD53004E672E /* RemoteObjectRegistryPlugIn.mm in Sources */,
Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ClickAutoFillButton.mm (0 => 221433)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ClickAutoFillButton.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ClickAutoFillButton.mm 2017-08-31 19:20:36 UTC (rev 221433)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+
+#if WK_API_ENABLED
+
+#import <WebKit/WKBundleNodeHandlePrivate.h>
+#import <WebKit/WKBundlePage.h>
+#import <WebKit/WKBundlePageUIClient.h>
+#import <WebKit/WKDOMDocument.h>
+#import <WebKit/WKDOMElement.h>
+#import <WebKit/WKDOMNodePrivate.h>
+#import <WebKit/WKDOMText.h>
+#import <WebKit/WKString.h>
+#import <WebKit/WKWebProcessPlugIn.h>
+#import <WebKit/WKWebProcessPlugInBrowserContextControllerPrivate.h>
+#import <WebKit/WKWebProcessPlugInFrame.h>
+#import <WebKit/WKWebProcessPlugInScriptWorld.h>
+
+void didClickAutoFillButton(WKBundlePageRef, WKBundleNodeHandleRef, WKTypeRef* userData, const void *)
+{
+ *userData = WKStringCreateWithUTF8CString("user data string");
+}
+
+@interface ClickAutoFillButton : NSObject <WKWebProcessPlugIn>
+@end
+
+@implementation ClickAutoFillButton
+
+- (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController didCreateBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController
+{
+ WKBundlePageUIClientV3 client;
+ memset(&client, 0, sizeof(client));
+ client.base.version = 3;
+ client.didClickAutoFillButton = didClickAutoFillButton;
+ WKBundlePageSetUIClient([browserContextController _bundlePageRef], &client.base);
+
+ WKDOMDocument *document = [browserContextController mainFrameDocument];
+ WKDOMElement *inputElement = [document createElement:@"input"];
+ [[document body] appendChild:inputElement];
+ WKBundleNodeHandleRef node = [inputElement _copyBundleNodeHandleRef];
+ WKBundleNodeHandleSetHTMLInputElementAutofilled(node, true);
+ WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(node, kWKAutoFillButtonTypeContacts);
+ [[[browserContextController mainFrame] jsContextForWorld:[WKWebProcessPlugInScriptWorld normalWorld]] evaluateScript:@"alert('ready for click!')"];
+}
+
+@end
+
+#endif // WK_API_ENABLED
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm (221432 => 221433)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm 2017-08-31 19:05:18 UTC (rev 221432)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm 2017-08-31 19:20:36 UTC (rev 221433)
@@ -31,6 +31,7 @@
#import "TestWKWebView.h"
#import "Utilities.h"
+#import "WKWebViewConfigurationExtras.h"
#import <Carbon/Carbon.h>
#import <WebKit/WKUIDelegatePrivate.h>
#import <WebKit/WKWebView.h>
@@ -89,6 +90,43 @@
ASSERT_EQ(webViewFromDelegateCallback, createdWebView);
}
+static bool readyForClick;
+
+@interface AutoFillDelegate : NSObject <WKUIDelegatePrivate>
+@end
+
+@implementation AutoFillDelegate
+
+- (void)_webView:(WKWebView *)webView didClickAutoFillButtonWithUserInfo:(id <NSSecureCoding>)userInfo
+{
+ ASSERT_TRUE([(id<NSObject>)userInfo isKindOfClass:[NSString class]]);
+ ASSERT_STREQ([(NSString*)userInfo UTF8String], "user data string");
+ done = true;
+}
+
+- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
+{
+ completionHandler();
+ ASSERT_STREQ(message.UTF8String, "ready for click!");
+ readyForClick = true;
+}
+
+@end
+
+TEST(WebKit2, ClickAutoFillButton)
+{
+ WKWebViewConfiguration *configuration = [WKWebViewConfiguration _test_configurationWithTestPlugInClassName:@"ClickAutoFillButton"];
+
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]);
+ auto delegate = adoptNS([[AutoFillDelegate alloc] init]);
+ [webView setUIDelegate:delegate.get()];
+ TestWebKitAPI::Util::run(&readyForClick);
+ NSPoint buttonLocation = NSMakePoint(130, 575);
+ [webView mouseDownAtPoint:buttonLocation simulatePressure:NO];
+ [webView mouseUpAtPoint:buttonLocation];
+ TestWebKitAPI::Util::run(&done);
+}
+
static NSEvent *tabEvent(NSWindow *window, NSEventType type, NSEventModifierFlags flags)
{
return [NSEvent keyEventWithType:type location:NSMakePoint(5, 5) modifierFlags:flags timestamp:GetCurrentEventTime() windowNumber:[window windowNumber] context:[NSGraphicsContext currentContext] characters:@"\t" charactersIgnoringModifiers:@"\t" isARepeat:NO keyCode:0];