WebKit Bugzilla
Attachment 372950 Details for
Bug 199230
: testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-199230-20190626141511.patch (text/plain), 57.43 KB, created by
Alex Christensen
on 2019-06-26 14:15:12 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2019-06-26 14:15:12 PDT
Size:
57.43 KB
patch
obsolete
>Subversion Revision: 246846 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 0b692e71fc4dd6bb1949f7b33aa2da7a177a29c3..d17ea9d2224475647d03d633baaa02bb98b0d706 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,49 @@ >+2019-06-26 Alex Christensen <achristensen@webkit.org> >+ >+ testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set >+ https://bugs.webkit.org/show_bug.cgi?id=199230 >+ <rdar://51757107> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This patch adds an optional callback to WKCookieManagerSetHTTPCookieAcceptPolicy which is luckily only used for testing. >+ It also adds listener-based asynchronous versions of didReceiveSynchronousMessageFromInjectedBundle. >+ WebKitTestRunner uses these new abilities to wait for the cookie accept policy to be set in the network process while the web process is hung. >+ This removes the race condition that was causing some flakiness in tests that use testRunner.setAlwaysAcceptCookies >+ >+ * Shared/API/APIObject.h: >+ * Shared/API/c/WKBase.h: >+ * Sources.txt: >+ * UIProcess/API/APIInjectedBundleClient.h: >+ (API::InjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle): >+ * UIProcess/API/APIMessageListener.h: Copied from Source/WebKit/UIProcess/API/APIInjectedBundleClient.h. >+ (API::MessageListener::create): >+ (API::MessageListener::sendReply): >+ (API::MessageListener::MessageListener): >+ * UIProcess/API/C/WKAPICast.h: >+ * UIProcess/API/C/WKContextInjectedBundleClient.h: >+ * UIProcess/API/C/WKCookieManager.cpp: >+ (WKCookieManagerSetHTTPCookieAcceptPolicy): >+ * UIProcess/API/C/WKCookieManager.h: >+ * UIProcess/API/C/WKMessageListener.cpp: Copied from Source/WebKit/UIProcess/API/APIInjectedBundleClient.h. >+ (WKMessageListenerGetTypeID): >+ (WKMessageListenerSendReply): >+ * UIProcess/API/C/WKMessageListener.h: Copied from Source/WebKit/UIProcess/API/APIInjectedBundleClient.h. >+ * UIProcess/API/C/WKPageInjectedBundleClient.h: >+ * UIProcess/WebContextInjectedBundleClient.cpp: >+ (WebKit::WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle): >+ * UIProcess/WebContextInjectedBundleClient.h: >+ * UIProcess/WebPageInjectedBundleClient.cpp: >+ (WebKit::WebPageInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle): >+ * UIProcess/WebPageInjectedBundleClient.h: >+ * UIProcess/WebPageProxy.cpp: >+ (WebKit::WebPageProxy::handleSynchronousMessage): >+ * UIProcess/WebPageProxy.h: >+ (WebKit::WebPageProxy::injectedBundleClient): Deleted. >+ * UIProcess/WebProcessPool.cpp: >+ (WebKit::WebProcessPool::handleSynchronousMessage): >+ * WebKit.xcodeproj/project.pbxproj: >+ > 2019-06-26 Zalan Bujtas <zalan@apple.com> > > [ContentChangeObserver] Dispatch synthetic mouse event asynchronously in completePendingSyntheticClickForContentChangeObserver >diff --git a/Source/WebKit/Shared/API/APIObject.h b/Source/WebKit/Shared/API/APIObject.h >index be8c78bf32312e60759d294c631a4a63df53044c..4029df90e7ce228dc139572124a596c284e80acf 100644 >--- a/Source/WebKit/Shared/API/APIObject.h >+++ b/Source/WebKit/Shared/API/APIObject.h >@@ -133,6 +133,7 @@ public: > Inspector, > KeyValueStorageManager, > MediaCacheManager, >+ MessageListener, > Navigation, > NavigationAction, > NavigationData, >diff --git a/Source/WebKit/Shared/API/c/WKBase.h b/Source/WebKit/Shared/API/c/WKBase.h >index 1164c1582c412a7b550a5b1c56bb1df54ffe7aa9..03914b21d2f83784877019a6dce5f48baf0f9804 100644 >--- a/Source/WebKit/Shared/API/c/WKBase.h >+++ b/Source/WebKit/Shared/API/c/WKBase.h >@@ -106,6 +106,7 @@ typedef const struct OpaqueWKInspector* WKInspectorRef; > typedef const struct OpaqueWKKeyValueStorageManager* WKKeyValueStorageManagerRef; > typedef const struct OpaqueWKMediaSessionFocusManager* WKMediaSessionFocusManagerRef; > typedef const struct OpaqueWKMediaSessionMetadata* WKMediaSessionMetadataRef; >+typedef const struct OpaqueWKMessageListener* WKMessageListenerRef; > typedef const struct OpaqueWKNavigationAction* WKNavigationActionRef; > typedef const struct OpaqueWKNavigationData* WKNavigationDataRef; > typedef const struct OpaqueWKNavigation* WKNavigationRef; >diff --git a/Source/WebKit/Sources.txt b/Source/WebKit/Sources.txt >index 2d77ea09b50ce23897bcf2bd5ba1c21e556b770d..7d25ed4d0bd864052fd47d253afc9aa26b35d461 100644 >--- a/Source/WebKit/Sources.txt >+++ b/Source/WebKit/Sources.txt >@@ -344,6 +344,7 @@ UIProcess/API/C/WKIconDatabase.cpp > UIProcess/API/C/WKInspector.cpp > UIProcess/API/C/WKKeyValueStorageManager.cpp > UIProcess/API/C/WKMediaSessionMetadata.cpp >+UIProcess/API/C/WKMessageListener.cpp > UIProcess/API/C/WKMockDisplay.cpp > UIProcess/API/C/WKMockMediaDevice.cpp > UIProcess/API/C/WKNavigationActionRef.cpp >diff --git a/Source/WebKit/UIProcess/API/APIInjectedBundleClient.h b/Source/WebKit/UIProcess/API/APIInjectedBundleClient.h >index 2350c61fe13219879e3d199cd890eed8aa37c535..2bebc12f6618a78439a3326d2a52b0325efd07fb 100644 >--- a/Source/WebKit/UIProcess/API/APIInjectedBundleClient.h >+++ b/Source/WebKit/UIProcess/API/APIInjectedBundleClient.h >@@ -39,7 +39,7 @@ public: > virtual ~InjectedBundleClient() = default; > > virtual void didReceiveMessageFromInjectedBundle(WebKit::WebProcessPool&, const WTF::String&, API::Object*) { } >- virtual void didReceiveSynchronousMessageFromInjectedBundle(WebKit::WebProcessPool&, const WTF::String&, API::Object*, RefPtr<API::Object>&) { } >+ virtual void didReceiveSynchronousMessageFromInjectedBundle(WebKit::WebProcessPool&, const WTF::String&, API::Object*, CompletionHandler<void(RefPtr<API::Object>)>&& completionHandler) { completionHandler(nullptr); } > virtual RefPtr<API::Object> getInjectedBundleInitializationUserData(WebKit::WebProcessPool&) { return nullptr; } > }; > >diff --git a/Source/WebKit/UIProcess/API/APIMessageListener.h b/Source/WebKit/UIProcess/API/APIMessageListener.h >new file mode 100644 >index 0000000000000000000000000000000000000000..e88a5766c71c84a188a24be53dad5f66ab22cbea >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/APIMessageListener.h >@@ -0,0 +1,53 @@ >+/* >+ * Copyright (C) 2019 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. >+ */ >+ >+#pragma once >+ >+#include "APIObject.h" >+#include <wtf/CompletionHandler.h> >+ >+namespace API { >+ >+class MessageListener : public ObjectImpl<Object::Type::MessageListener> { >+ WTF_MAKE_NONCOPYABLE(MessageListener); >+public: >+ static Ref<MessageListener> create(CompletionHandler<void(RefPtr<API::Object>)>&& reply) >+ { >+ return adoptRef(*new MessageListener(WTFMove(reply))); >+ } >+ >+ void sendReply(RefPtr<API::Object>&& reply) >+ { >+ m_reply(WTFMove(reply)); >+ } >+ >+private: >+ MessageListener(CompletionHandler<void(RefPtr<API::Object>)>&& reply) >+ : m_reply(WTFMove(reply)) { } >+ >+ CompletionHandler<void(RefPtr<API::Object>)> m_reply; >+}; >+ >+} // namespace API >diff --git a/Source/WebKit/UIProcess/API/C/WKAPICast.h b/Source/WebKit/UIProcess/API/C/WKAPICast.h >index c86603ddc94fdde78ff5e7e8c3cf73d5cd93c609..5173755948dd415e27a5f73ea472fac8095beb19 100644 >--- a/Source/WebKit/UIProcess/API/C/WKAPICast.h >+++ b/Source/WebKit/UIProcess/API/C/WKAPICast.h >@@ -58,6 +58,7 @@ class ExperimentalFeature; > class FrameHandle; > class FrameInfo; > class HitTestResult; >+class MessageListener; > class Navigation; > class NavigationAction; > class NavigationData; >@@ -137,6 +138,7 @@ WK_ADD_API_MAPPING(WKIconDatabaseRef, WebIconDatabase) > WK_ADD_API_MAPPING(WKInspectorRef, WebInspectorProxy) > WK_ADD_API_MAPPING(WKMediaSessionFocusManagerRef, WebMediaSessionFocusManager) > WK_ADD_API_MAPPING(WKMediaSessionMetadataRef, WebMediaSessionMetadata) >+WK_ADD_API_MAPPING(WKMessageListenerRef, API::MessageListener) > WK_ADD_API_MAPPING(WKNavigationActionRef, API::NavigationAction) > WK_ADD_API_MAPPING(WKNavigationDataRef, API::NavigationData) > WK_ADD_API_MAPPING(WKNavigationRef, API::Navigation) >diff --git a/Source/WebKit/UIProcess/API/C/WKContextInjectedBundleClient.h b/Source/WebKit/UIProcess/API/C/WKContextInjectedBundleClient.h >index d3456aa680272bc410726daef3e4b909b8c8182d..b3328e8c0b7a20d112e947509e6b7e2dc8b75f9b 100644 >--- a/Source/WebKit/UIProcess/API/C/WKContextInjectedBundleClient.h >+++ b/Source/WebKit/UIProcess/API/C/WKContextInjectedBundleClient.h >@@ -29,9 +29,10 @@ > #include <WebKit/WKBase.h> > > // Injected Bundle Client >-typedef void (*WKContextDidReceiveMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo); >-typedef void (*WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void *clientInfo); >+typedef void (*WKContextDidReceiveMessageFromInjectedBundleCallback)(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo); >+typedef void (*WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback)(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void *clientInfo); > typedef WKTypeRef (*WKContextGetInjectedBundleInitializationUserDataCallback)(WKContextRef context, const void *clientInfo); >+typedef void (*WKContextDidReceiveSynchronousMessageFromInjectedBundleWithListenerCallback)(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef listener, const void *clientInfo); > > typedef struct WKContextInjectedBundleClientBase { > int version; >@@ -57,4 +58,18 @@ typedef struct WKContextInjectedBundleClientV1 { > WKContextGetInjectedBundleInitializationUserDataCallback getInjectedBundleInitializationUserData; > } WKContextInjectedBundleClientV1; > >+typedef struct WKContextInjectedBundleClientV2 { >+ WKContextInjectedBundleClientBase base; >+ >+ // Version 0. >+ WKContextDidReceiveMessageFromInjectedBundleCallback didReceiveMessageFromInjectedBundle; >+ WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback didReceiveSynchronousMessageFromInjectedBundle; >+ >+ // Version 1. >+ WKContextGetInjectedBundleInitializationUserDataCallback getInjectedBundleInitializationUserData; >+ >+ // Version 2. >+ WKContextDidReceiveSynchronousMessageFromInjectedBundleWithListenerCallback didReceiveSynchronousMessageFromInjectedBundleWithListener; >+} WKContextInjectedBundleClientV2; >+ > #endif // WKContextInjectedBundleClient_h >diff --git a/Source/WebKit/UIProcess/API/C/WKCookieManager.cpp b/Source/WebKit/UIProcess/API/C/WKCookieManager.cpp >index cb7f0bd1b71fb095aa4b5fb33803a532a4c56f77..0636ea6c2c77e3fd4d0b4dc6f12d08deb8695048 100644 >--- a/Source/WebKit/UIProcess/API/C/WKCookieManager.cpp >+++ b/Source/WebKit/UIProcess/API/C/WKCookieManager.cpp >@@ -62,9 +62,12 @@ void WKCookieManagerDeleteAllCookiesModifiedAfterDate(WKCookieManagerRef cookieM > toImpl(cookieManagerRef)->deleteAllCookiesModifiedSince(PAL::SessionID::defaultSessionID(), WallTime::fromRawSeconds(date), [](CallbackBase::Error){}); > } > >-void WKCookieManagerSetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, WKHTTPCookieAcceptPolicy policy) >+void WKCookieManagerSetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, WKHTTPCookieAcceptPolicy policy, void* context, WKCookieManagerSetHTTPCookieAcceptPolicyFunction callback) > { >- toImpl(cookieManager)->setHTTPCookieAcceptPolicy(PAL::SessionID::defaultSessionID(), toHTTPCookieAcceptPolicy(policy), [](CallbackBase::Error){}); >+ toImpl(cookieManager)->setHTTPCookieAcceptPolicy(PAL::SessionID::defaultSessionID(), toHTTPCookieAcceptPolicy(policy), [context, callback](CallbackBase::Error error) { >+ if (callback) >+ callback(error != CallbackBase::Error::None ? toAPI(API::Error::create().ptr()) : nullptr, context); >+ }); > } > > void WKCookieManagerGetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, void* context, WKCookieManagerGetHTTPCookieAcceptPolicyFunction callback) >diff --git a/Source/WebKit/UIProcess/API/C/WKCookieManager.h b/Source/WebKit/UIProcess/API/C/WKCookieManager.h >index c6514e3fa07b3e238b04c4b9eb009ce8ee1bf93d..73354d2cba4edf97b9a57920cd45bc774252baa5 100644 >--- a/Source/WebKit/UIProcess/API/C/WKCookieManager.h >+++ b/Source/WebKit/UIProcess/API/C/WKCookieManager.h >@@ -68,7 +68,8 @@ WK_EXPORT void WKCookieManagerDeleteAllCookies(WKCookieManagerRef cookieManager) > // The time here is relative to the Unix epoch. > WK_EXPORT void WKCookieManagerDeleteAllCookiesModifiedAfterDate(WKCookieManagerRef cookieManager, double); > >-WK_EXPORT void WKCookieManagerSetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, WKHTTPCookieAcceptPolicy policy); >+typedef void (*WKCookieManagerSetHTTPCookieAcceptPolicyFunction)(WKErrorRef, void*); >+WK_EXPORT void WKCookieManagerSetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, WKHTTPCookieAcceptPolicy policy, void* context, WKCookieManagerSetHTTPCookieAcceptPolicyFunction callback); > typedef void (*WKCookieManagerGetHTTPCookieAcceptPolicyFunction)(WKHTTPCookieAcceptPolicy, WKErrorRef, void*); > WK_EXPORT void WKCookieManagerGetHTTPCookieAcceptPolicy(WKCookieManagerRef cookieManager, void* context, WKCookieManagerGetHTTPCookieAcceptPolicyFunction callback); > >diff --git a/Source/WebKit/UIProcess/API/C/WKMessageListener.cpp b/Source/WebKit/UIProcess/API/C/WKMessageListener.cpp >new file mode 100644 >index 0000000000000000000000000000000000000000..9c010c47c1995ddb6015c6225d8c642a0d341390 >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/C/WKMessageListener.cpp >@@ -0,0 +1,39 @@ >+/* >+ * Copyright (C) 2019 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. >+ */ >+ >+#include "config.h" >+#include "WKMessageListener.h" >+ >+#include "APIMessageListener.h" >+ >+WKTypeID WKMessageListenerGetTypeID() >+{ >+ return toAPI(API::MessageListener::APIType); >+} >+ >+void WKMessageListenerSendReply(WKMessageListenerRef listenerRef, WKTypeRef value) >+{ >+ toImpl(listenerRef)->sendReply(toImpl(value)); >+} >diff --git a/Source/WebKit/UIProcess/API/C/WKMessageListener.h b/Source/WebKit/UIProcess/API/C/WKMessageListener.h >new file mode 100644 >index 0000000000000000000000000000000000000000..a4e8a2ef8216bda50fb0eea44c35e704b3e22dd4 >--- /dev/null >+++ b/Source/WebKit/UIProcess/API/C/WKMessageListener.h >@@ -0,0 +1,43 @@ >+/* >+ * Copyright (C) 2019 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. >+ */ >+ >+#ifndef WKMessageListener_h >+#define WKMessageListener_h >+ >+#include <WebKit/WKBase.h> >+ >+#ifdef __cplusplus >+extern "C" { >+#endif >+ >+WK_EXPORT WKTypeID WKMessageListenerGetTypeID(); >+ >+WK_EXPORT void WKMessageListenerSendReply(WKMessageListenerRef listener, WKTypeRef reply); >+ >+#ifdef __cplusplus >+} >+#endif >+ >+#endif /* WKMessageListener_h */ >diff --git a/Source/WebKit/UIProcess/API/C/WKPageInjectedBundleClient.h b/Source/WebKit/UIProcess/API/C/WKPageInjectedBundleClient.h >index b22c3eb8662f5e76a03860de9b258a538b1b0c93..edbbf58ccc659742b9b1b44b5365257a3029d19e 100644 >--- a/Source/WebKit/UIProcess/API/C/WKPageInjectedBundleClient.h >+++ b/Source/WebKit/UIProcess/API/C/WKPageInjectedBundleClient.h >@@ -31,6 +31,7 @@ > typedef void (*WKPageDidReceiveMessageFromInjectedBundleCallback)(WKPageRef page, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo); > typedef void (*WKPageDidReceiveSynchronousMessageFromInjectedBundleCallback)(WKPageRef page, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void *clientInfo); > typedef WKTypeRef (*WKPageGetInjectedBundleInitializationUserDataCallback)(WKPageRef page, const void *clientInfo); >+typedef void (*WKPageDidReceiveSynchronousMessageFromInjectedBundleWithListenerCallback)(WKPageRef page, WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef listener, const void* clientInfo); > > typedef struct WKPageInjectedBundleClientBase { > int version; >@@ -45,4 +46,15 @@ typedef struct WKPageInjectedBundleClientV0 { > WKPageDidReceiveSynchronousMessageFromInjectedBundleCallback didReceiveSynchronousMessageFromInjectedBundle; > } WKPageInjectedBundleClientV0; > >+typedef struct WKPageInjectedBundleClientV1 { >+ WKPageInjectedBundleClientBase base; >+ >+ // Version 0. >+ WKPageDidReceiveMessageFromInjectedBundleCallback didReceiveMessageFromInjectedBundle; >+ WKPageDidReceiveSynchronousMessageFromInjectedBundleCallback didReceiveSynchronousMessageFromInjectedBundle; >+ >+ // Version 1. >+ WKPageDidReceiveSynchronousMessageFromInjectedBundleWithListenerCallback didReceiveSynchronousMessageFromInjectedBundleWithListener; >+} WKPageInjectedBundleClientV1; >+ > #endif // WKPageInjectedBundleClient_h >diff --git a/Source/WebKit/UIProcess/WebContextInjectedBundleClient.cpp b/Source/WebKit/UIProcess/WebContextInjectedBundleClient.cpp >index f4ca62ccab6c3dce522234a3fea541eb2ecddde5..6db14522f0572b9a785de17a69a9ae910db9106b 100644 >--- a/Source/WebKit/UIProcess/WebContextInjectedBundleClient.cpp >+++ b/Source/WebKit/UIProcess/WebContextInjectedBundleClient.cpp >@@ -26,6 +26,7 @@ > #include "config.h" > #include "WebContextInjectedBundleClient.h" > >+#include "APIMessageListener.h" > #include "WKAPICast.h" > #include "WebProcessPool.h" > #include <wtf/text/WTFString.h> >@@ -45,14 +46,18 @@ void WebContextInjectedBundleClient::didReceiveMessageFromInjectedBundle(WebProc > m_client.didReceiveMessageFromInjectedBundle(toAPI(&processPool), toAPI(messageName.impl()), toAPI(messageBody), m_client.base.clientInfo); > } > >-void WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle(WebProcessPool& processPool, const String& messageName, API::Object* messageBody, RefPtr<API::Object>& returnData) >+void WebContextInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle(WebProcessPool& processPool, const String& messageName, API::Object* messageBody, CompletionHandler<void(RefPtr<API::Object>)>&& completionHandler) > { >- if (!m_client.didReceiveSynchronousMessageFromInjectedBundle) >- return; >+ if (!m_client.didReceiveSynchronousMessageFromInjectedBundle && !m_client.didReceiveSynchronousMessageFromInjectedBundleWithListener) >+ return completionHandler(nullptr); >+ >+ if (m_client.didReceiveSynchronousMessageFromInjectedBundle) { >+ WKTypeRef returnDataRef = nullptr; >+ m_client.didReceiveSynchronousMessageFromInjectedBundle(toAPI(&processPool), toAPI(messageName.impl()), toAPI(messageBody), &returnDataRef, m_client.base.clientInfo); >+ return completionHandler(adoptRef(toImpl(returnDataRef))); >+ } > >- WKTypeRef returnDataRef = nullptr; >- m_client.didReceiveSynchronousMessageFromInjectedBundle(toAPI(&processPool), toAPI(messageName.impl()), toAPI(messageBody), &returnDataRef, m_client.base.clientInfo); >- returnData = adoptRef(toImpl(returnDataRef)); >+ m_client.didReceiveSynchronousMessageFromInjectedBundleWithListener(toAPI(&processPool), toAPI(messageName.impl()), toAPI(messageBody), toAPI(API::MessageListener::create(WTFMove(completionHandler)).ptr()), m_client.base.clientInfo); > } > > RefPtr<API::Object> WebContextInjectedBundleClient::getInjectedBundleInitializationUserData(WebProcessPool& processPool) >diff --git a/Source/WebKit/UIProcess/WebContextInjectedBundleClient.h b/Source/WebKit/UIProcess/WebContextInjectedBundleClient.h >index abfd6a4b786ff5f24fb9cdd5ca9617b1950740a4..0948bc597741e578b93dcf3840eb37022b69a94e 100644 >--- a/Source/WebKit/UIProcess/WebContextInjectedBundleClient.h >+++ b/Source/WebKit/UIProcess/WebContextInjectedBundleClient.h >@@ -34,7 +34,7 @@ namespace API { > class Object; > > template<> struct ClientTraits<WKContextInjectedBundleClientBase> { >- typedef std::tuple<WKContextInjectedBundleClientV0, WKContextInjectedBundleClientV1> Versions; >+ typedef std::tuple<WKContextInjectedBundleClientV0, WKContextInjectedBundleClientV1, WKContextInjectedBundleClientV2> Versions; > }; > } > >@@ -48,7 +48,7 @@ public: > explicit WebContextInjectedBundleClient(const WKContextInjectedBundleClientBase*); > > void didReceiveMessageFromInjectedBundle(WebProcessPool&, const WTF::String&, API::Object*) override; >- void didReceiveSynchronousMessageFromInjectedBundle(WebProcessPool&, const WTF::String&, API::Object*, RefPtr<API::Object>&) override; >+ void didReceiveSynchronousMessageFromInjectedBundle(WebProcessPool&, const WTF::String&, API::Object*, CompletionHandler<void(RefPtr<API::Object>)>&&) override; > RefPtr<API::Object> getInjectedBundleInitializationUserData(WebProcessPool&) override; > }; > >diff --git a/Source/WebKit/UIProcess/WebPageInjectedBundleClient.cpp b/Source/WebKit/UIProcess/WebPageInjectedBundleClient.cpp >index 353e7fb4237ac9a6456b480b2ec00c9a58fa7c62..44de8364b5284312022dd1c03eca988eff602805 100644 >--- a/Source/WebKit/UIProcess/WebPageInjectedBundleClient.cpp >+++ b/Source/WebKit/UIProcess/WebPageInjectedBundleClient.cpp >@@ -26,6 +26,7 @@ > #include "config.h" > #include "WebPageInjectedBundleClient.h" > >+#include "APIMessageListener.h" > #include "WKAPICast.h" > #include "WebProcessPool.h" > #include <wtf/text/WTFString.h> >@@ -41,14 +42,19 @@ void WebPageInjectedBundleClient::didReceiveMessageFromInjectedBundle(WebPagePro > m_client.didReceiveMessageFromInjectedBundle(toAPI(page), toAPI(messageName.impl()), toAPI(messageBody), m_client.base.clientInfo); > } > >-void WebPageInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle(WebPageProxy* page, const String& messageName, API::Object* messageBody, RefPtr<API::Object>& returnData) >+void WebPageInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle(WebPageProxy* page, const String& messageName, API::Object* messageBody, CompletionHandler<void(RefPtr<API::Object>)>&& completionHandler) > { >- if (!m_client.didReceiveSynchronousMessageFromInjectedBundle) >- return; >+ if (!m_client.didReceiveSynchronousMessageFromInjectedBundle >+ && !m_client.didReceiveSynchronousMessageFromInjectedBundleWithListener) >+ return completionHandler(nullptr); >+ >+ if (m_client.didReceiveSynchronousMessageFromInjectedBundle) { >+ WKTypeRef returnDataRef = nullptr; >+ m_client.didReceiveSynchronousMessageFromInjectedBundle(toAPI(page), toAPI(messageName.impl()), toAPI(messageBody), &returnDataRef, m_client.base.clientInfo); >+ return completionHandler(adoptRef(toImpl(returnDataRef))); >+ } > >- WKTypeRef returnDataRef = 0; >- m_client.didReceiveSynchronousMessageFromInjectedBundle(toAPI(page), toAPI(messageName.impl()), toAPI(messageBody), &returnDataRef, m_client.base.clientInfo); >- returnData = adoptRef(toImpl(returnDataRef)); >+ m_client.didReceiveSynchronousMessageFromInjectedBundleWithListener(toAPI(page), toAPI(messageName.impl()), toAPI(messageBody), toAPI(API::MessageListener::create(WTFMove(completionHandler)).ptr()), m_client.base.clientInfo); > } > > } // namespace WebKit >diff --git a/Source/WebKit/UIProcess/WebPageInjectedBundleClient.h b/Source/WebKit/UIProcess/WebPageInjectedBundleClient.h >index 30c7f354c001b4ed724485016a3ae7c4cf74347f..652982a812a9efbef521a6a9899fa4bee5faf34c 100644 >--- a/Source/WebKit/UIProcess/WebPageInjectedBundleClient.h >+++ b/Source/WebKit/UIProcess/WebPageInjectedBundleClient.h >@@ -23,8 +23,7 @@ > * THE POSSIBILITY OF SUCH DAMAGE. > */ > >-#ifndef WebPageInjectedBundleClient_h >-#define WebPageInjectedBundleClient_h >+#pragma once > > #include "APIClient.h" > #include "WKPage.h" >@@ -34,7 +33,7 @@ namespace API { > class Object; > > template<> struct ClientTraits<WKPageInjectedBundleClientBase> { >- typedef std::tuple<WKPageInjectedBundleClientV0> Versions; >+ typedef std::tuple<WKPageInjectedBundleClientV0, WKPageInjectedBundleClientV1> Versions; > }; > } > >@@ -45,9 +44,7 @@ class WebPageProxy; > class WebPageInjectedBundleClient : public API::Client<WKPageInjectedBundleClientBase> { > public: > void didReceiveMessageFromInjectedBundle(WebPageProxy*, const String&, API::Object*); >- void didReceiveSynchronousMessageFromInjectedBundle(WebPageProxy*, const String&, API::Object*, RefPtr<API::Object>& returnData); >+ void didReceiveSynchronousMessageFromInjectedBundle(WebPageProxy*, const String&, API::Object*, CompletionHandler<void(RefPtr<API::Object>)>&&); > }; > > } // namespace WebKit >- >-#endif // WebPageInjectedBundleClient_h >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index ac74bd4c7ac4a1305401602d3b276430adb888b8..2607b30034ec97be76a42b0d5a3286f4f3196549 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -704,8 +704,9 @@ void WebPageProxy::handleSynchronousMessage(IPC::Connection& connection, const S > return completionHandler({ }); > > RefPtr<API::Object> returnData; >- m_injectedBundleClient->didReceiveSynchronousMessageFromInjectedBundle(this, messageName, m_process->transformHandlesToObjects(messageBody.object()).get(), returnData); >- completionHandler(UserData(m_process->transformObjectsToHandles(returnData.get()))); >+ m_injectedBundleClient->didReceiveSynchronousMessageFromInjectedBundle(this, messageName, m_process->transformHandlesToObjects(messageBody.object()).get(), [completionHandler = WTFMove(completionHandler), process = m_process.copyRef()] (RefPtr<API::Object>&& returnData) mutable { >+ completionHandler(UserData(process->transformObjectsToHandles(returnData.get()))); >+ }); > } > > void WebPageProxy::launchProcess(const RegistrableDomain& registrableDomain) >diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h >index 35e85f0e351c723824f6fa136e7befd5746229fa..2c540f7c05756ff8dd9468c3439fbd2d1bb9a54a 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.h >+++ b/Source/WebKit/UIProcess/WebPageProxy.h >@@ -497,7 +497,6 @@ public: > void setLoaderClient(std::unique_ptr<API::LoaderClient>&&); > void setPolicyClient(std::unique_ptr<API::PolicyClient>&&); > void setInjectedBundleClient(const WKPageInjectedBundleClientBase*); >- WebPageInjectedBundleClient* injectedBundleClient() { return m_injectedBundleClient.get(); } > > API::UIClient& uiClient() { return *m_uiClient; } > void setUIClient(std::unique_ptr<API::UIClient>&&); >diff --git a/Source/WebKit/UIProcess/WebProcessPool.cpp b/Source/WebKit/UIProcess/WebProcessPool.cpp >index 7864a183f7d738ded54a90d282a50337fa425535..9462799f2a8bd1a4d76f2d39fc823949d1085797 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -1902,9 +1902,9 @@ void WebProcessPool::handleSynchronousMessage(IPC::Connection& connection, const > if (!webProcessProxy) > return completionHandler({ }); > >- RefPtr<API::Object> returnData; >- m_injectedBundleClient->didReceiveSynchronousMessageFromInjectedBundle(*this, messageName, webProcessProxy->transformHandlesToObjects(messageBody.object()).get(), returnData); >- completionHandler(UserData(webProcessProxy->transformObjectsToHandles(returnData.get()))); >+ m_injectedBundleClient->didReceiveSynchronousMessageFromInjectedBundle(*this, messageName, webProcessProxy->transformHandlesToObjects(messageBody.object()).get(), [webProcessProxy = makeRef(*webProcessProxy), completionHandler = WTFMove(completionHandler)] (RefPtr<API::Object>&& returnData) mutable { >+ completionHandler(UserData(webProcessProxy->transformObjectsToHandles(returnData.get()))); >+ }); > } > > void WebProcessPool::didGetStatistics(const StatisticsData& statisticsData, uint64_t requestID) >diff --git a/Source/WebKit/WebKit.xcodeproj/project.pbxproj b/Source/WebKit/WebKit.xcodeproj/project.pbxproj >index 1b52263c46db5efa03ee2582791cd96548f9795f..16043c5f596a279a93a39df08ef024523724c411 100644 >--- a/Source/WebKit/WebKit.xcodeproj/project.pbxproj >+++ b/Source/WebKit/WebKit.xcodeproj/project.pbxproj >@@ -1102,6 +1102,8 @@ > 5CA26D81217ABD5B00F97A35 /* WKSafeBrowsingWarning.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA26D80217ABBB600F97A35 /* WKSafeBrowsingWarning.h */; }; > 5CA26D83217AD1B800F97A35 /* WKSafeBrowsingWarning.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CA26D7F217ABBB600F97A35 /* WKSafeBrowsingWarning.mm */; }; > 5CA9854A210BEB640057EB6B /* SafeBrowsingWarning.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CA98549210BEB5A0057EB6B /* SafeBrowsingWarning.h */; }; >+ 5CABDC8622C40FDE001EDE8E /* WKMessageListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CABDC8522C40FCC001EDE8E /* WKMessageListener.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ 5CABDC8722C40FED001EDE8E /* APIMessageListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CABDC8322C40FA7001EDE8E /* APIMessageListener.h */; }; > 5CADDE05215046BD0067D309 /* WKWebProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C74300E21500492004BFA17 /* WKWebProcess.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 5CAFDE452130846300B1F7E1 /* _WKInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CAFDE422130843500B1F7E1 /* _WKInspector.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 5CAFDE472130846A00B1F7E1 /* _WKInspectorInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CAFDE442130843600B1F7E1 /* _WKInspectorInternal.h */; }; >@@ -3604,6 +3606,9 @@ > 5CA46E7A21F1A23900CE86B4 /* APIHTTPCookieStoreCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = APIHTTPCookieStoreCocoa.mm; path = UIProcess/API/Cocoa/APIHTTPCookieStoreCocoa.mm; sourceTree = SOURCE_ROOT; }; > 5CA98549210BEB5A0057EB6B /* SafeBrowsingWarning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SafeBrowsingWarning.h; sourceTree = "<group>"; }; > 5CA9854B210BEB730057EB6B /* SafeBrowsingWarningCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SafeBrowsingWarningCocoa.mm; sourceTree = "<group>"; }; >+ 5CABDC8322C40FA7001EDE8E /* APIMessageListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIMessageListener.h; sourceTree = "<group>"; }; >+ 5CABDC8422C40FCC001EDE8E /* WKMessageListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKMessageListener.cpp; sourceTree = "<group>"; }; >+ 5CABDC8522C40FCC001EDE8E /* WKMessageListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKMessageListener.h; sourceTree = "<group>"; }; > 5CADDE0D2151AA010067D309 /* AuthenticationChallengeDisposition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthenticationChallengeDisposition.h; sourceTree = "<group>"; }; > 5CAFDE422130843500B1F7E1 /* _WKInspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKInspector.h; sourceTree = "<group>"; }; > 5CAFDE432130843600B1F7E1 /* _WKInspector.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKInspector.mm; sourceTree = "<group>"; }; >@@ -7843,6 +7848,7 @@ > 31B3628E2141EA4D007BFA53 /* APIInternalDebugFeature.h */, > 7CE4D2061A46775700C7F152 /* APILegacyContextHistoryClient.h */, > 1A2464F21891E45100234C5B /* APILoaderClient.h */, >+ 5CABDC8322C40FA7001EDE8E /* APIMessageListener.h */, > 7CD3A4801A5D02FA009623B8 /* APINavigation.cpp */, > 7CD3A4811A5D02FA009623B8 /* APINavigation.h */, > 2DF9EEEA1A7836EE00B6CFBE /* APINavigationAction.h */, >@@ -7946,6 +7952,8 @@ > C98C48A81B6FD5B500145103 /* WKMediaSessionFocusManager.h */, > C9CD43991B4B024200239E33 /* WKMediaSessionMetadata.cpp */, > C9CD439A1B4B024200239E33 /* WKMediaSessionMetadata.h */, >+ 5CABDC8422C40FCC001EDE8E /* WKMessageListener.cpp */, >+ 5CABDC8522C40FCC001EDE8E /* WKMessageListener.h */, > C11E1693212B87C500985FF6 /* WKMockDisplay.cpp */, > C11E1692212B87C500985FF6 /* WKMockDisplay.h */, > 411A8DDA20DDB6050060D34F /* WKMockMediaDevice.cpp */, >@@ -9250,6 +9258,7 @@ > 31B3628F2141EA5D007BFA53 /* APIInternalDebugFeature.h in Headers */, > 7CE4D2071A46776100C7F152 /* APILegacyContextHistoryClient.h in Headers */, > 1A2464F31891E45100234C5B /* APILoaderClient.h in Headers */, >+ 5CABDC8722C40FED001EDE8E /* APIMessageListener.h in Headers */, > 7CD3A4831A5D02FA009623B8 /* APINavigation.h in Headers */, > 2DF9EEEC1A7836EE00B6CFBE /* APINavigationAction.h in Headers */, > 2DD9EB2D1A6F012500BB1267 /* APINavigationClient.h in Headers */, >@@ -10099,6 +10108,7 @@ > C98C48AA1B6FD5B500145103 /* WKMediaSessionFocusManager.h in Headers */, > C9CD439D1B4B024F00239E33 /* WKMediaSessionMetadata.h in Headers */, > 1AB40EE61BF677E300BA81BE /* WKMenuItemIdentifiersPrivate.h in Headers */, >+ 5CABDC8622C40FDE001EDE8E /* WKMessageListener.h in Headers */, > C11E1694212B87C500985FF6 /* WKMockDisplay.h in Headers */, > 411A8DDB20DDD1AC0060D34F /* WKMockMediaDevice.h in Headers */, > BC4075FE124FF0270068F20A /* WKMutableArray.h in Headers */, >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 09ee37039a62009873e10641fd6bc5667fb26374..9a4c7f7d8f34f64f1fd45bbedcbb452bdca55455 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,26 @@ >+2019-06-26 Alex Christensen <achristensen@webkit.org> >+ >+ testRunner.setAlwaysAcceptCookies should wait for cookie accept policy to be set >+ https://bugs.webkit.org/show_bug.cgi?id=199230 >+ <rdar://51757107> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Tests/WebKit/CookieManager.cpp: >+ (TestWebKitAPI::didGetTestHTTPCookieAcceptPolicy): >+ (TestWebKitAPI::didGetUserHTTPCookieAcceptPolicy): >+ * WebKitTestRunner/TestController.cpp: >+ (WTR::TestController::generatePageConfiguration): >+ (WTR::TestController::createWebViewWithOptions): >+ (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundleWithListener): >+ (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundleWithListener): >+ (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): >+ (WTR::TestController::didReceiveSynchronousPageMessageFromInjectedBundle): Deleted. >+ * WebKitTestRunner/TestController.h: >+ * WebKitTestRunner/TestInvocation.cpp: >+ (WTR::TestInvocation::invoke): >+ (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): >+ > 2019-06-25 Jiewen Tan <jiewen_tan@apple.com> > > Implement a new SPI to inform clients about AppSSO >diff --git a/Tools/TestWebKitAPI/Tests/WebKit/CookieManager.cpp b/Tools/TestWebKitAPI/Tests/WebKit/CookieManager.cpp >index 495d0ed3cd7f1b5a837d8d2988eefbec5c4a3825..840c6c5a06218cd983d618bc7c52d39e8f4f4a6c 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit/CookieManager.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit/CookieManager.cpp >@@ -46,7 +46,7 @@ static void didGetTestHTTPCookieAcceptPolicy(WKHTTPCookieAcceptPolicy policy, WK > EXPECT_EQ(testPolicy, policy); > > WKCookieManagerRef cookieManager = WKContextGetCookieManager(wkContext.get()); >- WKCookieManagerSetHTTPCookieAcceptPolicy(cookieManager, userPolicy); >+ WKCookieManagerSetHTTPCookieAcceptPolicy(cookieManager, userPolicy, nullptr, nullptr); > > testDone = true; > } >@@ -60,7 +60,7 @@ static void didGetUserHTTPCookieAcceptPolicy(WKHTTPCookieAcceptPolicy policy, WK > // Make sure to choose a policy different from the policy the user currently has set. > testPolicy = (userPolicy + 1) % 3; > WKCookieManagerRef cookieManager = WKContextGetCookieManager(wkContext.get()); >- WKCookieManagerSetHTTPCookieAcceptPolicy(cookieManager, testPolicy); >+ WKCookieManagerSetHTTPCookieAcceptPolicy(cookieManager, testPolicy, nullptr, nullptr); > WKCookieManagerGetHTTPCookieAcceptPolicy(cookieManager, reinterpret_cast<void*>(0x1234578), didGetTestHTTPCookieAcceptPolicy); > } > >diff --git a/Tools/WebKitTestRunner/TestController.cpp b/Tools/WebKitTestRunner/TestController.cpp >index cd8ef1836a1f4ed39785db7265a2e356453588e1..bfac192334c362e1774a7bedf7727c63c166280b 100644 >--- a/Tools/WebKitTestRunner/TestController.cpp >+++ b/Tools/WebKitTestRunner/TestController.cpp >@@ -43,6 +43,7 @@ > #include <WebKit/WKFrameHandleRef.h> > #include <WebKit/WKFrameInfoRef.h> > #include <WebKit/WKIconDatabase.h> >+#include <WebKit/WKMessageListener.h> > #include <WebKit/WKMockDisplay.h> > #include <WebKit/WKMockMediaDevice.h> > #include <WebKit/WKNavigationActionRef.h> >@@ -73,6 +74,7 @@ > #include <stdlib.h> > #include <string> > #include <wtf/AutodrainedPool.h> >+#include <wtf/CompletionHandler.h> > #include <wtf/CryptographicallyRandomNumber.h> > #include <wtf/MainThread.h> > #include <wtf/ProcessPrivilege.h> >@@ -538,11 +540,12 @@ WKRetainPtr<WKPageConfigurationRef> TestController::generatePageConfiguration(co > platformInitializeContext(); > } > >- WKContextInjectedBundleClientV1 injectedBundleClient = { >- { 1, this }, >+ WKContextInjectedBundleClientV2 injectedBundleClient = { >+ { 2, this }, > didReceiveMessageFromInjectedBundle, >- didReceiveSynchronousMessageFromInjectedBundle, >+ nullptr, > getInjectedBundleInitializationUserData, >+ didReceiveSynchronousMessageFromInjectedBundleWithListener, > }; > WKContextSetInjectedBundleClient(m_context.get(), &injectedBundleClient.base); > >@@ -717,10 +720,11 @@ void TestController::createWebViewWithOptions(const TestOptions& options) > WKContextSetDownloadClient(context(), &downloadClient.base); > > // this should just be done on the page? >- WKPageInjectedBundleClientV0 injectedBundleClient = { >- { 0, this }, >+ WKPageInjectedBundleClientV1 injectedBundleClient = { >+ { 1, this }, > didReceivePageMessageFromInjectedBundle, >- didReceiveSynchronousPageMessageFromInjectedBundle >+ nullptr, >+ didReceiveSynchronousPageMessageFromInjectedBundleWithListener, > }; > WKPageSetPageInjectedBundleClient(m_mainWebView->page(), &injectedBundleClient.base); > >@@ -1729,9 +1733,9 @@ void TestController::didReceiveMessageFromInjectedBundle(WKContextRef context, W > static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveMessageFromInjectedBundle(messageName, messageBody); > } > >-void TestController::didReceiveSynchronousMessageFromInjectedBundle(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void* clientInfo) >+void TestController::didReceiveSynchronousMessageFromInjectedBundleWithListener(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef listener, const void* clientInfo) > { >- *returnData = static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody).leakRef(); >+ static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody, listener); > } > > WKTypeRef TestController::getInjectedBundleInitializationUserData(WKContextRef, const void* clientInfo) >@@ -1746,9 +1750,9 @@ void TestController::didReceivePageMessageFromInjectedBundle(WKPageRef page, WKS > static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveMessageFromInjectedBundle(messageName, messageBody); > } > >-void TestController::didReceiveSynchronousPageMessageFromInjectedBundle(WKPageRef page, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void* clientInfo) >+void TestController::didReceiveSynchronousPageMessageFromInjectedBundleWithListener(WKPageRef page, WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef listener, const void* clientInfo) > { >- *returnData = static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody).leakRef(); >+ static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody, listener); > } > > void TestController::networkProcessDidCrash(WKContextRef context, const void *clientInfo) >@@ -1885,11 +1889,15 @@ void TestController::didReceiveMessageFromInjectedBundle(WKStringRef messageName > m_currentInvocation->didReceiveMessageFromInjectedBundle(messageName, messageBody); > } > >-WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody) >+void TestController::didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef listener) > { >+ auto completionHandler = [listener = retainWK(listener)] (WKTypeRef reply) { >+ WKMessageListenerSendReply(listener.get(), reply); >+ }; >+ > if (WKStringIsEqualToUTF8CString(messageName, "EventSender")) { > if (m_state != RunningTest) >- return nullptr; >+ return completionHandler(nullptr); > > ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID()); > WKDictionaryRef messageBodyDictionary = static_cast<WKDictionaryRef>(messageBody); >@@ -1900,7 +1908,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > if (WKStringIsEqualToUTF8CString(subMessageName, "KeyDown")) { > didReceiveKeyDownMessageFromInjectedBundle(messageBodyDictionary, true); > >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "MouseDown") || WKStringIsEqualToUTF8CString(subMessageName, "MouseUp")) { >@@ -1915,7 +1923,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > m_eventSenderProxy->mouseDown(button, modifiers); > else > m_eventSenderProxy->mouseUp(button, modifiers); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "MouseMoveTo")) { >@@ -1927,28 +1935,28 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > > // Forward to WebProcess > m_eventSenderProxy->mouseMoveTo(x, y); >- return 0; >+ return completionHandler(nullptr); > } > > #if PLATFORM(MAC) > if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceClick")) { > m_eventSenderProxy->mouseForceClick(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "StartAndCancelMouseForceClick")) { > m_eventSenderProxy->startAndCancelMouseForceClick(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceDown")) { > m_eventSenderProxy->mouseForceDown(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceUp")) { > m_eventSenderProxy->mouseForceUp(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceChanged")) { >@@ -1956,7 +1964,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > double force = WKDoubleGetValue(static_cast<WKDoubleRef>(WKDictionaryGetItemForKey(messageBodyDictionary, forceKey.get()))); > > m_eventSenderProxy->mouseForceChanged(force); >- return 0; >+ return completionHandler(nullptr); > } > #endif // PLATFORM(MAC) > >@@ -1972,7 +1980,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > > // Forward to WebProcess > m_eventSenderProxy->continuousMouseScrollBy(x, y, paged); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "LeapForward")) { >@@ -1980,7 +1988,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > unsigned time = static_cast<unsigned>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, timeKey.get())))); > > m_eventSenderProxy->leapForward(time); >- return 0; >+ return completionHandler(nullptr); > } > > #if ENABLE(TOUCH_EVENTS) >@@ -1992,7 +2000,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > int y = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, yKey.get())))); > > m_eventSenderProxy->addTouchPoint(x, y); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "UpdateTouchPoint")) { >@@ -2006,7 +2014,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > int y = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, yKey.get())))); > > m_eventSenderProxy->updateTouchPoint(index, x, y); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "SetTouchModifier")) { >@@ -2017,7 +2025,7 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > bool enable = static_cast<bool>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, enableKey.get())))); > > m_eventSenderProxy->setTouchModifier(modifier, enable); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "SetTouchPointRadius")) { >@@ -2028,51 +2036,73 @@ WKRetainPtr<WKTypeRef> TestController::didReceiveSynchronousMessageFromInjectedB > int y = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, yKey.get())))); > > m_eventSenderProxy->setTouchPointRadius(x, y); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "TouchStart")) { > m_eventSenderProxy->touchStart(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "TouchMove")) { > m_eventSenderProxy->touchMove(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "TouchEnd")) { > m_eventSenderProxy->touchEnd(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "TouchCancel")) { > m_eventSenderProxy->touchCancel(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "ClearTouchPoints")) { > m_eventSenderProxy->clearTouchPoints(); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "ReleaseTouchPoint")) { > WKRetainPtr<WKStringRef> indexKey = adoptWK(WKStringCreateWithUTF8CString("Index")); > int index = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, indexKey.get())))); > m_eventSenderProxy->releaseTouchPoint(index); >- return 0; >+ return completionHandler(nullptr); > } > > if (WKStringIsEqualToUTF8CString(subMessageName, "CancelTouchPoint")) { > WKRetainPtr<WKStringRef> indexKey = adoptWK(WKStringCreateWithUTF8CString("Index")); > int index = static_cast<int>(WKUInt64GetValue(static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, indexKey.get())))); > m_eventSenderProxy->cancelTouchPoint(index); >- return 0; >+ return completionHandler(nullptr); > } > #endif > ASSERT_NOT_REACHED(); > } >- return m_currentInvocation->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody); >+ >+ auto setHTTPCookieAcceptPolicy = [&] (WKHTTPCookieAcceptPolicy policy, CompletionHandler<void(WKTypeRef)>&& completionHandler) { >+ auto context = new CompletionHandler<void(WKTypeRef)>(WTFMove(completionHandler)); >+ WKCookieManagerSetHTTPCookieAcceptPolicy(WKContextGetCookieManager(this->context()), policy, context, [] (WKErrorRef error, void* context) { >+ auto completionHandlerPointer = static_cast<CompletionHandler<void(WKTypeRef)>*>(context); >+ (*completionHandlerPointer)(nullptr); >+ delete completionHandlerPointer; >+ }); >+ }; >+ >+ if (WKStringIsEqualToUTF8CString(messageName, "SetAlwaysAcceptCookies")) { >+ WKBooleanRef accept = static_cast<WKBooleanRef>(messageBody); >+ WKHTTPCookieAcceptPolicy policy = WKBooleanGetValue(accept) ? kWKHTTPCookieAcceptPolicyAlways : kWKHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain; >+ return setHTTPCookieAcceptPolicy(policy, WTFMove(completionHandler)); >+ } >+ >+ if (WKStringIsEqualToUTF8CString(messageName, "SetOnlyAcceptFirstPartyCookies")) { >+ WKBooleanRef accept = static_cast<WKBooleanRef>(messageBody); >+ WKHTTPCookieAcceptPolicy policy = WKBooleanGetValue(accept) ? kWKHTTPCookieAcceptPolicyExclusivelyFromMainDocumentDomain : kWKHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain; >+ return setHTTPCookieAcceptPolicy(policy, WTFMove(completionHandler)); >+ } >+ >+ completionHandler(m_currentInvocation->didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody).get()); > } > > WKRetainPtr<WKTypeRef> TestController::getInjectedBundleInitializationUserData() >diff --git a/Tools/WebKitTestRunner/TestController.h b/Tools/WebKitTestRunner/TestController.h >index 1db308d3139e4cbc349e5513f2c9ddfc7c8cfe9d..b04e582d82d6da421660c8a75cfbb661d46931fa 100644 >--- a/Tools/WebKitTestRunner/TestController.h >+++ b/Tools/WebKitTestRunner/TestController.h >@@ -377,14 +377,14 @@ private: > > // WKContextInjectedBundleClient > static void didReceiveMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, const void*); >- static void didReceiveSynchronousMessageFromInjectedBundle(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void*); >+ static void didReceiveSynchronousMessageFromInjectedBundleWithListener(WKContextRef, WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef, const void*); > static WKTypeRef getInjectedBundleInitializationUserData(WKContextRef, const void *clientInfo); > > // WKPageInjectedBundleClient > static void didReceivePageMessageFromInjectedBundle(WKPageRef, WKStringRef messageName, WKTypeRef messageBody, const void*); >- static void didReceiveSynchronousPageMessageFromInjectedBundle(WKPageRef, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void*); >+ static void didReceiveSynchronousPageMessageFromInjectedBundleWithListener(WKPageRef, WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef, const void*); > void didReceiveMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody); >- WKRetainPtr<WKTypeRef> didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody); >+ void didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody, WKMessageListenerRef); > WKRetainPtr<WKTypeRef> getInjectedBundleInitializationUserData(); > > void didReceiveKeyDownMessageFromInjectedBundle(WKDictionaryRef messageBodyDictionary, bool synchronous); >diff --git a/Tools/WebKitTestRunner/TestInvocation.cpp b/Tools/WebKitTestRunner/TestInvocation.cpp >index ccaf10316ce7b9543d578a595cd33820a63e6948..c4d77b8593a0cc7a6cadd9b26fe10c26f966740e 100644 >--- a/Tools/WebKitTestRunner/TestInvocation.cpp >+++ b/Tools/WebKitTestRunner/TestInvocation.cpp >@@ -164,7 +164,7 @@ void TestInvocation::invoke() > > TestController::singleton().setShouldLogHistoryClientCallbacks(shouldLogHistoryClientCallbacks()); > >- WKCookieManagerSetHTTPCookieAcceptPolicy(WKContextGetCookieManager(TestController::singleton().context()), kWKHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain); >+ WKCookieManagerSetHTTPCookieAcceptPolicy(WKContextGetCookieManager(TestController::singleton().context()), kWKHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain, nullptr, nullptr); > > // FIXME: We should clear out visited links here. > >@@ -904,22 +904,6 @@ WKRetainPtr<WKTypeRef> TestInvocation::didReceiveSynchronousMessageFromInjectedB > return result; > } > >- if (WKStringIsEqualToUTF8CString(messageName, "SetAlwaysAcceptCookies")) { >- WKBooleanRef accept = static_cast<WKBooleanRef>(messageBody); >- WKHTTPCookieAcceptPolicy policy = WKBooleanGetValue(accept) ? kWKHTTPCookieAcceptPolicyAlways : kWKHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain; >- // FIXME: This updates the policy in WebProcess and in NetworkProcess asynchronously, which might break some tests' expectations. >- WKCookieManagerSetHTTPCookieAcceptPolicy(WKContextGetCookieManager(TestController::singleton().context()), policy); >- return nullptr; >- } >- >- if (WKStringIsEqualToUTF8CString(messageName, "SetOnlyAcceptFirstPartyCookies")) { >- WKBooleanRef accept = static_cast<WKBooleanRef>(messageBody); >- WKHTTPCookieAcceptPolicy policy = WKBooleanGetValue(accept) ? kWKHTTPCookieAcceptPolicyExclusivelyFromMainDocumentDomain : kWKHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain; >- // FIXME: This updates the policy in WebProcess and in NetworkProcess asynchronously, which might break some tests' expectations. >- WKCookieManagerSetHTTPCookieAcceptPolicy(WKContextGetCookieManager(TestController::singleton().context()), policy); >- return nullptr; >- } >- > if (WKStringIsEqualToUTF8CString(messageName, "SetCustomUserAgent")) { > WKStringRef userAgent = static_cast<WKStringRef>(messageBody); > WKPageSetCustomUserAgent(TestController::singleton().mainWebView()->page(), userAgent);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 199230
:
372943
|
372948
|
372950
|
372951
|
372958