[WK2] Would like to queue messages while NetworkProcess is launching
        https://bugs.webkit.org/show_bug.cgi?id=104143

        Reviewed by Anders Carlsson.

        Factored out process launching and message sending code to a ChildProcessProxy class.
        Process closing and crashing code should be moved once we better understand common
        requirements for the processes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Added ChildProcessProxy files.

        * Shared/ChildProcessProxy.cpp: Added.
        (WebKit::ChildProcessProxy::ChildProcessProxy):
        (WebKit::ChildProcessProxy::~ChildProcessProxy):
        (WebKit::ChildProcessProxy::fromConnection):
        (WebKit::ChildProcessProxy::connect):
        (WebKit::ChildProcessProxy::terminate):
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::isLaunching):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        (WebKit::ChildProcessProxy::clearConnection):
        * Shared/ChildProcessProxy.h: Added.
        (WebKit::ChildProcessProxy::connection):
        (WebKit::ChildProcessProxy::isValid):
        (WebKit::ChildProcessProxy::canSendMessage):
        (WebKit::ChildProcessProxy::processIdentifier):
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        Moved code from WebProcessProxy. Every ChildProcessProxy is a connection client,
        but every one is a connection queue client, so that latter is passed as an argument.

        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        Removed unused syncMessageSendTimedOut(), thank you OVERRIDE.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::setApplicationIsOccluded):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::didFinishLaunching):
        Use shared code.

        * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::fromConnection):
        NetworkProcess inherits from conneciton client privately, so we need to do most
        of the work in ClientProcessProxy, and further upcast here.

        * UIProcess/efl/WebProcessProxyEfl.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/gtk/WebProcessProxyGtk.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/qt/WebProcessProxyQt.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/win/WebProcessProxyWin.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        Updated for renaming, platformConnect -> platformGetLaunchOptions().



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@136770 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp b/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
index 1f9ce89..6be27c6 100644
--- a/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
@@ -48,7 +48,11 @@
     : m_networkProcessManager(manager)
     , m_numPendingConnectionRequests(0)
 {
-    ProcessLauncher::LaunchOptions launchOptions;
+    connect();
+}
+
+void NetworkProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
+{
     launchOptions.processType = ProcessLauncher::NetworkProcess;
 
 #if PLATFORM(MAC)
@@ -58,25 +62,22 @@
     launchOptions.useXPC = false;
 #endif
 #endif
-
-    m_processLauncher = ProcessLauncher::create(this, launchOptions);
 }
 
 NetworkProcessProxy::~NetworkProcessProxy()
 {
-
 }
 
 void NetworkProcessProxy::getNetworkProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply)
 {
     m_pendingConnectionReplies.append(reply);
 
-    if (m_processLauncher->isLaunching()) {
+    if (isLaunching()) {
         m_numPendingConnectionRequests++;
         return;
     }
 
-    m_connection->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply);
+    connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply);
 }
 
 void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()
@@ -114,12 +115,6 @@
 
 void NetworkProcessProxy::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::StringReference, CoreIPC::StringReference)
 {
-
-}
-
-void NetworkProcessProxy::syncMessageSendTimedOut(CoreIPC::Connection*)
-{
-
 }
 
 void NetworkProcessProxy::didCreateNetworkConnectionToWebProcess(const CoreIPC::Attachment& connectionIdentifier)
@@ -136,36 +131,29 @@
 #endif
 }
 
-void NetworkProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier connectionIdentifier)
+void NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, CoreIPC::Connection::Identifier connectionIdentifier)
 {
-    ASSERT(!m_connection);
+    ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
 
     if (CoreIPC::Connection::identifierIsNull(connectionIdentifier)) {
         // FIXME: Do better cleanup here.
         return;
     }
 
-    m_connection = CoreIPC::Connection::createServerConnection(connectionIdentifier, this, RunLoop::main());
-#if PLATFORM(MAC)
-    m_connection->setShouldCloseConnectionOnMachExceptions();
-#endif
-
-    m_connection->open();
-
     NetworkProcessCreationParameters parameters;
     platformInitializeNetworkProcess(parameters);
 
     // Initialize the network host process.
-    m_connection->send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0);
+    connection()->send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0);
 
     for (unsigned i = 0; i < m_numPendingConnectionRequests; ++i)
-        m_connection->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0);
+        connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0);
     
     m_numPendingConnectionRequests = 0;
 
 #if PLATFORM(MAC)
     if (WebContext::applicationIsOccluded())
-        m_connection->send(Messages::NetworkProcess::SetApplicationIsOccluded(true), 0);
+        connection()->send(Messages::NetworkProcess::SetApplicationIsOccluded(true), 0);
 #endif
 }