зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
ac99c1dda6
Коммит
0ce32c1d6d
|
@ -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());
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче