Diff
Modified: trunk/Source/WebKit/ChangeLog (286354 => 286355)
--- trunk/Source/WebKit/ChangeLog 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/ChangeLog 2021-12-01 09:07:47 UTC (rev 286355)
@@ -1,3 +1,81 @@
+2021-12-01 Brady Eidson <beid...@apple.com>
+
+ Add WKWebsiteDataStore configuration option to enable Mock app bundle testing.
+ https://bugs.webkit.org/show_bug.cgi?id=233679
+
+ Reviewed by Tim Horton.
+
+ Covered by API tests.
+
+ We're about to land actual implementations of app permissions bundles.
+ But the mock bundles still have a place for testing.
+ We need a way to switch between Mock and Native.
+
+ This patch takes the opportunity to plumb out a WebPushDaemonConnectionConfiguration object
+ that can easily be augmented in future patches to add new options without messing with messaging directly.
+
+ * NetworkProcess/NetworkSession.h:
+ (WebKit::NetworkSession::webpushdUsesMockBundlesForTesting const):
+
+ * NetworkProcess/NetworkSessionCreationParameters.cpp:
+ (WebKit::NetworkSessionCreationParameters::encode const):
+ (WebKit::NetworkSessionCreationParameters::decode):
+ * NetworkProcess/NetworkSessionCreationParameters.h:
+
+ * NetworkProcess/Notifications/NetworkNotificationManager.cpp:
+ (WebKit::NetworkNotificationManager::maybeSendConnectionConfiguration const):
+ (WebKit::NetworkNotificationManager::sendMessage const):
+ (WebKit::NetworkNotificationManager::sendMessageWithReply const):
+ (WebKit::NetworkNotificationManager::maybeSendHostAppAuditToken const): Deleted.
+ * NetworkProcess/Notifications/NetworkNotificationManager.h:
+
+ * NetworkProcess/cocoa/NetworkSessionCocoa.h:
+ * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+ (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
+
+ * Shared/WebPushDaemonConnectionConfiguration.h: Copied from Source/WebKit/Shared/WebPushDaemonConstants.h.
+ (WebKit::WebPushD::WebPushDaemonConnectionConfiguration::encode const):
+ (WebKit::WebPushD::WebPushDaemonConnectionConfiguration::decode):
+
+ * Shared/WebPushDaemonConstants.h:
+ (WebKit::WebPushD::messageTypeSendsReply):
+
+ * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
+ * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
+ (-[_WKWebsiteDataStoreConfiguration webpushdUsesMockBundlesForTesting]):
+ (-[_WKWebsiteDataStoreConfiguration setWebpushdUsesMockBundlesForTesting:]):
+
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::parameters):
+
+ * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
+ (WebKit::WebsiteDataStoreConfiguration::copy const):
+ (WebKit::WebsiteDataStoreConfiguration::webPushDaemonConnectionConfiguration const):
+ * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
+ (WebKit::WebsiteDataStoreConfiguration::webpushdUsesMockBundlesForTesting const):
+ (WebKit::WebsiteDataStoreConfiguration::setWebpushdUsesMockBundlesForTesting):
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+ * webpushd/AppBundleRequest.mm:
+ (WebPushD::AppBundleRequest::AppBundleRequest):
+ (WebPushD::AppBundleRequest::start):
+
+ * webpushd/PushClientConnection.h:
+ (WebPushD::ClientConnection::hasHostAppAuditToken const):
+ (WebPushD::ClientConnection::useMockBundlesForTesting const):
+ * webpushd/PushClientConnection.mm:
+ (WebPushD::ClientConnection::updateConnectionConfiguration):
+ (WebPushD::ClientConnection::setHostAppAuditTokenData):
+
+ * webpushd/WebPushDaemon.h:
+ * webpushd/WebPushDaemon.mm:
+ (WebPushD::Daemon::decodeAndHandleMessage):
+ (WebPushD::Daemon::getOriginsWithPushAndNotificationPermissions):
+ (WebPushD::Daemon::setDebugModeIsEnabled):
+ (WebPushD::Daemon::updateConnectionConfiguration):
+ (WebPushD::Daemon::setHostAppAuditToken): Deleted.
+
2021-12-01 Lauro Moura <lmo...@igalia.com>
[GTK][GTK4][WebDriver] Flaky crashes exiting many prompty-related webdriver tests
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.h (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/NetworkSession.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -127,6 +127,9 @@
virtual bool hasAppBoundSession() const { return false; }
virtual void clearAppBoundSession() { }
#endif
+
+ virtual bool webPushDaemonUsesMockBundlesForTesting() const { return false; }
+
void storePrivateClickMeasurement(WebCore::PrivateClickMeasurement&&);
void handlePrivateClickMeasurementConversion(WebCore::PrivateClickMeasurement::AttributionTriggerData&&, const URL& requestURL, const WebCore::ResourceRequest& redirectRequest, String&& attributedBundleIdentifier);
void dumpPrivateClickMeasurement(CompletionHandler<void(String)>&&);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp 2021-12-01 09:07:47 UTC (rev 286355)
@@ -74,6 +74,7 @@
encoder << deviceManagementRestrictionsEnabled;
encoder << allLoadsBlockedByDeviceManagementRestrictionsForTesting;
+ encoder << webPushDaemonConnectionConfiguration;
encoder << dataConnectionServiceType;
encoder << fastServerTrustEvaluationEnabled;
encoder << networkCacheSpeculativeValidationEnabled;
@@ -233,6 +234,11 @@
if (!allLoadsBlockedByDeviceManagementRestrictionsForTesting)
return std::nullopt;
+ std::optional<WebPushD::WebPushDaemonConnectionConfiguration> webPushDaemonConnectionConfiguration;
+ decoder >> webPushDaemonConnectionConfiguration;
+ if (!webPushDaemonConnectionConfiguration)
+ return std::nullopt;
+
std::optional<String> dataConnectionServiceType;
decoder >> dataConnectionServiceType;
if (!dataConnectionServiceType)
@@ -356,6 +362,7 @@
#endif
, WTFMove(*deviceManagementRestrictionsEnabled)
, WTFMove(*allLoadsBlockedByDeviceManagementRestrictionsForTesting)
+ , WTFMove(*webPushDaemonConnectionConfiguration)
, WTFMove(*networkCacheDirectory)
, WTFMove(*networkCacheDirectoryExtensionHandle)
, WTFMove(*dataConnectionServiceType)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -26,6 +26,7 @@
#pragma once
#include "ResourceLoadStatisticsParameters.h"
+#include "WebPushDaemonConnectionConfiguration.h"
#include <WebCore/NetworkStorageSession.h>
#include <pal/SessionID.h>
#include <wtf/Seconds.h>
@@ -86,6 +87,7 @@
#endif
bool deviceManagementRestrictionsEnabled { false };
bool allLoadsBlockedByDeviceManagementRestrictionsForTesting { false };
+ WebPushD::WebPushDaemonConnectionConfiguration webPushDaemonConnectionConfiguration;
String networkCacheDirectory;
SandboxExtension::Handle networkCacheDirectoryExtensionHandle;
Modified: trunk/Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.cpp (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.cpp 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.cpp 2021-12-01 09:07:47 UTC (rev 286355)
@@ -31,6 +31,7 @@
#include "DaemonDecoder.h"
#include "DaemonEncoder.h"
#include "NetworkSession.h"
+#include "WebPushDaemonConnectionConfiguration.h"
#include <WebCore/SecurityOriginData.h>
namespace WebKit {
@@ -43,23 +44,26 @@
m_connection = makeUnique<WebPushD::Connection>(webPushMachServiceName.utf8(), *this);
}
-void NetworkNotificationManager::maybeSendHostAppAuditToken() const
+void NetworkNotificationManager::maybeSendConnectionConfiguration() const
{
- if (m_sentHostAppAuditToken)
+ if (m_sentConnectionConfiguration)
return;
- m_sentHostAppAuditToken = true;
+ m_sentConnectionConfiguration = true;
+ WebPushD::WebPushDaemonConnectionConfiguration configuration;
+ configuration.useMockBundlesForTesting = m_networkSession.webPushDaemonUsesMockBundlesForTesting();
+
#if PLATFORM(COCOA)
- auto token = m_networkSession.networkProcess().parentProcessConnection()->getAuditToken();
- if (!token)
- return;
-
+ auto token = m_networkSession.networkProcess().parentProcessConnection()->getAuditToken();
+ if (token) {
Vector<uint8_t> auditTokenData;
auditTokenData.resize(sizeof(*token));
memcpy(auditTokenData.data(), &(*token), sizeof(*token));
+ configuration.hostAppAuditTokenData = WTFMove(auditTokenData);
+ }
+#endif
- sendMessage<WebPushD::MessageType::SetHostAppAuditToken>(auditTokenData);
-#endif
+ sendMessage<WebPushD::MessageType::UpdateConnectionConfiguration>(configuration);
}
void NetworkNotificationManager::requestSystemNotificationPermission(const String& originString, CompletionHandler<void(bool)>&& completionHandler)
@@ -123,7 +127,7 @@
{
RELEASE_ASSERT(m_connection);
- maybeSendHostAppAuditToken();
+ maybeSendConnectionConfiguration();
Daemon::Encoder encoder;
encoder.encode(std::forward<Args>(args)...);
@@ -187,7 +191,7 @@
{
RELEASE_ASSERT(m_connection);
- maybeSendHostAppAuditToken();
+ maybeSendConnectionConfiguration();
Daemon::Encoder encoder;
encoder.encode(std::forward<Args>(args)...);
Modified: trunk/Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/Notifications/NetworkNotificationManager.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -62,11 +62,11 @@
void clearNotifications(const Vector<uint64_t>& notificationIDs) final;
void didDestroyNotification(uint64_t notificationID) final;
- void maybeSendHostAppAuditToken() const;
+ void maybeSendConnectionConfiguration() const;
NetworkSession& m_networkSession;
std::unique_ptr<WebPushD::Connection> m_connection;
- mutable bool m_sentHostAppAuditToken { false };
+ mutable bool m_sentConnectionConfiguration { false };
template<WebPushD::MessageType messageType, typename... Args>
void sendMessage(Args&&...) const;
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -121,6 +121,8 @@
bool fastServerTrustEvaluationEnabled() const { return m_fastServerTrustEvaluationEnabled; }
bool deviceManagementRestrictionsEnabled() const { return m_deviceManagementRestrictionsEnabled; }
bool allLoadsBlockedByDeviceManagementRestrictionsForTesting() const { return m_allLoadsBlockedByDeviceManagementRestrictionsForTesting; }
+ bool webPushDaemonUsesMockBundlesForTesting() const final { return m_webPushDaemonUsesMockBundlesForTesting; }
+
DMFWebsitePolicyMonitor *deviceManagementPolicyMonitor();
CFDictionaryRef proxyConfiguration() const { return m_proxyConfiguration.get(); }
@@ -180,6 +182,7 @@
RetainPtr<DMFWebsitePolicyMonitor> m_deviceManagementPolicyMonitor;
bool m_deviceManagementRestrictionsEnabled { false };
bool m_allLoadsBlockedByDeviceManagementRestrictionsForTesting { false };
+ bool m_webPushDaemonUsesMockBundlesForTesting { false };
bool m_shouldLogCookieInformation { false };
bool m_fastServerTrustEvaluationEnabled { false };
String m_dataConnectionServiceType;
Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm (286354 => 286355)
--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2021-12-01 09:07:47 UTC (rev 286355)
@@ -1347,6 +1347,7 @@
m_deviceManagementRestrictionsEnabled = parameters.deviceManagementRestrictionsEnabled;
m_allLoadsBlockedByDeviceManagementRestrictionsForTesting = parameters.allLoadsBlockedByDeviceManagementRestrictionsForTesting;
+ m_webPushDaemonUsesMockBundlesForTesting = parameters.webPushDaemonConnectionConfiguration.useMockBundlesForTesting;
#if ENABLE(APP_BOUND_DOMAINS)
if (m_resourceLoadStatistics && !parameters.resourceLoadStatisticsParameters.appBoundDomains.isEmpty())
Copied: trunk/Source/WebKit/Shared/WebPushDaemonConnectionConfiguration.h (from rev 286354, trunk/Source/WebKit/Shared/WebPushDaemonConstants.h) (0 => 286355)
--- trunk/Source/WebKit/Shared/WebPushDaemonConnectionConfiguration.h (rev 0)
+++ trunk/Source/WebKit/Shared/WebPushDaemonConnectionConfiguration.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2021 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 <optional>
+#include <wtf/Vector.h>
+
+namespace WebKit::WebPushD {
+
+struct WebPushDaemonConnectionConfiguration {
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static std::optional<WebPushDaemonConnectionConfiguration> decode(Decoder&);
+
+ bool useMockBundlesForTesting { false };
+ std::optional<Vector<uint8_t>> hostAppAuditTokenData;
+};
+
+template<class Encoder>
+void WebPushDaemonConnectionConfiguration::encode(Encoder& encoder) const
+{
+ encoder << useMockBundlesForTesting << hostAppAuditTokenData;
+}
+
+template<class Decoder>
+std::optional<WebPushDaemonConnectionConfiguration> WebPushDaemonConnectionConfiguration::decode(Decoder& decoder)
+{
+ std::optional<bool> useMockBundlesForTesting;
+ decoder >> useMockBundlesForTesting;
+ if (!useMockBundlesForTesting)
+ return std::nullopt;
+
+ std::optional<std::optional<Vector<uint8_t>>> hostAppAuditTokenData;
+ decoder >> hostAppAuditTokenData;
+ if (!hostAppAuditTokenData)
+ return std::nullopt;
+
+ return { {
+ WTFMove(*useMockBundlesForTesting),
+ WTFMove(*hostAppAuditTokenData)
+ } };
+}
+
+} // namespace WebKit::WebPushD
Modified: trunk/Source/WebKit/Shared/WebPushDaemonConstants.h (286354 => 286355)
--- trunk/Source/WebKit/Shared/WebPushDaemonConstants.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/Shared/WebPushDaemonConstants.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -40,8 +40,8 @@
RequestSystemNotificationPermission,
DeletePushAndNotificationRegistration,
GetOriginsWithPushAndNotificationPermissions,
- SetHostAppAuditToken,
SetDebugModeIsEnabled,
+ UpdateConnectionConfiguration,
};
inline bool messageTypeSendsReply(MessageType messageType)
@@ -52,8 +52,8 @@
case MessageType::DeletePushAndNotificationRegistration:
case MessageType::RequestSystemNotificationPermission:
return true;
- case MessageType::SetHostAppAuditToken:
case MessageType::SetDebugModeIsEnabled:
+ case MessageType::UpdateConnectionConfiguration:
return false;
}
ASSERT_NOT_REACHED();
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h (286354 => 286355)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -86,6 +86,7 @@
// Testing only.
@property (nonatomic) BOOL allLoadsBlockedByDeviceManagementRestrictionsForTesting WK_API_AVAILABLE(macos(10.15), ios(13.0));
+@property (nonatomic) BOOL webPushDaemonUsesMockBundlesForTesting WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
@end
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm (286354 => 286355)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm 2021-12-01 09:07:47 UTC (rev 286355)
@@ -561,6 +561,16 @@
_configuration->setAllLoadsBlockedByDeviceManagementRestrictionsForTesting(blocked);
}
+- (BOOL)webPushDaemonUsesMockBundlesForTesting
+{
+ return _configuration->webPushDaemonUsesMockBundlesForTesting();
+}
+
+- (void)setWebPushDaemonUsesMockBundlesForTesting:(BOOL)usesMockBundles
+{
+ _configuration->setWebPushDaemonUsesMockBundlesForTesting(usesMockBundles);
+}
+
- (API::Object&)_apiObject
{
return *_configuration;
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (286354 => 286355)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2021-12-01 09:07:47 UTC (rev 286355)
@@ -1858,6 +1858,7 @@
networkSessionParameters.allowsCellularAccess = configuration().allowsCellularAccess() ? AllowsCellularAccess::Yes : AllowsCellularAccess::No;
networkSessionParameters.deviceManagementRestrictionsEnabled = m_configuration->deviceManagementRestrictionsEnabled();
networkSessionParameters.allLoadsBlockedByDeviceManagementRestrictionsForTesting = m_configuration->allLoadsBlockedByDeviceManagementRestrictionsForTesting();
+ networkSessionParameters.webPushDaemonConnectionConfiguration = m_configuration->webPushDaemonConnectionConfiguration();
networkSessionParameters.networkCacheDirectory = WTFMove(networkCacheDirectory);
networkSessionParameters.networkCacheDirectoryExtensionHandle = WTFMove(networkCacheDirectoryExtensionHandle);
networkSessionParameters.hstsStorageDirectory = WTFMove(hstsStorageDirectory);
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp (286354 => 286355)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp 2021-12-01 09:07:47 UTC (rev 286355)
@@ -26,6 +26,7 @@
#include "config.h"
#include "WebsiteDataStoreConfiguration.h"
+#include "WebPushDaemonConnectionConfiguration.h"
#include "WebsiteDataStore.h"
namespace WebKit {
@@ -90,6 +91,7 @@
copy->m_httpsProxy = this->m_httpsProxy;
copy->m_deviceManagementRestrictionsEnabled = this->m_deviceManagementRestrictionsEnabled;
copy->m_allLoadsBlockedByDeviceManagementRestrictionsForTesting = this->m_allLoadsBlockedByDeviceManagementRestrictionsForTesting;
+ copy->m_webPushDaemonUsesMockBundlesForTesting = this->m_webPushDaemonUsesMockBundlesForTesting;
copy->m_boundInterfaceIdentifier = this->m_boundInterfaceIdentifier;
copy->m_allowsCellularAccess = this->m_allowsCellularAccess;
copy->m_legacyTLSEnabled = this->m_legacyTLSEnabled;
@@ -117,4 +119,9 @@
return copy;
}
+WebPushD::WebPushDaemonConnectionConfiguration WebsiteDataStoreConfiguration::webPushDaemonConnectionConfiguration() const
+{
+ return { m_webPushDaemonUsesMockBundlesForTesting, { } };
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h (286354 => 286355)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -32,6 +32,10 @@
namespace WebKit {
+namespace WebPushD {
+struct WebPushDaemonConnectionConfiguration;
+}
+
enum class IsPersistent : bool { No, Yes };
enum class WillCopyPathsFromExistingConfiguration : bool { No, Yes };
@@ -156,6 +160,10 @@
bool allLoadsBlockedByDeviceManagementRestrictionsForTesting() const { return m_allLoadsBlockedByDeviceManagementRestrictionsForTesting; }
void setAllLoadsBlockedByDeviceManagementRestrictionsForTesting(bool blocked) { m_allLoadsBlockedByDeviceManagementRestrictionsForTesting = blocked; }
+ bool webPushDaemonUsesMockBundlesForTesting() const { return m_webPushDaemonUsesMockBundlesForTesting; }
+ void setWebPushDaemonUsesMockBundlesForTesting(bool usesMockBundles) { m_webPushDaemonUsesMockBundlesForTesting = usesMockBundles; }
+ WebPushD::WebPushDaemonConnectionConfiguration webPushDaemonConnectionConfiguration() const;
+
const String& dataConnectionServiceType() const { return m_dataConnectionServiceType; }
void setDataConnectionServiceType(String&& type) { m_dataConnectionServiceType = WTFMove(type); }
@@ -228,6 +236,7 @@
URL m_httpsProxy;
bool m_deviceManagementRestrictionsEnabled { false };
bool m_allLoadsBlockedByDeviceManagementRestrictionsForTesting { false };
+ bool m_webPushDaemonUsesMockBundlesForTesting { false };
bool m_allowsCellularAccess { true };
bool m_legacyTLSEnabled { true };
bool m_fastServerTrustEvaluationEnabled { false };
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (286354 => 286355)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-12-01 09:07:47 UTC (rev 286355)
@@ -1020,6 +1020,8 @@
517A52D91F43A9DA00DCDC0A /* WebSWServerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A52D61F43A9B600DCDC0A /* WebSWServerConnectionMessages.h */; };
517A530F1F47A86200DCDC0A /* WebSWClientConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517A530E1F47A84300DCDC0A /* WebSWClientConnectionMessageReceiver.cpp */; };
517A53101F47A86200DCDC0A /* WebSWClientConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A530D1F47A84300DCDC0A /* WebSWClientConnectionMessages.h */; };
+ 517B5F2E2757382A002DC22D /* WebPushDaemonConnectionConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 517B5F2D2757382A002DC22D /* WebPushDaemonConnectionConfiguration.h */; };
+ 517B5F2F2757382B002DC22D /* WebPushDaemonConnectionConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 517B5F2D2757382A002DC22D /* WebPushDaemonConnectionConfiguration.h */; };
517CF0E3163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */; };
517CF0E3163A486C00C2950F /* CacheStorageEngineConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517CF0E1163A486C00C2950F /* CacheStorageEngineConnectionMessageReceiver.cpp */; };
517CF0E4163A486C00C2950E /* NetworkProcessConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 517CF0E2163A486C00C2950E /* NetworkProcessConnectionMessages.h */; };
@@ -4374,6 +4376,7 @@
517A530C1F479E9700DCDC0A /* WebSWClientConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSWClientConnection.messages.in; sourceTree = "<group>"; };
517A530D1F47A84300DCDC0A /* WebSWClientConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSWClientConnectionMessages.h; path = DerivedSources/WebKit2/WebSWClientConnectionMessages.h; sourceTree = BUILT_PRODUCTS_DIR; };
517A530E1F47A84300DCDC0A /* WebSWClientConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSWClientConnectionMessageReceiver.cpp; path = DerivedSources/WebKit2/WebSWClientConnectionMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
+ 517B5F2D2757382A002DC22D /* WebPushDaemonConnectionConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPushDaemonConnectionConfiguration.h; sourceTree = "<group>"; };
517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkProcessConnectionMessageReceiver.cpp; path = DerivedSources/WebKit2/NetworkProcessConnectionMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
517CF0E1163A486C00C2950F /* CacheStorageEngineConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CacheStorageEngineConnectionMessageReceiver.cpp; path = DerivedSources/WebKit2/CacheStorageEngineConnectionMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; };
517CF0E2163A486C00C2950E /* NetworkProcessConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkProcessConnectionMessages.h; path = DerivedSources/WebKit2/NetworkProcessConnectionMessages.h; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -7187,6 +7190,7 @@
BC306823125A6B9400E71278 /* WebProcessCreationParameters.cpp */,
BC306822125A6B9400E71278 /* WebProcessCreationParameters.h */,
467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */,
+ 517B5F2D2757382A002DC22D /* WebPushDaemonConnectionConfiguration.h */,
512CD6992721F04900F7F8EC /* WebPushDaemonConstants.h */,
5C8DD37F1FE4519200F2A556 /* WebsiteAutoplayPolicy.h */,
5C8DD3811FE455CA00F2A556 /* WebsiteAutoplayQuirk.h */,
@@ -12451,6 +12455,7 @@
5160E95E274C2A0300567388 /* MockAppBundleRegistry.h in Headers */,
5160E959274C0D8900567388 /* PushAppBundle.h in Headers */,
51F7BB7B2744C50700C45A72 /* PushClientConnection.h in Headers */,
+ 517B5F2F2757382B002DC22D /* WebPushDaemonConnectionConfiguration.h in Headers */,
512CD69F2723393A00F7F8EC /* WebPushDaemon.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -13550,6 +13555,7 @@
5C795D70229F373F003FF1C4 /* WKContextMenuElementInfo.h in Headers */,
5C795D71229F3757003FF1C4 /* WKContextMenuElementInfoPrivate.h in Headers */,
51A555F6128C6C47009ABCEC /* WKContextMenuItem.h in Headers */,
+ 517B5F2E2757382A002DC22D /* WebPushDaemonConnectionConfiguration.h in Headers */,
51A55601128C6D92009ABCEC /* WKContextMenuItemTypes.h in Headers */,
A1EA02381DABFF7E0096021F /* WKContextMenuListener.h in Headers */,
BCC938E11180DE440085E5FE /* WKContextPrivate.h in Headers */,
Modified: trunk/Source/WebKit/webpushd/AppBundleRequest.mm (286354 => 286355)
--- trunk/Source/WebKit/webpushd/AppBundleRequest.mm 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/webpushd/AppBundleRequest.mm 2021-12-01 09:07:47 UTC (rev 286355)
@@ -33,7 +33,7 @@
namespace WebPushD {
AppBundleRequest::AppBundleRequest(ClientConnection& connection, const String& originString)
- : m_connection(&connection)
+ : m_connection(connection)
, m_originString(originString)
{
}
@@ -49,7 +49,11 @@
m_transaction = adoptOSObject(os_transaction_create(transactionDescription()));
- m_appBundle = MockAppBundleForTesting::create(m_originString, m_connection->hostAppCodeSigningIdentifier(), *this);
+ if (m_connection->useMockBundlesForTesting())
+ m_appBundle = MockAppBundleForTesting::create(m_originString, m_connection->hostAppCodeSigningIdentifier(), *this);
+ else
+ RELEASE_ASSERT_NOT_REACHED();
+
startInternal();
}
Modified: trunk/Source/WebKit/webpushd/PushClientConnection.h (286354 => 286355)
--- trunk/Source/WebKit/webpushd/PushClientConnection.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/webpushd/PushClientConnection.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -34,8 +34,15 @@
#include <wtf/spi/darwin/XPCSPI.h>
#include <wtf/text/WTFString.h>
+namespace WebKit {
namespace WebPushD {
+struct WebPushDaemonConnectionConfiguration;
+}
+}
+using WebKit::WebPushD::WebPushDaemonConnectionConfiguration;
+namespace WebPushD {
+
class AppBundleRequest;
class ClientConnection : public RefCounted<ClientConnection>, public CanMakeWeakPtr<ClientConnection> {
@@ -43,8 +50,9 @@
public:
static Ref<ClientConnection> create(xpc_connection_t);
+ void updateConnectionConfiguration(const WebPushDaemonConnectionConfiguration&);
+
bool hasHostAppAuditToken() const { return !!m_hostAppAuditToken; }
- void setHostAppAuditTokenData(const Vector<uint8_t>&);
const String& hostAppCodeSigningIdentifier();
bool hostAppHasPushEntitlement();
@@ -52,6 +60,8 @@
bool debugModeIsEnabled() const { return m_debugModeEnabled; }
void setDebugModeIsEnabled(bool);
+ bool useMockBundlesForTesting() const { return m_useMockBundlesForTesting; }
+
void enqueueAppBundleRequest(std::unique_ptr<AppBundleRequest>&&);
void didCompleteAppBundleRequest(AppBundleRequest&);
@@ -61,7 +71,8 @@
ClientConnection(xpc_connection_t);
void maybeStartNextAppBundleRequest();
-
+ void setHostAppAuditTokenData(const Vector<uint8_t>&);
+
OSObjectPtr<xpc_connection_t> m_xpcConnection;
std::optional<audit_token_t> m_hostAppAuditToken;
@@ -72,6 +83,7 @@
std::unique_ptr<AppBundleRequest> m_currentBundleRequest;
bool m_debugModeEnabled { false };
+ bool m_useMockBundlesForTesting { false };
};
} // namespace WebPushD
Modified: trunk/Source/WebKit/webpushd/PushClientConnection.mm (286354 => 286355)
--- trunk/Source/WebKit/webpushd/PushClientConnection.mm 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/webpushd/PushClientConnection.mm 2021-12-01 09:07:47 UTC (rev 286355)
@@ -29,6 +29,7 @@
#import "AppBundleRequest.h"
#import "CodeSigning.h"
#import "WebPushDaemon.h"
+#import "WebPushDaemonConnectionConfiguration.h"
#import <_javascript_Core/ConsoleTypes.h>
#import <wtf/Vector.h>
#import <wtf/cocoa/Entitlements.h>
@@ -45,10 +46,16 @@
{
}
+void ClientConnection::updateConnectionConfiguration(const WebPushDaemonConnectionConfiguration& configuration)
+{
+ if (configuration.hostAppAuditTokenData)
+ setHostAppAuditTokenData(*configuration.hostAppAuditTokenData);
+
+ m_useMockBundlesForTesting = configuration.useMockBundlesForTesting;
+}
+
void ClientConnection::setHostAppAuditTokenData(const Vector<uint8_t>& tokenData)
{
- RELEASE_ASSERT(!hasHostAppAuditToken());
-
audit_token_t token;
if (tokenData.size() != sizeof(token)) {
ASSERT_WITH_MESSAGE(false, "Attempt to set an audit token from incorrect number of bytes");
@@ -56,6 +63,14 @@
}
memcpy(&token, tokenData.data(), tokenData.size());
+
+ if (hasHostAppAuditToken()) {
+ // Verify the token being set is equivalent to the last one set
+ audit_token_t& existingAuditToken = *m_hostAppAuditToken;
+ RELEASE_ASSERT(!memcmp(&existingAuditToken, &token, sizeof(token)));
+ return;
+ }
+
m_hostAppAuditToken = WTFMove(token);
}
Modified: trunk/Source/WebKit/webpushd/WebPushDaemon.h (286354 => 286355)
--- trunk/Source/WebKit/webpushd/WebPushDaemon.h 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/webpushd/WebPushDaemon.h 2021-12-01 09:07:47 UTC (rev 286355)
@@ -26,6 +26,7 @@
#pragma once
#include "PushClientConnection.h"
+#include "WebPushDaemonConnectionConfiguration.h"
#include "WebPushDaemonConstants.h"
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
@@ -39,6 +40,8 @@
enum class MessageLevel : uint8_t;
}
+using WebKit::WebPushD::WebPushDaemonConnectionConfiguration;
+
namespace WebPushD {
using EncodedMessage = Vector<uint8_t>;
@@ -57,8 +60,8 @@
void requestSystemNotificationPermission(ClientConnection*, const String&, CompletionHandler<void(bool)>&& replySender);
void getOriginsWithPushAndNotificationPermissions(ClientConnection*, CompletionHandler<void(const Vector<String>&)>&& replySender);
void deletePushAndNotificationRegistration(ClientConnection*, const String& originString, CompletionHandler<void(const String&)>&& replySender);
- void setHostAppAuditToken(ClientConnection*, const Vector<uint8_t>&);
void setDebugModeIsEnabled(ClientConnection*, bool);
+ void updateConnectionConfiguration(ClientConnection*, const WebPushDaemonConnectionConfiguration&);
void broadcastDebugMessage(JSC::MessageLevel, const String&);
Modified: trunk/Source/WebKit/webpushd/WebPushDaemon.mm (286354 => 286355)
--- trunk/Source/WebKit/webpushd/WebPushDaemon.mm 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Source/WebKit/webpushd/WebPushDaemon.mm 2021-12-01 09:07:47 UTC (rev 286355)
@@ -32,7 +32,6 @@
#import "DaemonUtilities.h"
#import "HandleMessage.h"
#import "MockAppBundleRegistry.h"
-#import "WebPushDaemonConstants.h"
#import <wtf/CompletionHandler.h>
#import <wtf/NeverDestroyed.h>
@@ -70,14 +69,14 @@
REPLY(bool)
END
-FUNCTION(setHostAppAuditToken)
-ARGUMENTS(Vector<uint8_t>)
-END
-
FUNCTION(setDebugModeIsEnabled)
ARGUMENTS(bool)
END
+FUNCTION(updateConnectionConfiguration)
+ARGUMENTS(WebPushDaemonConnectionConfiguration)
+END
+
#undef FUNCTION
#undef ARGUMENTS
#undef REPLY
@@ -225,12 +224,12 @@
case MessageType::RequestSystemNotificationPermission:
handleWebPushDMessageWithReply<MessageInfo::requestSystemNotificationPermission>(clientConnection, encodedMessage, WTFMove(replySender));
break;
- case MessageType::SetHostAppAuditToken:
- handleWebPushDMessage<MessageInfo::setHostAppAuditToken>(clientConnection, encodedMessage);
- break;
case MessageType::SetDebugModeIsEnabled:
handleWebPushDMessage<MessageInfo::setDebugModeIsEnabled>(clientConnection, encodedMessage);
break;
+ case MessageType::UpdateConnectionConfiguration:
+ handleWebPushDMessage<MessageInfo::updateConnectionConfiguration>(clientConnection, encodedMessage);
+ break;
}
}
@@ -266,8 +265,13 @@
return;
}
+ if (connection->useMockBundlesForTesting()) {
+ replySender(MockAppBundleRegistry::singleton().getOriginsWithRegistrations(connection->hostAppCodeSigningIdentifier()));
+ return;
+ }
+
// FIXME: This will need platform-specific implementations for real world bundles once implemented.
- replySender(MockAppBundleRegistry::singleton().getOriginsWithRegistrations(connection->hostAppCodeSigningIdentifier()));
+ replySender({ });
}
void Daemon::deletePushAndNotificationRegistration(ClientConnection* connection, const String& originString, CompletionHandler<void(const String&)>&& replySender)
@@ -280,14 +284,14 @@
connection->enqueueAppBundleRequest(makeUnique<AppBundleDeletionRequest>(*connection, originString, WTFMove(replySender)));
}
-void Daemon::setHostAppAuditToken(ClientConnection* clientConnection, const Vector<uint8_t>& tokenData)
+void Daemon::setDebugModeIsEnabled(ClientConnection* clientConnection, bool enabled)
{
- clientConnection->setHostAppAuditTokenData(tokenData);
+ clientConnection->setDebugModeIsEnabled(enabled);
}
-void Daemon::setDebugModeIsEnabled(ClientConnection* clientConnection, bool enabled)
+void Daemon::updateConnectionConfiguration(ClientConnection* clientConnection, const WebPushDaemonConnectionConfiguration& configuration)
{
- clientConnection->setDebugModeIsEnabled(enabled);
+ clientConnection->updateConnectionConfiguration(configuration);
}
ClientConnection* Daemon::toClientConnection(xpc_connection_t connection)
Modified: trunk/Tools/ChangeLog (286354 => 286355)
--- trunk/Tools/ChangeLog 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Tools/ChangeLog 2021-12-01 09:07:47 UTC (rev 286355)
@@ -1,3 +1,12 @@
+2021-12-01 Brady Eidson <beid...@apple.com>
+
+ Add WKWebsiteDataStore configuration option to enable Mock app bundle testing.
+ https://bugs.webkit.org/show_bug.cgi?id=233679
+
+ Reviewed by Tim Horton.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:
+
2021-11-30 Devin Rousso <drou...@apple.com>
[css-values-4] Dynamic `dv*` viewport units should not respect the page scale
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm (286354 => 286355)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm 2021-12-01 08:21:48 UTC (rev 286354)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm 2021-12-01 09:07:47 UTC (rev 286355)
@@ -265,6 +265,7 @@
auto dataStoreConfiguration = adoptNS([_WKWebsiteDataStoreConfiguration new]);
dataStoreConfiguration.get().webPushMachServiceName = @"org.webkit.webpushtestdaemon.service";
+ dataStoreConfiguration.get().webPushDaemonUsesMockBundlesForTesting = YES;
auto dataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration.get()]);
auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);