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
46 lines
1.1 KiB
C++
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_
|