Title: [222133] trunk/Source/WebKit
Revision
222133
Author
[email protected]
Date
2017-09-17 07:34:02 -0700 (Sun, 17 Sep 2017)

Log Message

[WPE][GTK] Merge ProcessLauncher[WPE,GTK]
https://bugs.webkit.org/show_bug.cgi?id=177041

Reviewed by Carlos Garcia Campos.

* PlatformGTK.cmake:
* PlatformWPE.cmake:
* UIProcess/Launcher/glib/ProcessLauncherGLib.cpp: Renamed from Source/WebKit/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp.
(WebKit::childSetupFunction):
(WebKit::ProcessLauncher::launchProcess):
(WebKit::ProcessLauncher::terminateProcess):
(WebKit::ProcessLauncher::platformInvalidate):
* UIProcess/Launcher/wpe/ProcessLauncherWPE.cpp: Removed.

Modified Paths

Added Paths

Removed Paths

  • trunk/Source/WebKit/UIProcess/Launcher/gtk/
  • trunk/Source/WebKit/UIProcess/Launcher/wpe/

Diff

Modified: trunk/Source/WebKit/ChangeLog (222132 => 222133)


--- trunk/Source/WebKit/ChangeLog	2017-09-17 08:06:57 UTC (rev 222132)
+++ trunk/Source/WebKit/ChangeLog	2017-09-17 14:34:02 UTC (rev 222133)
@@ -1,3 +1,19 @@
+2017-09-17  Michael Catanzaro  <[email protected]>
+
+        [WPE][GTK] Merge ProcessLauncher[WPE,GTK]
+        https://bugs.webkit.org/show_bug.cgi?id=177041
+
+        Reviewed by Carlos Garcia Campos.
+
+        * PlatformGTK.cmake:
+        * PlatformWPE.cmake:
+        * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp: Renamed from Source/WebKit/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp.
+        (WebKit::childSetupFunction):
+        (WebKit::ProcessLauncher::launchProcess):
+        (WebKit::ProcessLauncher::terminateProcess):
+        (WebKit::ProcessLauncher::platformInvalidate):
+        * UIProcess/Launcher/wpe/ProcessLauncherWPE.cpp: Removed.
+
 2017-09-16  Tim Horton  <[email protected]>
 
         Fix the Tools build with CMake on macOS

Modified: trunk/Source/WebKit/PlatformGTK.cmake (222132 => 222133)


--- trunk/Source/WebKit/PlatformGTK.cmake	2017-09-17 08:06:57 UTC (rev 222132)
+++ trunk/Source/WebKit/PlatformGTK.cmake	2017-09-17 14:34:02 UTC (rev 222133)
@@ -195,7 +195,7 @@
 
     UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp
 
-    UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
+    UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
 
     UIProcess/linux/MemoryPressureMonitor.cpp
 
@@ -1014,7 +1014,7 @@
 
         UIProcess/Launcher/ProcessLauncher.cpp
 
-        UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
+        UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
 
         UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp
 

Modified: trunk/Source/WebKit/PlatformWPE.cmake (222132 => 222133)


--- trunk/Source/WebKit/PlatformWPE.cmake	2017-09-17 08:06:57 UTC (rev 222132)
+++ trunk/Source/WebKit/PlatformWPE.cmake	2017-09-17 14:34:02 UTC (rev 222133)
@@ -199,7 +199,7 @@
 
     UIProcess/Automation/cairo/WebAutomationSessionCairo.cpp
 
-    UIProcess/Launcher/wpe/ProcessLauncherWPE.cpp
+    UIProcess/Launcher/glib/ProcessLauncherGLib.cpp
 
     UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp
     UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp

Copied: trunk/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp (from rev 222132, trunk/Source/WebKit/UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp) (0 => 222133)


--- trunk/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp	                        (rev 0)
+++ trunk/Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp	2017-09-17 14:34:02 UTC (rev 222133)
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY MOTOROLA INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ProcessLauncher.h"
+
+#include "Connection.h"
+#include "ProcessExecutablePath.h"
+#include <WebCore/FileSystem.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <glib.h>
+#include <wtf/RunLoop.h>
+#include <wtf/UniStdExtras.h>
+#include <wtf/glib/GLibUtilities.h>
+#include <wtf/glib/GUniquePtr.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
+
+#if PLATFORM(WPE)
+#include <wpe/renderer-host.h>
+#endif
+
+using namespace WebCore;
+
+namespace WebKit {
+
+static void childSetupFunction(gpointer userData)
+{
+    int socket = GPOINTER_TO_INT(userData);
+    close(socket);
+}
+
+void ProcessLauncher::launchProcess()
+{
+    GPid pid = 0;
+
+    IPC::Connection::SocketPair socketPair = IPC::Connection::createPlatformConnection(IPC::Connection::ConnectionOptions::SetCloexecOnServer);
+
+    String executablePath;
+    CString realExecutablePath;
+#if ENABLE(NETSCAPE_PLUGIN_API)
+    String pluginPath;
+    CString realPluginPath;
+#endif
+    switch (m_launchOptions.processType) {
+    case ProcessLauncher::ProcessType::Web:
+        executablePath = executablePathOfWebProcess();
+        break;
+#if ENABLE(NETSCAPE_PLUGIN_API)
+    case ProcessLauncher::ProcessType::Plugin64:
+    case ProcessLauncher::ProcessType::Plugin32:
+        executablePath = executablePathOfPluginProcess();
+#if ENABLE(PLUGIN_PROCESS_GTK2)
+        if (m_launchOptions.extraInitializationData.contains("requires-gtk2"))
+            executablePath.append('2');
+#endif
+        pluginPath = m_launchOptions.extraInitializationData.get("plugin-path");
+        realPluginPath = fileSystemRepresentation(pluginPath);
+        break;
+#endif
+    case ProcessLauncher::ProcessType::Network:
+        executablePath = executablePathOfNetworkProcess();
+        break;
+    case ProcessLauncher::ProcessType::Storage:
+        executablePath = executablePathOfStorageProcess();
+        break;
+    default:
+        ASSERT_NOT_REACHED();
+        return;
+    }
+
+    realExecutablePath = fileSystemRepresentation(executablePath);
+    GUniquePtr<gchar> webkitSocket(g_strdup_printf("%d", socketPair.client));
+    unsigned nargs = 3; // size of the argv array for g_spawn_async()
+
+#if PLATFORM(WPE)
+    GUniquePtr<gchar> wpeSocket;
+    if (m_launchOptions.processType == ProcessLauncher::ProcessType::Web) {
+        wpeSocket = GUniquePtr<gchar>(g_strdup_printf("%d", wpe_renderer_host_create_client()));
+        nargs++;
+    }
+#endif
+
+#if ENABLE(DEVELOPER_MODE)
+    Vector<CString> prefixArgs;
+    if (!m_launchOptions.processCmdPrefix.isNull()) {
+        Vector<String> splitArgs;
+        m_launchOptions.processCmdPrefix.split(' ', splitArgs);
+        for (auto& arg : splitArgs)
+            prefixArgs.append(arg.utf8());
+        nargs += prefixArgs.size();
+    }
+#endif
+
+    char** argv = g_newa(char*, nargs);
+    unsigned i = 0;
+#if ENABLE(DEVELOPER_MODE)
+    // If there's a prefix command, put it before the rest of the args.
+    for (auto& arg : prefixArgs)
+        argv[i++] = const_cast<char*>(arg.data());
+#endif
+    argv[i++] = const_cast<char*>(realExecutablePath.data());
+    argv[i++] = webkitSocket.get();
+#if PLATFORM(WPE)
+    if (m_launchOptions.processType == ProcessLauncher::ProcessType::Web)
+        argv[i++] = wpeSocket.get();
+#endif
+#if ENABLE(NETSCAPE_PLUGIN_API)
+    argv[i++] = const_cast<char*>(realPluginPath.data());
+#else
+    argv[i++] = nullptr;
+#endif
+    argv[i++] = nullptr;
+
+    GUniqueOutPtr<GError> error;
+    if (!g_spawn_async(nullptr, argv, nullptr, G_SPAWN_LEAVE_DESCRIPTORS_OPEN, childSetupFunction, GINT_TO_POINTER(socketPair.server), &pid, &error.outPtr()))
+        g_error("Unable to fork a new child process: %s", error->message);
+
+    // Don't expose the parent socket to potential future children.
+    if (!setCloseOnExec(socketPair.client))
+        RELEASE_ASSERT_NOT_REACHED();
+
+    close(socketPair.client);
+    m_processIdentifier = pid;
+
+    // We've finished launching the process, message back to the main run loop.
+    RunLoop::main().dispatch([protectedThis = makeRef(*this), this, serverSocket = socketPair.server] {
+        didFinishLaunchingProcess(m_processIdentifier, serverSocket);
+    });
+}
+
+void ProcessLauncher::terminateProcess()
+{
+    if (m_isLaunching) {
+        invalidate();
+        return;
+    }
+
+    if (!m_processIdentifier)
+        return;
+
+    kill(m_processIdentifier, SIGKILL);
+    m_processIdentifier = 0;
+}
+
+void ProcessLauncher::platformInvalidate()
+{
+}
+
+} // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to