Bug 1194488: Whitelist specific plugins for async init; r=jimm
This commit is contained in:
@@ -207,8 +207,9 @@ namespace {
|
||||
class PluginModuleMapping : public PRCList
|
||||
{
|
||||
public:
|
||||
explicit PluginModuleMapping(uint32_t aPluginId)
|
||||
explicit PluginModuleMapping(uint32_t aPluginId, bool aAllowAsyncInit)
|
||||
: mPluginId(aPluginId)
|
||||
, mAllowAsyncInit(aAllowAsyncInit)
|
||||
, mProcessIdValid(false)
|
||||
, mModule(nullptr)
|
||||
, mChannelOpened(false)
|
||||
@@ -240,7 +241,7 @@ public:
|
||||
GetModule()
|
||||
{
|
||||
if (!mModule) {
|
||||
mModule = new PluginModuleContentParent();
|
||||
mModule = new PluginModuleContentParent(mAllowAsyncInit);
|
||||
}
|
||||
return mModule;
|
||||
}
|
||||
@@ -333,6 +334,7 @@ private:
|
||||
}
|
||||
|
||||
uint32_t mPluginId;
|
||||
bool mAllowAsyncInit;
|
||||
bool mProcessIdValid;
|
||||
base::ProcessId mProcessId;
|
||||
PluginModuleContentParent* mModule;
|
||||
@@ -372,10 +374,12 @@ mozilla::plugins::TerminatePlugin(uint32_t aPluginId,
|
||||
}
|
||||
|
||||
/* static */ PluginLibrary*
|
||||
PluginModuleContentParent::LoadModule(uint32_t aPluginId)
|
||||
PluginModuleContentParent::LoadModule(uint32_t aPluginId,
|
||||
nsPluginTag* aPluginTag)
|
||||
{
|
||||
PluginModuleMapping::NotifyLoadingModule loadingModule;
|
||||
nsAutoPtr<PluginModuleMapping> mapping(new PluginModuleMapping(aPluginId));
|
||||
nsAutoPtr<PluginModuleMapping> mapping(
|
||||
new PluginModuleMapping(aPluginId, aPluginTag->mSupportsAsyncInit));
|
||||
|
||||
MOZ_ASSERT(XRE_IsContentProcess());
|
||||
|
||||
@@ -503,8 +507,9 @@ PluginModuleChromeParent::LoadModule(const char* aFilePath, uint32_t aPluginId,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
nsAutoPtr<PluginModuleChromeParent> parent(new PluginModuleChromeParent(aFilePath, aPluginId,
|
||||
sandboxLevel));
|
||||
nsAutoPtr<PluginModuleChromeParent> parent(
|
||||
new PluginModuleChromeParent(aFilePath, aPluginId, sandboxLevel,
|
||||
aPluginTag->mSupportsAsyncInit));
|
||||
UniquePtr<LaunchCompleteTask> onLaunchedRunnable(new LaunchedTask(parent));
|
||||
parent->mSubprocess->SetCallRunnableImmediately(!parent->mIsStartingAsync);
|
||||
TimeStamp launchStart = TimeStamp::Now();
|
||||
@@ -635,7 +640,7 @@ PluginModuleChromeParent::WaitForIPCConnection()
|
||||
return true;
|
||||
}
|
||||
|
||||
PluginModuleParent::PluginModuleParent(bool aIsChrome)
|
||||
PluginModuleParent::PluginModuleParent(bool aIsChrome, bool aAllowAsyncInit)
|
||||
: mQuirks(QUIRKS_NOT_INITIALIZED)
|
||||
, mIsChrome(aIsChrome)
|
||||
, mShutdown(false)
|
||||
@@ -653,7 +658,8 @@ PluginModuleParent::PluginModuleParent(bool aIsChrome)
|
||||
, mAsyncNewRv(NS_ERROR_NOT_INITIALIZED)
|
||||
{
|
||||
#if defined(XP_WIN) || defined(XP_MACOSX) || defined(MOZ_WIDGET_GTK)
|
||||
mIsStartingAsync = Preferences::GetBool(kAsyncInitPref, false);
|
||||
mIsStartingAsync = aAllowAsyncInit &&
|
||||
Preferences::GetBool(kAsyncInitPref, false);
|
||||
#if defined(MOZ_CRASHREPORTER)
|
||||
CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("AsyncPluginInit"),
|
||||
mIsStartingAsync ?
|
||||
@@ -676,8 +682,8 @@ PluginModuleParent::~PluginModuleParent()
|
||||
}
|
||||
}
|
||||
|
||||
PluginModuleContentParent::PluginModuleContentParent()
|
||||
: PluginModuleParent(false)
|
||||
PluginModuleContentParent::PluginModuleContentParent(bool aAllowAsyncInit)
|
||||
: PluginModuleParent(false, aAllowAsyncInit)
|
||||
{
|
||||
Preferences::RegisterCallback(TimeoutChanged, kContentTimeoutPref, this);
|
||||
}
|
||||
@@ -691,8 +697,9 @@ bool PluginModuleChromeParent::sInstantiated = false;
|
||||
|
||||
PluginModuleChromeParent::PluginModuleChromeParent(const char* aFilePath,
|
||||
uint32_t aPluginId,
|
||||
int32_t aSandboxLevel)
|
||||
: PluginModuleParent(true)
|
||||
int32_t aSandboxLevel,
|
||||
bool aAllowAsyncInit)
|
||||
: PluginModuleParent(true, aAllowAsyncInit)
|
||||
, mSubprocess(new PluginProcessParent(aFilePath))
|
||||
, mPluginId(aPluginId)
|
||||
, mChromeTaskFactory(this)
|
||||
|
||||
Reference in New Issue
Block a user