Diff
Modified: trunk/Source/WTF/ChangeLog (287719 => 287720)
--- trunk/Source/WTF/ChangeLog 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WTF/ChangeLog 2022-01-06 23:39:49 UTC (rev 287720)
@@ -1,3 +1,23 @@
+2022-01-06 Tim Horton <timothy_hor...@apple.com>
+
+ Separate "linked-on-or-{before, after}-everything" override from the SDK version
+ https://bugs.webkit.org/show_bug.cgi?id=234930
+
+ Reviewed by Wenson Hsieh.
+
+ * wtf/cocoa/RuntimeApplicationChecksCocoa.cpp:
+ (WTF::linkedOnOrAfterOverrideValue):
+ (WTF::setLinkedOnOrAfterOverride):
+ (WTF::linkedOnOrAfterOverride):
+ * wtf/cocoa/RuntimeApplicationChecksCocoa.h:
+ Add an explicit optional bit for "this application should pretend to be
+ linked on or {after, before} everything" instead of just overriding the
+ SDK version. This is a prerequisite for getting rid of applicationSDKVersion(),
+ which will happen in a future patch.
+
+ This is in WTF because linkedOnOrAfter() is going to move here in a
+ future patch as well.
+
2022-01-06 Stephan Szabo <stephan.sz...@sony.com>
[PlayStation] Fix build break after r287698
Modified: trunk/Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.cpp (287719 => 287720)
--- trunk/Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.cpp 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.cpp 2022-01-06 23:39:49 UTC (rev 287720)
@@ -48,4 +48,20 @@
return dyld_get_program_sdk_version();
}
+static std::optional<LinkedOnOrAfterOverride>& linkedOnOrAfterOverrideValue()
+{
+ static NeverDestroyed<std::optional<LinkedOnOrAfterOverride>> linkedOnOrAfter;
+ return linkedOnOrAfter;
}
+
+void setLinkedOnOrAfterOverride(std::optional<LinkedOnOrAfterOverride> linkedOnOrAfter)
+{
+ linkedOnOrAfterOverrideValue() = linkedOnOrAfter;
+}
+
+std::optional<LinkedOnOrAfterOverride> linkedOnOrAfterOverride()
+{
+ return linkedOnOrAfterOverrideValue();
+}
+
+}
Modified: trunk/Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.h (287719 => 287720)
--- trunk/Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.h 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WTF/wtf/cocoa/RuntimeApplicationChecksCocoa.h 2022-01-06 23:39:49 UTC (rev 287720)
@@ -25,6 +25,7 @@
#pragma once
+#include <optional>
#include <wtf/Forward.h>
// This contains the values with which to compare the return value of applicationSDKVersion().
@@ -37,7 +38,17 @@
WTF_EXPORT_PRIVATE void setApplicationSDKVersion(uint32_t);
WTF_EXPORT_PRIVATE uint32_t applicationSDKVersion();
+enum class LinkedOnOrAfterOverride : uint8_t {
+ BeforeEverything,
+ AfterEverything
+};
+WTF_EXPORT_PRIVATE void setLinkedOnOrAfterOverride(std::optional<LinkedOnOrAfterOverride>);
+WTF_EXPORT_PRIVATE std::optional<LinkedOnOrAfterOverride> linkedOnOrAfterOverride();
+
}
using WTF::setApplicationSDKVersion;
using WTF::applicationSDKVersion;
+using WTF::LinkedOnOrAfterOverride;
+using WTF::setLinkedOnOrAfterOverride;
+using WTF::linkedOnOrAfterOverride;
Modified: trunk/Source/WebCore/ChangeLog (287719 => 287720)
--- trunk/Source/WebCore/ChangeLog 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebCore/ChangeLog 2022-01-06 23:39:49 UTC (rev 287720)
@@ -1,3 +1,18 @@
+2022-01-06 Tim Horton <timothy_hor...@apple.com>
+
+ Separate "linked-on-or-{before, after}-everything" override from the SDK version
+ https://bugs.webkit.org/show_bug.cgi?id=234930
+
+ Reviewed by Wenson Hsieh.
+
+ * platform/cocoa/VersionChecks.mm:
+ (WebCore::linkedOnOrAfter):
+ Make use of the new bit instead of checking for Safari's bundle identifier.
+
+ * testing/js/WebCoreTestSupport.cpp:
+ (WebCoreTestSupport::setLinkedOnOrAfterEverythingForTesting):
+ Adopt the new bit.
+
2022-01-06 Youenn Fablet <you...@apple.com>
Microphone device filtering heuristic is too harsh
Modified: trunk/Source/WebCore/platform/cocoa/VersionChecks.mm (287719 => 287720)
--- trunk/Source/WebCore/platform/cocoa/VersionChecks.mm 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebCore/platform/cocoa/VersionChecks.mm 2022-01-06 23:39:49 UTC (rev 287720)
@@ -35,15 +35,9 @@
bool linkedOnOrAfter(SDKVersion sdkVersion)
{
-#if PLATFORM(IOS_FAMILY)
- bool isSafari = WebCore::IOSApplication::isMobileSafari();
-#elif PLATFORM(MAC)
- bool isSafari = WebCore::MacApplication::isSafari();
-#endif
+ if (auto overrideValue = linkedOnOrAfterOverride())
+ return *overrideValue == LinkedOnOrAfterOverride::AfterEverything;
- if (isSafari)
- return true;
-
auto sdkVersionAsInteger = static_cast<uint32_t>(sdkVersion);
return sdkVersionAsInteger && applicationSDKVersion() >= sdkVersionAsInteger;
}
Modified: trunk/Source/WebCore/testing/js/WebCoreTestSupport.cpp (287719 => 287720)
--- trunk/Source/WebCore/testing/js/WebCoreTestSupport.cpp 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebCore/testing/js/WebCoreTestSupport.cpp 2022-01-06 23:39:49 UTC (rev 287720)
@@ -152,6 +152,7 @@
{
#if PLATFORM(COCOA)
setApplicationSDKVersion(std::numeric_limits<uint32_t>::max());
+ setLinkedOnOrAfterOverride(LinkedOnOrAfterOverride::AfterEverything);
#endif
}
Modified: trunk/Source/WebKit/ChangeLog (287719 => 287720)
--- trunk/Source/WebKit/ChangeLog 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/ChangeLog 2022-01-06 23:39:49 UTC (rev 287720)
@@ -1,3 +1,35 @@
+2022-01-06 Tim Horton <timothy_hor...@apple.com>
+
+ Separate "linked-on-or-{before, after}-everything" override from the SDK version
+ https://bugs.webkit.org/show_bug.cgi?id=234930
+
+ Reviewed by Wenson Hsieh.
+
+ * Shared/AuxiliaryProcess.h:
+ * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
+ (WebKit::AuxiliaryProcess::platformInitialize):
+ * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
+ (WebKit::XPCServiceInitializer):
+ * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm:
+ (WebKit::XPCServiceInitializerDelegate::getLinkedOnOrAfterOverride):
+ Plumb the LOA override optional through process initialization (just like
+ we do for SDK version, because linkedOnOrAfter() is used VERY early in
+ _javascript_Core initialization).
+
+ * UIProcess/API/Cocoa/WKProcessPool.mm:
+ (+[WKProcessPool _setLinkedOnOrBeforeEverythingForTesting]):
+ (+[WKProcessPool _setLinkedOnOrAfterEverythingForTesting]):
+ (+[WKProcessPool _setLinkedOnOrAfterEverything]):
+ * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+ Expose non-testing SPI for Safari to opt in to "linked-on-or-after-everything"
+ so that we can (eventually) stop using a bundle identifier check.
+
+ * UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm:
+ (WebKit::ProcessLauncher::launchProcess):
+
+ * UIProcess/WebProcessPool.cpp:
+ Initialize the LOA override using the same logic we previously used in linkedOnOrAfter().
+
2022-01-06 Youenn Fablet <you...@apple.com>
Microphone device filtering heuristic is too harsh
Modified: trunk/Source/WebKit/Shared/AuxiliaryProcess.h (287719 => 287720)
--- trunk/Source/WebKit/Shared/AuxiliaryProcess.h 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/Shared/AuxiliaryProcess.h 2022-01-06 23:39:49 UTC (rev 287720)
@@ -38,6 +38,7 @@
#if PLATFORM(COCOA)
#include <wtf/RetainPtr.h>
+#include <wtf/cocoa/RuntimeApplicationChecksCocoa.h>
#endif
OBJC_CLASS NSDictionary;
@@ -195,6 +196,7 @@
WebCore::AuxiliaryProcessType processType;
#if PLATFORM(COCOA)
OSObjectPtr<xpc_object_t> priorityBoostMessage;
+ std::optional<LinkedOnOrAfterOverride> clientLinkedOnOrAfterOverride;
#endif
};
Modified: trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm (287719 => 287720)
--- trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm 2022-01-06 23:39:49 UTC (rev 287720)
@@ -78,6 +78,7 @@
WebCore::setApplicationBundleIdentifier(parameters.clientBundleIdentifier);
setApplicationSDKVersion(parameters.clientSDKVersion);
+ setLinkedOnOrAfterOverride(parameters.clientLinkedOnOrAfterOverride);
}
void AuxiliaryProcess::didReceiveInvalidMessage(IPC::Connection&, IPC::MessageName messageName)
Modified: trunk/Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h (287719 => 287720)
--- trunk/Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h 2022-01-06 23:39:49 UTC (rev 287720)
@@ -29,6 +29,7 @@
#import "WebKit2Initialize.h"
#import <_javascript_Core/ExecutableAllocator.h>
#import <wtf/OSObjectPtr.h>
+#import <wtf/cocoa/RuntimeApplicationChecksCocoa.h>
#import <wtf/spi/darwin/XPCSPI.h>
// FIXME: This should be moved to an SPI header.
@@ -63,6 +64,7 @@
virtual bool getClientBundleIdentifier(String& clientBundleIdentifier);
virtual bool getClientSDKVersion(uint32_t& clientSDKVersion);
virtual bool getClientProcessName(String& clientProcessName);
+ virtual bool getLinkedOnOrAfterOverride(std::optional<LinkedOnOrAfterOverride>&);
virtual bool getExtraInitializationData(HashMap<String, String>& extraInitializationData);
protected:
@@ -131,6 +133,8 @@
// The host process may not have a bundle identifier (e.g. a command line app), so don't require one.
delegate.getClientBundleIdentifier(parameters.clientBundleIdentifier);
+
+ delegate.getLinkedOnOrAfterOverride(parameters.clientLinkedOnOrAfterOverride);
if (!delegate.getClientSDKVersion(parameters.clientSDKVersion))
exit(EXIT_FAILURE);
Modified: trunk/Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm (287719 => 287720)
--- trunk/Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.mm 2022-01-06 23:39:49 UTC (rev 287720)
@@ -88,6 +88,16 @@
return version.has_value();
}
+bool XPCServiceInitializerDelegate::getLinkedOnOrAfterOverride(std::optional<LinkedOnOrAfterOverride>& linkedOnOrAfterOverride)
+{
+ auto linkedOnOrAfterOverrideValue = xpc_dictionary_get_value(m_initializerMessage, "client-linked-on-or-after-override");
+ if (linkedOnOrAfterOverrideValue)
+ linkedOnOrAfterOverride = xpc_bool_get_value(linkedOnOrAfterOverrideValue) ? LinkedOnOrAfterOverride::AfterEverything : LinkedOnOrAfterOverride::BeforeEverything;
+ else
+ linkedOnOrAfterOverride = std::nullopt;
+ return true;
+}
+
bool XPCServiceInitializerDelegate::getProcessIdentifier(WebCore::ProcessIdentifier& identifier)
{
auto parsedIdentifier = parseInteger<uint64_t>(xpc_dictionary_get_string(m_initializerMessage, "process-identifier"));
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (287719 => 287720)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm 2022-01-06 23:39:49 UTC (rev 287720)
@@ -492,11 +492,18 @@
+ (void)_setLinkedOnOrBeforeEverythingForTesting
{
setApplicationSDKVersion(0);
+ setLinkedOnOrAfterOverride(LinkedOnOrAfterOverride::BeforeEverything);
}
+ (void)_setLinkedOnOrAfterEverythingForTesting
{
+ [self _setLinkedOnOrAfterEverything];
+}
+
++ (void)_setLinkedOnOrAfterEverything
+{
setApplicationSDKVersion(std::numeric_limits<uint32_t>::max());
+ setLinkedOnOrAfterOverride(LinkedOnOrAfterOverride::AfterEverything);
}
+ (void)_setCaptivePortalModeEnabledGloballyForTesting:(BOOL)isEnabled
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (287719 => 287720)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2022-01-06 23:39:49 UTC (rev 287720)
@@ -92,6 +92,8 @@
- (_WKDownload *)_downloadURLRequest:(NSURLRequest *)request websiteDataStore:(WKWebsiteDataStore *)dataStore originatingWebView:(WKWebView *)webView WK_API_DEPRECATED_WITH_REPLACEMENT("WKWebView _downloadRequest", macos(10.10, 12.0), ios(8.0, 15.0));
- (_WKDownload *)_resumeDownloadFromData:(NSData *)resumeData websiteDataStore:(WKWebsiteDataStore *)dataStore path:(NSString *)path originatingWebView:(WKWebView *)webView WK_API_DEPRECATED_WITH_REPLACEMENT("WKWebView.resumeDownloadFromResumeData:completionHandler:", macos(10.10, 12.0), ios(8.0, 15.0));
++ (void)_setLinkedOnOrAfterEverything WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
// Test only. Should be called only while no web content processes are running.
- (void)_terminateServiceWorkers WK_API_AVAILABLE(macos(10.14), ios(12.0));
Modified: trunk/Source/WebKit/UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm (287719 => 287720)
--- trunk/Source/WebKit/UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/UIProcess/Launcher/cocoa/ProcessLauncherCocoa.mm 2022-01-06 23:39:49 UTC (rev 287720)
@@ -231,6 +231,9 @@
xpc_dictionary_set_fd(bootstrapMessage.get(), "stdout", STDOUT_FILENO);
xpc_dictionary_set_fd(bootstrapMessage.get(), "stderr", STDERR_FILENO);
}
+
+ if (auto linkedOnOrAfterOverrideValue = linkedOnOrAfterOverride())
+ xpc_dictionary_set_bool(bootstrapMessage.get(), "client-linked-on-or-after-override", *linkedOnOrAfterOverrideValue == LinkedOnOrAfterOverride::AfterEverything);
auto extraInitializationData = adoptOSObject(xpc_dictionary_create(nullptr, nullptr, 0));
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (287719 => 287720)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2022-01-06 23:18:46 UTC (rev 287719)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2022-01-06 23:39:49 UTC (rev 287720)
@@ -226,7 +226,16 @@
Process::setIdentifier(WebCore::ProcessIdentifier::generate());
#if PLATFORM(COCOA)
determineITPState();
+
+ // This can be removed once Safari calls _setLinkedOnOrAfterEverything everywhere that WebKit deploys.
+#if PLATFORM(IOS_FAMILY)
+ bool isSafari = WebCore::IOSApplication::isMobileSafari();
+#elif PLATFORM(MAC)
+ bool isSafari = WebCore::MacApplication::isSafari();
#endif
+ if (isSafari)
+ setLinkedOnOrAfterOverride(LinkedOnOrAfterOverride::AfterEverything);
+#endif
});
for (auto& scheme : m_configuration->alwaysRevalidatedURLSchemes())