Skip to content
Permalink
Browse files
[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.

Canonical link: https://commits.webkit.org/193455@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@222133 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
Michael Catanzaro committed Sep 17, 2017
1 parent d073447 commit b28eb289a4c8f504019e0cd33dbf601cb5084641
@@ -1,3 +1,19 @@
2017-09-17 Michael Catanzaro <mcatanzaro@igalia.com>

[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 <timothy_horton@apple.com>

Fix the Tools build with CMake on macOS
@@ -195,7 +195,7 @@ list(APPEND WebKit2_SOURCES

UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp

UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
UIProcess/Launcher/glib/ProcessLauncherGLib.cpp

UIProcess/linux/MemoryPressureMonitor.cpp

@@ -1014,7 +1014,7 @@ if (ENABLE_PLUGIN_PROCESS_GTK2)

UIProcess/Launcher/ProcessLauncher.cpp

UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp
UIProcess/Launcher/glib/ProcessLauncherGLib.cpp

UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp

@@ -199,7 +199,7 @@ list(APPEND WebKit2_SOURCES

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
@@ -29,21 +29,21 @@

#include "Connection.h"
#include "ProcessExecutablePath.h"
#include <WebCore/AuthenticationChallenge.h>
#include <WebCore/FileSystem.h>
#include <WebCore/NetworkingContext.h>
#include <WebCore/ResourceHandle.h>
#include <errno.h>
#include <fcntl.h>
#include <glib.h>
#include <locale.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 {
@@ -60,8 +60,12 @@ void ProcessLauncher::launchProcess()

IPC::Connection::SocketPair socketPair = IPC::Connection::createPlatformConnection(IPC::Connection::ConnectionOptions::SetCloexecOnServer);

String executablePath, pluginPath;
CString realExecutablePath, realPluginPath;
String executablePath;
CString realExecutablePath;
#if ENABLE(NETSCAPE_PLUGIN_API)
String pluginPath;
CString realPluginPath;
#endif
switch (m_launchOptions.processType) {
case ProcessLauncher::ProcessType::Web:
executablePath = executablePathOfWebProcess();
@@ -90,17 +94,24 @@ void ProcessLauncher::launchProcess()
}

realExecutablePath = fileSystemRepresentation(executablePath);
GUniquePtr<gchar> socket(g_strdup_printf("%d", socketPair.client));

unsigned nargs = 4; // size of the argv array for g_spawn_async()
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 it = splitArgs.begin(); it != splitArgs.end(); it++)
prefixArgs.append(it->utf8());
for (auto& arg : splitArgs)
prefixArgs.append(arg.utf8());
nargs += prefixArgs.size();
}
#endif
@@ -109,19 +120,25 @@ void ProcessLauncher::launchProcess()
unsigned i = 0;
#if ENABLE(DEVELOPER_MODE)
// If there's a prefix command, put it before the rest of the args.
for (auto it = prefixArgs.begin(); it != prefixArgs.end(); it++)
argv[i++] = const_cast<char*>(it->data());
for (auto& arg : prefixArgs)
argv[i++] = const_cast<char*>(arg.data());
#endif
argv[i++] = const_cast<char*>(realExecutablePath.data());
argv[i++] = socket.get();
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());
argv[i++] = 0;
#else
argv[i++] = nullptr;
#endif
argv[i++] = nullptr;

GUniqueOutPtr<GError> error;
if (!g_spawn_async(0, argv, 0, G_SPAWN_LEAVE_DESCRIPTORS_OPEN, childSetupFunction, GINT_TO_POINTER(socketPair.server), &pid, &error.outPtr())) {
g_printerr("Unable to fork a new WebProcess: %s.\n", error->message);
ASSERT_NOT_REACHED();
}
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))
@@ -131,10 +148,8 @@ void ProcessLauncher::launchProcess()
m_processIdentifier = pid;

// We've finished launching the process, message back to the main run loop.
RefPtr<ProcessLauncher> protector(this);
IPC::Connection::Identifier serverSocket = socketPair.server;
RunLoop::main().dispatch([protector, pid, serverSocket] {
protector->didFinishLaunchingProcess(pid, serverSocket);
RunLoop::main().dispatch([protectedThis = makeRef(*this), this, serverSocket = socketPair.server] {
didFinishLaunchingProcess(m_processIdentifier, serverSocket);
});
}

This file was deleted.

0 comments on commit b28eb28

Please sign in to comment.