Files
tubestation/ipc/contentproc/plugin-container.cpp
Nika Layzell b0d1f2c5e9 Bug 1908725 - Part 1: Introduce GeckoChildID, r=glandium,ipc-reviewers,mccr8
The new GeckoChildID type introduced in this patch is inspired by the existing
ContentParentID type used by ContentParent, but is currently distinct. It is
supported by all process types at the GeckoChildProcessHost level and can be
read for the current process from anywhere.

As this type is similar in many ways to the process type, and should be
available as early as possible within child processes, this was added alongside
the GeckoProcessType value within mozglue to make that easier to do.

The type was chosen to be an int32_t to make it feel similar to a PID, which we
currently use for process identity comparisons across the codebase. The
intention is for GeckoChildID to be preferred for these within-gecko checks, as
these IDs will not be re-used and can be known earlier during child process
creation.

Differential Revision: https://phabricator.services.mozilla.com/D217117
2024-08-07 20:39:39 +00:00

63 lines
1.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim: sw=2 ts=4 et :
* 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/. */
#include "nsXPCOM.h"
#include "nsXULAppAPI.h"
#include "mozilla/Bootstrap.h"
#include "mozilla/ProcessType.h"
#include "XREChildData.h"
#ifdef XP_WIN
# include <windows.h>
// we want a wmain entry point
# include "nsWindowsWMain.cpp"
#else
// FIXME/cjones testing
# include <unistd.h>
#endif
#if defined(XP_WIN) && defined(MOZ_SANDBOX)
# include "mozilla/sandboxing/SandboxInitialization.h"
# include "mozilla/sandboxing/sandboxLogging.h"
#endif
int content_process_main(mozilla::Bootstrap* bootstrap, int argc,
char* argv[]) {
// Check for the absolute minimum number of args we need to move
// forward here. We expect the last arg to be the child process type, and the
// second-last argument to be the gecko child id.
if (argc < 2) {
return 3;
}
XREChildData childData;
#if defined(XP_WIN) && defined(MOZ_SANDBOX)
if (IsSandboxedProcess()) {
childData.sandboxTargetServices =
mozilla::sandboxing::GetInitializedTargetServices();
if (!childData.sandboxTargetServices) {
return 1;
}
childData.ProvideLogFunction = mozilla::sandboxing::ProvideLogFunction;
}
#endif
mozilla::SetGeckoProcessType(argv[--argc]);
mozilla::SetGeckoChildID(argv[--argc]);
#if defined(XP_WIN) && defined(MOZ_SANDBOX)
if (mozilla::GetGeckoProcessType() == GeckoProcessType_RemoteSandboxBroker) {
childData.sandboxBrokerServices =
mozilla::sandboxing::GetInitializedBrokerServices();
}
#endif
nsresult rv = bootstrap->XRE_InitChildProcess(argc, argv, &childData);
return NS_FAILED(rv);
}