WebKit Bugzilla
Attachment 361745 Details for
Bug 194520
: Daemon entry point should contain structures by xpc_connection_t
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-194520-20190211174556.patch (text/plain), 13.73 KB, created by
Alex Christensen
on 2019-02-11 17:45:57 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2019-02-11 17:45:57 PST
Size:
13.73 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 241283) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,24 @@ >+2019-02-11 Alex Christensen <achristensen@webkit.org> >+ >+ Daemon entry point should contain structures by xpc_connection_t >+ https://bugs.webkit.org/show_bug.cgi?id=194520 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.h: >+ * NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm: >+ (WebKit::networkProcessMap): >+ (WebKit::networkDaemonClientConnected): >+ (WebKit::networkDaemonClientDisconnected): >+ * NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm: >+ (WebKit::initializeAuxiliaryProcess<NetworkProcess>): >+ (WebKit::NetworkDaemonInitializer): >+ * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h: >+ (WebKit::initializeAuxiliaryProcess): >+ (WebKit::XPCServiceInitializer): >+ * Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm: >+ (WebKit::XPCEventHandler): >+ > 2019-02-11 Adrian Perez de Castro <aperez@igalia.com> > > [GTK][WPE] Add content extensions support in WKTR and unskip layout tests >Index: Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.h >=================================================================== >--- Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.h (revision 241275) >+++ Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.h (working copy) >@@ -25,8 +25,16 @@ > > #pragma once > >+#include <wtf/spi/darwin/XPCSPI.h> >+ > namespace WebKit { > >+struct AuxiliaryProcessInitializationParameters; >+ > int DaemonMain(int, const char**); > >+void NetworkDaemonInitializer(xpc_connection_t, xpc_object_t, xpc_object_t); >+void networkDaemonClientConnected(xpc_connection_t, AuxiliaryProcessInitializationParameters&&); >+void networkDaemonClientDisconnected(xpc_connection_t); >+ > } >Index: Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm >=================================================================== >--- Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm (revision 241275) >+++ Source/WebKit/NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm (working copy) >@@ -55,4 +55,26 @@ int DaemonMain(int argc, const char** ar > return EXIT_SUCCESS; > } > >+static HashMap<uintptr_t, Ref<NetworkProcess>>& networkProcessMap() >+{ >+ static NeverDestroyed<HashMap<uintptr_t, Ref<NetworkProcess>>> container; >+ return container.get(); >+} >+ >+void networkDaemonClientConnected(xpc_connection_t connection, AuxiliaryProcessInitializationParameters&& parameters) >+{ >+ ASSERT(connection); >+ uintptr_t key = reinterpret_cast<uintptr_t>(connection); >+ ASSERT(!networkProcessMap().contains(key)); >+ networkProcessMap().set(key, adoptRef(*new NetworkProcess(WTFMove(parameters)))); >+} >+ >+void networkDaemonClientDisconnected(xpc_connection_t connection) >+{ >+ ASSERT(connection); >+ uintptr_t key = reinterpret_cast<uintptr_t>(connection); >+ ASSERT(networkProcessMap().contains(key)); >+ networkProcessMap().remove(key); >+} >+ > } >Index: Source/WebKit/NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm >=================================================================== >--- Source/WebKit/NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm (revision 241275) >+++ Source/WebKit/NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm (working copy) >@@ -25,11 +25,14 @@ > > #import "config.h" > >+#import "DaemonEntryPoint.h" > #import "EnvironmentUtilities.h" > #import "NetworkProcess.h" > #import "WKBase.h" > #import "XPCServiceEntryPoint.h" > >+extern "C" WK_EXPORT void NetworkServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage); >+ > namespace WebKit { > > class NetworkServiceInitializerDelegate : public XPCServiceInitializerDelegate { >@@ -41,21 +44,34 @@ public: > }; > > template<> >-void initializeAuxiliaryProcess<NetworkProcess>(AuxiliaryProcessInitializationParameters&& parameters) >+void initializeAuxiliaryProcess<NetworkProcess, AuxiliaryProcessType::XPCService>(xpc_connection_t connection, AuxiliaryProcessInitializationParameters&& parameters) > { > static NeverDestroyed<NetworkProcess> networkProcess(WTFMove(parameters)); > } > >-} // namespace WebKit >- >-using namespace WebKit; >- >-extern "C" WK_EXPORT void NetworkServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage); >+template<> >+void initializeAuxiliaryProcess<NetworkProcess, AuxiliaryProcessType::Daemon>(xpc_connection_t connection, AuxiliaryProcessInitializationParameters&& parameters) >+{ >+ networkDaemonClientConnected(connection, WTFMove(parameters)); >+} > >-void NetworkServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) >+template<AuxiliaryProcessType processType> >+void NetworkServiceInitializerShared(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) > { > // Remove the SecItemShim from the DYLD_INSERT_LIBRARIES environment variable so any processes spawned by > // the this process don't try to insert the shim and crash. > EnvironmentUtilities::stripValuesEndingWithString("DYLD_INSERT_LIBRARIES", "/SecItemShim.dylib"); >- XPCServiceInitializer<NetworkProcess, NetworkServiceInitializerDelegate>(adoptOSObject(connection), initializerMessage, priorityBoostMessage); >+ XPCServiceInitializer<NetworkProcess, NetworkServiceInitializerDelegate, processType>(adoptOSObject(connection), initializerMessage, priorityBoostMessage); >+} >+ >+void NetworkDaemonInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) >+{ >+ NetworkServiceInitializerShared<AuxiliaryProcessType::Daemon>(connection, initializerMessage, priorityBoostMessage); >+} >+ >+} // namespace WebKit >+ >+void NetworkServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) >+{ >+ NetworkServiceInitializerShared<AuxiliaryProcessType::XPCService>(connection, initializerMessage, priorityBoostMessage); > } >Index: Source/WebKit/PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm >=================================================================== >--- Source/WebKit/PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm (revision 241275) >+++ Source/WebKit/PluginProcess/EntryPoint/Cocoa/XPCService/PluginServiceEntryPoint.mm (working copy) >@@ -79,6 +79,6 @@ void PluginServiceInitializer(xpc_connec > // Remove the PluginProcess shim from the DYLD_INSERT_LIBRARIES environment variable so any processes > // spawned by the PluginProcess don't try to insert the shim and crash. > EnvironmentUtilities::stripValuesEndingWithString("DYLD_INSERT_LIBRARIES", "/PluginProcessShim.dylib"); >- XPCServiceInitializer<PluginProcess, PluginServiceInitializerDelegate>(adoptOSObject(connection), initializerMessage, priorityBoostMessage); >+ XPCServiceInitializer<PluginProcess, PluginServiceInitializerDelegate, AuxiliaryProcessType::XPCService>(adoptOSObject(connection), initializerMessage, priorityBoostMessage); > #endif // ENABLE(NETSCAPE_PLUGIN_API) > } >Index: Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h >=================================================================== >--- Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h (revision 241275) >+++ Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceEntryPoint.h (working copy) >@@ -59,6 +59,8 @@ public: > virtual bool getClientProcessName(String& clientProcessName); > virtual bool getExtraInitializationData(HashMap<String, String>& extraInitializationData); > >+ xpc_connection_t connection() const { return m_connection.get(); } >+ > protected: > bool hasEntitlement(const char* entitlement); > bool isClientSandboxed(); >@@ -67,13 +69,15 @@ protected: > xpc_object_t m_initializerMessage; > }; > >-template<typename XPCServiceType> >-void initializeAuxiliaryProcess(AuxiliaryProcessInitializationParameters&& parameters) >+enum class AuxiliaryProcessType { Daemon, XPCService }; >+ >+template<typename XPCServiceType, AuxiliaryProcessType> >+void initializeAuxiliaryProcess(xpc_connection_t, AuxiliaryProcessInitializationParameters&& parameters) > { > XPCServiceType::singleton().initialize(WTFMove(parameters)); > } > >-template<typename XPCServiceType, typename XPCServiceInitializerDelegateType> >+template<typename XPCServiceType, typename XPCServiceInitializerDelegateType, AuxiliaryProcessType processType> > void XPCServiceInitializer(OSObjectPtr<xpc_connection_t> connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) > { > if (initializerMessage && xpc_dictionary_get_bool(initializerMessage, "disable-jit")) >@@ -125,12 +129,11 @@ ALLOW_DEPRECATED_DECLARATIONS_END > > parameters.processType = XPCServiceType::processType; > >- initializeAuxiliaryProcess<XPCServiceType>(WTFMove(parameters)); >+ initializeAuxiliaryProcess<XPCServiceType, processType>(delegate.connection(), WTFMove(parameters)); > } > > int XPCServiceMain(int, const char**); > >-enum class AuxiliaryProcessType { Daemon, XPCService }; > void XPCEventHandler(xpc_connection_t, AuxiliaryProcessType); > > void XPCServiceExit(OSObjectPtr<xpc_object_t>&& priorityBoostMessage); >Index: Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm >=================================================================== >--- Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm (revision 241275) >+++ Source/WebKit/Shared/EntryPointUtilities/Cocoa/XPCService/XPCServiceMain.mm (working copy) >@@ -24,9 +24,10 @@ > */ > > #import "config.h" >+ >+#import "DaemonEntryPoint.h" > #import "WebProcessCocoa.h" > #import "XPCServiceEntryPoint.h" >- > #import <CoreFoundation/CoreFoundation.h> > #import <wtf/OSObjectPtr.h> > #import <wtf/RetainPtr.h> >@@ -52,10 +53,8 @@ void XPCEventHandler(xpc_connection_t pe > 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. >- } >+ } else >+ networkDaemonClientDisconnected(peer); > } > } else { > assert(type == XPC_TYPE_DICTIONARY); >@@ -63,16 +62,20 @@ void XPCEventHandler(xpc_connection_t pe > 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")); >- > typedef void (*InitializerFunction)(xpc_connection_t, xpc_object_t, xpc_object_t); >- InitializerFunction initializerFunctionPtr = reinterpret_cast<InitializerFunction>(CFBundleGetFunctionPointerForName(webKitBundle, entryPointFunctionName)); >- if (!initializerFunctionPtr) { >- NSLog(@"Unable to find entry point in WebKit.framework with name: %@", (__bridge NSString *)entryPointFunctionName); >- exit(EXIT_FAILURE); >- } >+ InitializerFunction initializerFunctionPtr = nullptr; >+ if (processType == AuxiliaryProcessType::XPCService) { >+ CFBundleRef webKitBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebKit")); >+ CFStringRef entryPointFunctionName = (CFStringRef)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), CFSTR("WebKitEntryPoint")); > >+ initializerFunctionPtr = reinterpret_cast<InitializerFunction>(CFBundleGetFunctionPointerForName(webKitBundle, entryPointFunctionName)); >+ if (!initializerFunctionPtr) { >+ NSLog(@"Unable to find entry point in WebKit.framework with name: %@", (__bridge NSString *)entryPointFunctionName); >+ exit(EXIT_FAILURE); >+ } >+ } else >+ initializerFunctionPtr = NetworkDaemonInitializer; >+ > auto reply = adoptOSObject(xpc_dictionary_create_reply(event)); > xpc_dictionary_set_string(reply.get(), "message-name", "process-finished-launching"); > xpc_connection_send_message(xpc_dictionary_get_remote_connection(event), reply.get()); >Index: Source/WebKit/WebProcess/EntryPoint/Cocoa/XPCService/WebContentServiceEntryPoint.mm >=================================================================== >--- Source/WebKit/WebProcess/EntryPoint/Cocoa/XPCService/WebContentServiceEntryPoint.mm (revision 241275) >+++ Source/WebKit/WebProcess/EntryPoint/Cocoa/XPCService/WebContentServiceEntryPoint.mm (working copy) >@@ -48,5 +48,5 @@ void WebContentServiceInitializer(xpc_co > InitWebCoreThreadSystemInterface(); > #endif // PLATFORM(IOS_FAMILY) > >- WebKit::XPCServiceInitializer<WebKit::WebProcess, WebKit::XPCServiceInitializerDelegate>(adoptOSObject(connection), initializerMessage, priorityBoostMessage); >+ WebKit::XPCServiceInitializer<WebKit::WebProcess, WebKit::XPCServiceInitializerDelegate, WebKit::AuxiliaryProcessType::XPCService>(adoptOSObject(connection), initializerMessage, priorityBoostMessage); > }
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 194520
:
361726
| 361745