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