Bug 1539029 - pt 4 - add shared pref serializer/deserializer to RDD process. r=kmag

Depends on D26568

Differential Revision: https://phabricator.services.mozilla.com/D26569

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Michael Froman 2019-04-09 21:08:00 +00:00
Родитель ac99c1dda6
Коммит 0ce32c1d6d
3 изменённых файлов: 50 добавлений и 0 удалений

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

@ -9,6 +9,7 @@
#include "mozilla/Preferences.h"
#include "mozilla/StaticPrefs.h"
#include "ProcessUtils.h"
#include "RDDChild.h"
#if defined(XP_MACOSX) && defined(MOZ_SANDBOX)
@ -51,6 +52,12 @@ bool RDDProcessHost::Launch(StringVector aExtraOpts) {
MOZ_ASSERT(mLaunchPhase == LaunchPhase::Unlaunched);
MOZ_ASSERT(!mRDDChild);
mPrefSerializer = MakeUnique<ipc::SharedPreferenceSerializer>();
if (!mPrefSerializer->SerializeToSharedMemory()) {
return false;
}
mPrefSerializer->AddSharedPrefCmdLineArgs(*this, aExtraOpts);
#if defined(XP_WIN) && defined(MOZ_SANDBOX)
mSandboxLevel = Preferences::GetInt("security.sandbox.rdd.level");
#endif
@ -139,6 +146,7 @@ void RDDProcessHost::InitAfterConnect(bool aSucceeded) {
MOZ_ASSERT(!mRDDChild);
mLaunchPhase = LaunchPhase::Complete;
mPrefSerializer = nullptr;
if (aSucceeded) {
mProcessToken = ++sRDDProcessTokenCounter;

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

@ -13,6 +13,11 @@
#include "mozilla/ipc/ProtocolUtils.h"
#include "mozilla/ipc/TaskFactory.h"
namespace mozilla {
namespace ipc {
class SharedPreferenceSerializer;
}
}
class nsITimer;
namespace mozilla {
@ -139,6 +144,8 @@ class RDDProcessHost final : public mozilla::ipc::GeckoChildProcessHost {
UniquePtr<RDDChild> mRDDChild;
uint64_t mProcessToken;
UniquePtr<ipc::SharedPreferenceSerializer> mPrefSerializer;
bool mShutdownRequested;
bool mChannelClosed;

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

@ -11,6 +11,8 @@
# include "mozilla/sandboxTarget.h"
#endif
#include "ProcessUtils.h"
namespace mozilla {
using namespace ipc;
@ -25,15 +27,48 @@ bool RDDProcessImpl::Init(int aArgc, char* aArgv[]) {
mozilla::SandboxTarget::Instance()->StartSandbox();
#endif
char* parentBuildID = nullptr;
char* prefsHandle = nullptr;
char* prefMapHandle = nullptr;
char* prefsLen = nullptr;
char* prefMapSize = nullptr;
for (int i = 1; i < aArgc; i++) {
if (!aArgv[i]) {
continue;
}
if (strcmp(aArgv[i], "-parentBuildID") == 0) {
parentBuildID = aArgv[i + 1];
#ifdef XP_WIN
} else if (strcmp(aArgv[i], "-prefsHandle") == 0) {
if (++i == aArgc) {
return false;
}
prefsHandle = aArgv[i];
} else if (strcmp(aArgv[i], "-prefMapHandle") == 0) {
if (++i == aArgc) {
return false;
}
prefMapHandle = aArgv[i];
#endif
} else if (strcmp(aArgv[i], "-prefsLen") == 0) {
if (++i == aArgc) {
return false;
}
prefsLen = aArgv[i];
} else if (strcmp(aArgv[i], "-prefMapSize") == 0) {
if (++i == aArgc) {
return false;
}
prefMapSize = aArgv[i];
}
}
SharedPreferenceDeserializer deserializer;
if (!deserializer.DeserializeFromSharedMemory(prefsHandle, prefMapHandle,
prefsLen, prefMapSize)) {
return false;
}
return mRDD.Init(ParentPid(), parentBuildID, IOThreadChild::message_loop(),
IOThreadChild::channel());
}