Title: [287720] trunk/Source
Revision
287720
Author
timothy_hor...@apple.com
Date
2022-01-06 15:39:49 -0800 (Thu, 06 Jan 2022)

Log Message

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.

Source/WebCore:

* 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.

Source/WebKit:

* 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().

Source/WTF:

* 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.

Modified Paths

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())
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to