Bug 1174461 - Cache NS_NATIVE_PLUGIN_PORT on the content side since it never changes. r=aklotz

This commit is contained in:
Jim Mathies 2015-07-09 19:07:48 -05:00
parent 533256ed4d
commit 5df104fdfb
2 changed files with 12 additions and 7 deletions

View File

@ -35,7 +35,8 @@ NS_IMPL_ISUPPORTS_INHERITED(PluginWidgetProxy, PuppetWidget, nsIWidget)
PluginWidgetProxy::PluginWidgetProxy(dom::TabChild* aTabChild,
mozilla::plugins::PluginWidgetChild* aActor) :
PuppetWidget(aTabChild),
mActor(aActor)
mActor(aActor),
mCachedPluginPort(0)
{
// See ChannelDestroyed() in the header
mActor->SetWidget(this);
@ -74,8 +75,6 @@ PluginWidgetProxy::Create(nsIWidget* aParent,
NS_IMETHODIMP
PluginWidgetProxy::SetParent(nsIWidget* aNewParent)
{
mParent = aNewParent;
nsCOMPtr<nsIWidget> kungFuDeathGrip(this);
nsIWidget* parent = GetParent();
if (parent) {
@ -84,6 +83,7 @@ PluginWidgetProxy::SetParent(nsIWidget* aNewParent)
if (aNewParent) {
aNewParent->AddChild(this);
}
mParent = aNewParent;
return NS_OK;
}
@ -135,10 +135,14 @@ PluginWidgetProxy::GetNativeData(uint32_t aDataType)
NS_WARNING("PluginWidgetProxy::GetNativeData received request for unsupported data type.");
return nullptr;
}
uintptr_t value = 0;
mActor->SendGetNativePluginPort(&value);
PWLOG("PluginWidgetProxy::GetNativeData %p\n", (void*)value);
return (void*)value;
// The parent side window handle or xid never changes so we can
// cache this for our lifetime.
if (mCachedPluginPort) {
return (void*)mCachedPluginPort;
}
mActor->SendGetNativePluginPort(&mCachedPluginPort);
PWLOG("PluginWidgetProxy::GetNativeData %p\n", (void*)mCachedPluginPort);
return (void*)mCachedPluginPort;
}
#if defined(XP_WIN)

View File

@ -66,6 +66,7 @@ private:
// PuppetWidget does not implement parent apis, but we need
// them for plugin widgets.
nsCOMPtr<nsIWidget> mParent;
uintptr_t mCachedPluginPort;
};
} // namespace widget