Revert r241223, r241235, and r241287
authorachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 2 Mar 2019 02:29:40 +0000 (02:29 +0000)
committerachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 2 Mar 2019 02:29:40 +0000 (02:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194427
<rdar://48045861>

Source/WebKit:

This caused crashes, and feature design has evolved away from needing the daemon in this form.

* NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm:
(WebKit::DaemonMain):
* Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
* Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
(WebKit::XPCServiceEventHandler):
(WebKit::XPCServiceMain):
(WebKit::XPCEventHandler): Deleted.
(WebKit::XPCInitializationHandler): Deleted.
* UIProcess/API/APIProcessPoolConfiguration.h:
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
(-[_WKProcessPoolConfiguration usesNetworkingDaemon]): Deleted.
(-[_WKProcessPoolConfiguration setUsesNetworkingDaemon:]): Deleted.
* UIProcess/AuxiliaryProcessProxy.cpp:
(WebKit::AuxiliaryProcessProxy::getLaunchOptions):
* UIProcess/Launcher/ProcessLauncher.h:
* UIProcess/Launcher/mac/ProcessLauncherMac.mm:
(WebKit::serviceName):
(WebKit::ProcessLauncher::launchProcess):
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::getLaunchOptions):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::usesNetworkingDaemon const): Deleted.
* UIProcess/WebProcessPool.h:

Source/WTF:

* wtf/spi/darwin/XPCSPI.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242303 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
Source/WTF/ChangeLog
Source/WTF/wtf/spi/darwin/XPCSPI.h
Source/WebKit/ChangeLog
Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm
Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h
Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm
Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h
Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h
Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm
Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp
Source/WebKit/UIProcess/Launcher/ProcessLauncher.h
Source/WebKit/UIProcess/Launcher/mac/ProcessLauncherMac.mm
Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
Source/WebKit/UIProcess/WebProcessPool.cpp
Source/WebKit/UIProcess/WebProcessPool.h

index 48b2608..5b86b5a 100644 (file)
@@ -1,3 +1,11 @@
+2019-03-01  Alex Christensen  <achristensen@webkit.org>
+
+        Revert r241223, r241235, and r241287
+        https://bugs.webkit.org/show_bug.cgi?id=194427
+        <rdar://48045861>
+
+        * wtf/spi/darwin/XPCSPI.h:
+
 2019-03-01  Simon Fraser  <simon.fraser@apple.com>
 
         Add a system trace scope for event region building
index 435a372..71edd87 100644 (file)
@@ -156,6 +156,8 @@ void xpc_connection_set_instance(xpc_connection_t, uuid_t);
 mach_port_t xpc_dictionary_copy_mach_send(xpc_object_t, const char*);
 void xpc_dictionary_set_mach_send(xpc_object_t, const char*, mach_port_t);
 
+void xpc_connection_set_bootstrap(xpc_connection_t, xpc_object_t);
+xpc_object_t xpc_copy_bootstrap();
 void xpc_connection_set_oneshot_instance(xpc_connection_t, uuid_t instance);
 
 void xpc_array_append_value(xpc_object_t xarray, xpc_object_t value);
index d862d95..cae8f7a 100644 (file)
@@ -1,5 +1,38 @@
 2019-03-01  Alex Christensen  <achristensen@webkit.org>
 
+        Revert r241223, r241235, and r241287
+        https://bugs.webkit.org/show_bug.cgi?id=194427
+        <rdar://48045861>
+
+        This caused crashes, and feature design has evolved away from needing the daemon in this form.
+
+        * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm:
+        (WebKit::DaemonMain):
+        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h:
+        * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm:
+        (WebKit::XPCServiceEventHandler):
+        (WebKit::XPCServiceMain):
+        (WebKit::XPCEventHandler): Deleted.
+        (WebKit::XPCInitializationHandler): Deleted.
+        * UIProcess/API/APIProcessPoolConfiguration.h:
+        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
+        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
+        (-[_WKProcessPoolConfiguration usesNetworkingDaemon]): Deleted.
+        (-[_WKProcessPoolConfiguration setUsesNetworkingDaemon:]): Deleted.
+        * UIProcess/AuxiliaryProcessProxy.cpp:
+        (WebKit::AuxiliaryProcessProxy::getLaunchOptions):
+        * UIProcess/Launcher/ProcessLauncher.h:
+        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
+        (WebKit::serviceName):
+        (WebKit::ProcessLauncher::launchProcess):
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::getLaunchOptions):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::usesNetworkingDaemon const): Deleted.
+        * UIProcess/WebProcessPool.h:
+
+2019-03-01  Alex Christensen  <achristensen@webkit.org>
+
         Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier
         https://bugs.webkit.org/show_bug.cgi?id=195229
         <rdar://problem/48520362>
index 1922840..4ae2296 100644 (file)
 #import "config.h"
 #import "DaemonEntryPoint.h"
 
-#import "XPCServiceEntryPoint.h"
-#import <wtf/spi/darwin/XPCSPI.h>
-
 namespace WebKit {
     
-int DaemonMain(int argc, const char** argv)
+int DaemonMain(int, const char**)
 {
-    if (argc < 2 || strcmp(argv[1], "WebKitNetworkingDaemon")) {
-        WTFLogAlways("Unexpected daemon parameters");
-        return EXIT_FAILURE;
-    }
-
-    xpc_connection_t listener = xpc_connection_create_mach_service("com.apple.WebKit.NetworkingDaemon", dispatch_get_main_queue(), XPC_CONNECTION_MACH_SERVICE_LISTENER);
-    
-    xpc_connection_set_event_handler(listener, ^(xpc_object_t peer) {
-        if (!peer || xpc_get_type(peer) != XPC_TYPE_CONNECTION) {
-            WTFLogAlways("Unexpected XPC object");
-            return;
-        }
-
-        XPCEventHandler(peer, AuxiliaryProcessType::Daemon);
-    });
-
-    xpc_connection_resume(listener);
-    CFRunLoopRun();
-
-    return EXIT_SUCCESS;
+    return 0;
 }
 
 }
index 0eca717..c563273 100644 (file)
@@ -130,9 +130,6 @@ ALLOW_DEPRECATED_DECLARATIONS_END
 
 int XPCServiceMain(int, const char**);
 
-enum class AuxiliaryProcessType { Daemon, XPCService };
-void XPCEventHandler(xpc_connection_t, AuxiliaryProcessType);
-
 void XPCServiceExit(OSObjectPtr<xpc_object_t>&& priorityBoostMessage);
 
 } // namespace WebKit
index 2cfc787..d673c32 100644 (file)
@@ -38,9 +38,7 @@
 
 namespace WebKit {
 
-void XPCInitializationHandler(xpc_object_t);
-
-void XPCEventHandler(xpc_connection_t peer, AuxiliaryProcessType processType)
+static void XPCServiceEventHandler(xpc_connection_t peer)
 {
     static xpc_object_t priorityBoostMessage = nullptr;
 
@@ -49,20 +47,13 @@ void XPCEventHandler(xpc_connection_t peer, AuxiliaryProcessType processType)
         xpc_type_t type = xpc_get_type(event);
         if (type == XPC_TYPE_ERROR) {
             if (event == XPC_ERROR_CONNECTION_INVALID || event == XPC_ERROR_TERMINATION_IMMINENT) {
-                if (processType == AuxiliaryProcessType::XPCService) {
-                    // FIXME: Handle this case more gracefully.
-                    exit(EXIT_FAILURE);
-                } else {
-                    // FIXME: Deref the NetworkProcess object associated with this xpc connection
-                    // once we have a container for such objects.
-                }
+                // FIXME: Handle this case more gracefully.
+                exit(EXIT_FAILURE);
             }
         } else {
             assert(type == XPC_TYPE_DICTIONARY);
 
             if (!strcmp(xpc_dictionary_get_string(event, "message-name"), "bootstrap")) {
-                XPCInitializationHandler(xpc_dictionary_get_value(event, "initialization-message"));
-                
                 CFBundleRef webKitBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebKit"));
                 CFStringRef entryPointFunctionName = (CFStringRef)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), CFSTR("WebKitEntryPoint"));
 
@@ -101,33 +92,30 @@ void XPCEventHandler(xpc_connection_t peer, AuxiliaryProcessType processType)
     xpc_connection_resume(peer);
 }
 
-void XPCInitializationHandler(xpc_object_t event)
+int XPCServiceMain(int, const char**)
 {
-    ASSERT(event);
-    ASSERT(xpc_get_type(event) == XPC_TYPE_DICTIONARY);
-
-    static std::once_flag once;
-    std::call_once(once, [event] {
 #if defined(__i386__)
-        // FIXME: This should only be done for the 32-bit plug-in XPC service so we rely on the fact that
-        // it's the only of the XPC services that are 32-bit. We should come up with a more targeted #if check.
-        @autoreleasepool {
-            // We must set the state of AppleMagnifiedMode before NSApplication initialization so that the value will be in
-            // place before Cocoa startup logic runs and caches the value.
-            [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"AppleMagnifiedMode" : @YES }];
-        }
+    // FIXME: This should only be done for the 32-bit plug-in XPC service so we rely on the fact that
+    // it's the only of the XPC services that are 32-bit. We should come up with a more targeted #if check.
+    @autoreleasepool {
+        // We must set the state of AppleMagnifiedMode before NSApplication initialization so that the value will be in
+        // place before Cocoa startup logic runs and caches the value.
+        [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"AppleMagnifiedMode" : @YES }];
+    }
 #endif
 
+    auto bootstrap = adoptOSObject(xpc_copy_bootstrap());
 #if PLATFORM(IOS_FAMILY)
-        auto containerEnvironmentVariables = xpc_dictionary_get_value(event, "ContainerEnvironmentVariables");
-        xpc_dictionary_apply(containerEnvironmentVariables, ^(const char *key, xpc_object_t value) {
-            setenv(key, xpc_string_get_string_ptr(value), 1);
-            return true;
-        });
+    auto containerEnvironmentVariables = xpc_dictionary_get_value(bootstrap.get(), "ContainerEnvironmentVariables");
+    xpc_dictionary_apply(containerEnvironmentVariables, ^(const char *key, xpc_object_t value) {
+        setenv(key, xpc_string_get_string_ptr(value), 1);
+        return true;
+    });
 #endif
 
+    if (bootstrap) {
 #if PLATFORM(MAC)
-        if (const char* webKitBundleVersion = xpc_dictionary_get_string(event, "WebKitBundleVersion")) {
+        if (const char* webKitBundleVersion = xpc_dictionary_get_string(bootstrap.get(), "WebKitBundleVersion")) {
             CFBundleRef webKitBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebKit"));
             NSString *expectedBundleVersion = (NSString *)CFBundleGetValueForInfoDictionaryKey(webKitBundle, kCFBundleVersionKey);
 
@@ -138,7 +126,7 @@ void XPCInitializationHandler(xpc_object_t event)
         }
 #endif
 
-        if (xpc_object_t languages = xpc_dictionary_get_value(event, "OverrideLanguages")) {
+        if (xpc_object_t languages = xpc_dictionary_get_value(bootstrap.get(), "OverrideLanguages")) {
             @autoreleasepool {
                 NSDictionary *existingArguments = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSArgumentDomain];
                 NSMutableDictionary *newArguments = [existingArguments mutableCopy];
@@ -151,15 +139,12 @@ void XPCInitializationHandler(xpc_object_t event)
                 [[NSUserDefaults standardUserDefaults] setVolatileDomain:newArguments forName:NSArgumentDomain];
             }
         }
-    });
-}
+    }
 
-int XPCServiceMain(int, const char**)
-{
 #if PLATFORM(MAC)
     // Don't allow Apple Events in WebKit processes. This can be removed when <rdar://problem/14012823> is fixed.
     setenv("__APPLEEVENTSSERVICENAME", "", 1);
-    
+
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
     // We don't need to talk to the dock.
     if (Class nsApplicationClass = NSClassFromString(@"NSApplication")) {
@@ -169,9 +154,7 @@ int XPCServiceMain(int, const char**)
 #endif
 #endif
 
-    xpc_main([] (xpc_connection_t peer) {
-        XPCEventHandler(peer, AuxiliaryProcessType::XPCService);
-    });
+    xpc_main(XPCServiceEventHandler);
     return 0;
 }
 
index a016612..4fe2e41 100644 (file)
@@ -185,9 +185,6 @@ public:
 #if PLATFORM(COCOA)
     bool suppressesConnectionTerminationOnSystemChange() const { return m_suppressesConnectionTerminationOnSystemChange; }
     void setSuppressesConnectionTerminationOnSystemChange(bool suppressesConnectionTerminationOnSystemChange) { m_suppressesConnectionTerminationOnSystemChange = suppressesConnectionTerminationOnSystemChange; }
-
-    bool usesNetworkingDaemon() const { return m_usesNetworkingDaemon; }
-    void setUsesNetworkingDaemon(bool usesNetworkingDaemon) { m_usesNetworkingDaemon = usesNetworkingDaemon; }
 #endif
 
 private:
@@ -242,7 +239,6 @@ private:
 
 #if PLATFORM(COCOA)
     bool m_suppressesConnectionTerminationOnSystemChange { false };
-    bool m_usesNetworkingDaemon { false };
 #endif
 };
 
index 40500d9..cf194aa 100644 (file)
@@ -71,7 +71,6 @@ WK_CLASS_AVAILABLE(macosx(10.10), ios(8.0))
 @property (nonatomic) BOOL pageCacheEnabled WK_API_AVAILABLE(macosx(10.14), ios(12.0));
 @property (nonatomic) BOOL suppressesConnectionTerminationOnSystemChange WK_API_AVAILABLE(macosx(10.14), ios(12.0));
 @property (nonatomic, getter=isJITEnabled) BOOL JITEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
-@property (nonatomic) BOOL usesNetworkingDaemon WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
 
 @end
 
index 01bf6a5..7073ea4 100644 (file)
     _processPoolConfiguration->setJITEnabled(enabled);
 }
 
-- (BOOL)usesNetworkingDaemon
-{
-    return _processPoolConfiguration->usesNetworkingDaemon();
-}
-
-- (void)setUsesNetworkingDaemon:(BOOL)enabled
-{
-    _processPoolConfiguration->setUsesNetworkingDaemon(enabled);
-}
-
-
 - (void)setSuppressesConnectionTerminationOnSystemChange:(BOOL)suppressesConnectionTerminationOnSystemChange
 {
     _processPoolConfiguration->setSuppressesConnectionTerminationOnSystemChange(suppressesConnectionTerminationOnSystemChange);
index ca3789d..f50f7fb 100644 (file)
@@ -72,9 +72,6 @@ void AuxiliaryProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& lau
     case ProcessLauncher::ProcessType::Network:
         varname = "NETWORK_PROCESS_CMD_PREFIX";
         break;
-    case ProcessLauncher::ProcessType::NetworkDaemon:
-        ASSERT_NOT_REACHED();
-        break;
     }
     const char* processCmdPrefix = getenv(varname);
     if (processCmdPrefix && *processCmdPrefix)
index 7307155..64b1a31 100644 (file)
@@ -64,8 +64,7 @@ public:
         Plugin32,
         Plugin64,
 #endif
-        Network,
-        NetworkDaemon
+        Network
     };
 
     struct LaunchOptions {
index 8964df3..6cbac25 100644 (file)
@@ -56,9 +56,6 @@ static const char* serviceName(const ProcessLauncher::LaunchOptions& launchOptio
         return launchOptions.nonValidInjectedCodeAllowed ? "com.apple.WebKit.WebContent.Development" : "com.apple.WebKit.WebContent";
     case ProcessLauncher::ProcessType::Network:
         return "com.apple.WebKit.Networking";
-    case ProcessLauncher::ProcessType::NetworkDaemon:
-        ASSERT_NOT_REACHED();
-        return nullptr;
 #if ENABLE(NETSCAPE_PLUGIN_API)
     case ProcessLauncher::ProcessType::Plugin32:
         return "com.apple.WebKit.Plugin.32";
@@ -98,16 +95,17 @@ void ProcessLauncher::launchProcess()
 {
     ASSERT(!m_xpcConnection);
 
-    if (m_launchOptions.processType == ProcessLauncher::ProcessType::NetworkDaemon)
-        m_xpcConnection = adoptOSObject(xpc_connection_create_mach_service("com.apple.WebKit.NetworkingDaemon", dispatch_get_main_queue(), 0));
-    else {
-        const char* name = m_launchOptions.customWebContentServiceBundleIdentifier.isNull() ? serviceName(m_launchOptions) : m_launchOptions.customWebContentServiceBundleIdentifier.data();
-        m_xpcConnection = adoptOSObject(xpc_connection_create(name, nullptr));
+    const char* name;
+    if (!m_launchOptions.customWebContentServiceBundleIdentifier.isNull())
+        name = m_launchOptions.customWebContentServiceBundleIdentifier.data();
+    else
+        name = serviceName(m_launchOptions);
 
-        uuid_t uuid;
-        uuid_generate(uuid);
-        xpc_connection_set_oneshot_instance(m_xpcConnection.get(), uuid);
-    }
+    m_xpcConnection = adoptOSObject(xpc_connection_create(name, nullptr));
+
+    uuid_t uuid;
+    uuid_generate(uuid);
+    xpc_connection_set_oneshot_instance(m_xpcConnection.get(), uuid);
 
     // Inherit UI process localization. It can be different from child process default localization:
     // 1. When the application and system frameworks simply have different localized resources available, we should match the application.
@@ -138,6 +136,7 @@ void ProcessLauncher::launchProcess()
 #if PLATFORM(MAC)
     xpc_dictionary_set_string(initializationMessage.get(), "WebKitBundleVersion", [[NSBundle bundleWithIdentifier:@"com.apple.WebKit"].infoDictionary[(__bridge NSString *)kCFBundleVersionKey] UTF8String]);
 #endif
+    xpc_connection_set_bootstrap(m_xpcConnection.get(), initializationMessage.get());
 
     if (shouldLeakBoost(m_launchOptions)) {
         auto preBootstrapMessage = adoptOSObject(xpc_dictionary_create(nullptr, nullptr, 0));
@@ -172,9 +171,8 @@ void ProcessLauncher::launchProcess()
     if (clientIdentifier.isNull())
         clientIdentifier = [[NSBundle mainBundle] bundleIdentifier];
 
+    // FIXME: Switch to xpc_connection_set_bootstrap once it's available everywhere we need.
     auto bootstrapMessage = adoptOSObject(xpc_dictionary_create(nullptr, nullptr, 0));
-
-    xpc_dictionary_set_value(bootstrapMessage.get(), "initialization-message", initializationMessage.get());
     
     if (m_client && !m_client->isJITEnabled())
         xpc_dictionary_set_bool(bootstrapMessage.get(), "disable-jit", true);
index c3bb3cf..ef07782 100644 (file)
@@ -103,7 +103,7 @@ NetworkProcessProxy::~NetworkProcessProxy()
 
 void NetworkProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
 {
-    launchOptions.processType = m_processPool.usesNetworkingDaemon() ? ProcessLauncher::ProcessType::NetworkDaemon : ProcessLauncher::ProcessType::Network;
+    launchOptions.processType = ProcessLauncher::ProcessType::Network;
     AuxiliaryProcessProxy::getLaunchOptions(launchOptions);
 
     if (processPool().shouldMakeNextNetworkProcessLaunchFailForTesting()) {
index a0934b7..1262b7f 100644 (file)
@@ -1528,15 +1528,6 @@ void WebProcessPool::updateMaxSuspendedPageCount()
         m_suspendedPages.removeFirst();
 }
 
-bool WebProcessPool::usesNetworkingDaemon() const
-{
-#if PLATFORM(COCOA)
-    return m_configuration->usesNetworkingDaemon();
-#else
-    return false;
-#endif
-}
-    
 void WebProcessPool::setCacheModel(CacheModel cacheModel)
 {
     m_configuration->setCacheModel(cacheModel);
index 34f37a1..0b6c004 100644 (file)
@@ -268,8 +268,6 @@ public:
     DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&, WebPageProxy* originatingPage);
     API::DownloadClient& downloadClient() { return *m_downloadClient; }
 
-    bool usesNetworkingDaemon() const;
-    
     API::LegacyContextHistoryClient& historyClient() { return *m_historyClient; }
     WebContextClient& client() { return m_client; }