XPCServiceEntryPoint.h [plain text]
#ifndef XPCServiceEntryPoint_h
#define XPCServiceEntryPoint_h
#if HAVE(XPC)
#import "ChildProcess.h"
#import "WebKit2Initialize.h"
#import <xpc/xpc.h>
namespace WebKit {
class XPCServiceInitializerDelegate {
public:
XPCServiceInitializerDelegate(xpc_connection_t connection, xpc_object_t initializerMessage)
: m_connection(connection)
, m_initializerMessage(initializerMessage)
{
}
virtual ~XPCServiceInitializerDelegate();
virtual bool getConnectionIdentifier(CoreIPC::Connection::Identifier& identifier);
virtual bool getClientIdentifier(String& clientIdentifier);
virtual bool getClientProcessName(String& clientProcessName);
virtual bool getExtraInitializationData(HashMap<String, String>& extraInitializationData);
protected:
xpc_connection_t m_connection;
xpc_object_t m_initializerMessage;
};
template<typename XPCServiceType, typename XPCServiceInitializerDelegateType>
void XPCServiceInitializer(xpc_connection_t connection, xpc_object_t initializerMessage)
{
XPCServiceInitializerDelegateType delegate(connection, initializerMessage);
xpc_transaction_begin();
InitializeWebKit2();
ChildProcessInitializationParameters parameters;
if (!delegate.getConnectionIdentifier(parameters.connectionIdentifier))
exit(EXIT_FAILURE);
if (!delegate.getClientIdentifier(parameters.clientIdentifier))
exit(EXIT_FAILURE);
if (!delegate.getClientProcessName(parameters.uiProcessName))
exit(EXIT_FAILURE);
if (!delegate.getExtraInitializationData(parameters.extraInitializationData))
exit(EXIT_FAILURE);
XPCServiceType::shared().initialize(parameters);
}
}
#endif // HAVE(XPC)
#endif // XPCServiceEntryPoint_h