Files
tubestation/ipc/glue/ForkServer.h
Nika Layzell 1aa49186e2 Bug 1440207 - Part 3j: ForkServer support for file geckoargs, r=ipc-reviewers,jld
After this change, the fork server no longer uses a Dup2Sequence to set
fixed FD offsets when starting child processes, instead using the new
geckoargs system.

Because this was pretty disruptive to thow the fork server works and was
previously integrated into LaunchApp, the forkserver code has generally been
moved out of the chromium codebase, and inlined into the ForkServer files.

As the linux chroot sandbox code needs to run the chroot server from a process
created during forking, it is now being sent down to the fork server
separately, though the child end of the pipe is still being passed using
GeckoArgs.

Finally, the primary IPC pipe used by the fork server is also changed to
be passed using geckoargs into the fork server, and the fork server
being used is made more explicit in GeckoChildProcessHost, as launching
using the fork server now requires different arguments than launching
normally (due to needing to pass down the ChildProcessArgs).

Differential Revision: https://phabricator.services.mozilla.com/D221380
2024-10-01 22:21:51 +00:00

46 lines
1.1 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim: set ts=8 sts=4 et sw=4 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __FORKSERVER_H_
#define __FORKSERVER_H_
#include "mozilla/UniquePtr.h"
#include "base/process_util.h"
#include "mozilla/ipc/MiniTransceiver.h"
namespace mozilla {
namespace ipc {
class ForkServer {
public:
ForkServer(int* aArgc, char*** aArgv);
~ForkServer() = default;
void InitProcess(int* aArgc, char*** aArgv);
bool HandleMessages();
// Called when a message is received.
bool OnMessageReceived(UniquePtr<IPC::Message> message);
static bool RunForkServer(int* aArgc, char*** aArgv);
private:
UniquePtr<MiniTransceiver> mTcver;
int* mArgc;
char*** mArgv;
};
enum {
Msg_ForkNewSubprocess__ID = 0x7f0, // a random picked number
Reply_ForkNewSubprocess__ID,
Msg_SubprocessExecInfo__ID,
};
} // namespace ipc
} // namespace mozilla
#endif // __FORKSERVER_H_