Bug 1471025: Part 3b - Refactor Android shared FD API to require fewer modifications per change. r=jld

Adding or removing an FD from this API currently requires changes in about a
half dozen places. Ignoring the Java side of things. This patch changes the
API to pass a struct, rather than additional arguments for each FD, so that
adding and removing FDs only requires changing one declaration, and the two
call sites that add and consume the FDs.

MozReview-Commit-ID: CToSEVp1oqP

--HG--
extra : intermediate-source : ff41551f5ff1b98b72ed771a6f2a3f66a8b79a57
extra : absorb_source : c9fe7423fcbb47655b05209b44fb02b69b272d07
extra : source : 4b7a8a35ed956159e2f443c6211164c0cbf3d926
extra : histedit_source : b98b792791274f00a5e649c82dc25043cc1d699a
This commit is contained in:
Kris Maglione 2018-07-02 15:01:25 -07:00
Родитель d7bd212b40
Коммит f071708db7
5 изменённых файлов: 18 добавлений и 10 удалений

Просмотреть файл

@ -408,7 +408,7 @@ Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jo
gBootstrap->GeckoStart(jenv, argv, argc, sAppData); gBootstrap->GeckoStart(jenv, argv, argc, sAppData);
ElfLoader::Singleton.ExpectShutdown(true); ElfLoader::Singleton.ExpectShutdown(true);
} else { } else {
gBootstrap->XRE_SetAndroidChildFds(jenv, prefsFd, ipcFd, crashFd, crashAnnotationFd); gBootstrap->XRE_SetAndroidChildFds(jenv, { prefsFd, ipcFd, crashFd, crashAnnotationFd });
gBootstrap->XRE_SetProcessType(argv[argc - 1]); gBootstrap->XRE_SetProcessType(argv[argc - 1]);
XREChildData childData; XREChildData childData;

Просмотреть файл

@ -78,8 +78,8 @@ public:
::GeckoStart(aEnv, argv, argc, aAppData); ::GeckoStart(aEnv, argv, argc, aAppData);
} }
virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override { virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, const XRE_AndroidChildFds& aFds) override {
::XRE_SetAndroidChildFds(aEnv, aPrefsFd, aIPCFd, aCrashFd, aCrashAnnotationFd); ::XRE_SetAndroidChildFds(aEnv, aFds);
} }
#endif #endif

Просмотреть файл

@ -113,7 +113,7 @@ public:
#ifdef MOZ_WIDGET_ANDROID #ifdef MOZ_WIDGET_ANDROID
virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc, const StaticXREAppData& aAppData) = 0; virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc, const StaticXREAppData& aAppData) = 0;
virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0; virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, const XRE_AndroidChildFds& fds) = 0;
#endif #endif
#ifdef LIBFUZZER #ifdef LIBFUZZER

Просмотреть файл

@ -244,13 +244,13 @@ GeckoProcessType sChildProcessType = GeckoProcessType_Default;
#if defined(MOZ_WIDGET_ANDROID) #if defined(MOZ_WIDGET_ANDROID)
void void
XRE_SetAndroidChildFds (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd) XRE_SetAndroidChildFds (JNIEnv* env, const XRE_AndroidChildFds& fds)
{ {
mozilla::jni::SetGeckoThreadEnv(env); mozilla::jni::SetGeckoThreadEnv(env);
mozilla::dom::SetPrefsFd(prefsFd); mozilla::dom::SetPrefsFd(fds.mPrefsFd);
IPC::Channel::SetClientChannelFd(ipcFd); IPC::Channel::SetClientChannelFd(fds.mIpcFd);
CrashReporter::SetNotificationPipeForChild(crashFd); CrashReporter::SetNotificationPipeForChild(fds.mCrashFd);
CrashReporter::SetCrashAnnotationPipeForChild(crashAnnotationFd); CrashReporter::SetCrashAnnotationPipeForChild(fds.mCrashAnnotationFd);
} }
#endif // defined(MOZ_WIDGET_ANDROID) #endif // defined(MOZ_WIDGET_ANDROID)

Просмотреть файл

@ -397,8 +397,16 @@ XRE_API(const char*,
XRE_ChildProcessTypeToString, (GeckoProcessType aProcessType)) XRE_ChildProcessTypeToString, (GeckoProcessType aProcessType))
#if defined(MOZ_WIDGET_ANDROID) #if defined(MOZ_WIDGET_ANDROID)
struct XRE_AndroidChildFds
{
int mPrefsFd;
int mIpcFd;
int mCrashFd;
int mCrashAnnotationFd;
};
XRE_API(void, XRE_API(void,
XRE_SetAndroidChildFds, (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)) XRE_SetAndroidChildFds, (JNIEnv* env, const XRE_AndroidChildFds& fds))
#endif // defined(MOZ_WIDGET_ANDROID) #endif // defined(MOZ_WIDGET_ANDROID)
XRE_API(void, XRE_API(void,