WebKit Bugzilla
Attachment 361726 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-20190211160842.patch (text/plain), 9.58 KB, created by
Alex Christensen
on 2019-02-11 16:08:42 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2019-02-11 16:08:42 PST
Size:
9.58 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,24 @@ 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) >+{ >+ 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) >+{ >+ 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 { >@@ -40,17 +43,24 @@ public: > } > }; > >+typedef void (*DaemonMapFunction)(xpc_connection_t, AuxiliaryProcessInitializationParameters&&); >+static DaemonMapFunction daemonMapFunction = nullptr; >+ > template<> >-void initializeAuxiliaryProcess<NetworkProcess>(AuxiliaryProcessInitializationParameters&& parameters) >+void initializeAuxiliaryProcess<NetworkProcess>(xpc_connection_t connection, AuxiliaryProcessInitializationParameters&& parameters) > { >+ if (daemonMapFunction) >+ return daemonMapFunction(connection, WTFMove(parameters)); > static NeverDestroyed<NetworkProcess> networkProcess(WTFMove(parameters)); > } > >-} // namespace WebKit >- >-using namespace WebKit; >+void NetworkDaemonInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) >+{ >+ daemonMapFunction = &networkDaemonClientConnected; >+ NetworkServiceInitializer(connection, initializerMessage, priorityBoostMessage); >+} > >-extern "C" WK_EXPORT void NetworkServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage); >+} // namespace WebKit > > void NetworkServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage, xpc_object_t priorityBoostMessage) > { >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) >@@ -68,7 +68,7 @@ protected: > }; > > template<typename XPCServiceType> >-void initializeAuxiliaryProcess(AuxiliaryProcessInitializationParameters&& parameters) >+void initializeAuxiliaryProcess(xpc_connection_t, AuxiliaryProcessInitializationParameters&& parameters) > { > XPCServiceType::singleton().initialize(WTFMove(parameters)); > } >@@ -125,7 +125,7 @@ ALLOW_DEPRECATED_DECLARATIONS_END > > parameters.processType = XPCServiceType::processType; > >- initializeAuxiliaryProcess<XPCServiceType>(WTFMove(parameters)); >+ initializeAuxiliaryProcess<XPCServiceType>(connection.get(), WTFMove(parameters)); > } > > int XPCServiceMain(int, const char**); >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) >@@ -27,6 +27,7 @@ > #import "WebProcessCocoa.h" > #import "XPCServiceEntryPoint.h" > >+#import "DaemonEntryPoint.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());
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