зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1037625 - Allow child processes to respond to 'inner-window-destroyed' notifications without possibly killing the process. r-khuey.
This commit is contained in:
Родитель
94a677f930
Коммит
a81bd3bc10
|
@ -750,6 +750,39 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TabChild::DelayedDeleteRunnable MOZ_FINAL
|
||||||
|
: public nsRunnable
|
||||||
|
{
|
||||||
|
nsRefPtr<TabChild> mTabChild;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DelayedDeleteRunnable(TabChild* aTabChild)
|
||||||
|
: mTabChild(aTabChild)
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
MOZ_ASSERT(aTabChild);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
~DelayedDeleteRunnable()
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
MOZ_ASSERT(!mTabChild);
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHOD
|
||||||
|
Run()
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
MOZ_ASSERT(mTabChild);
|
||||||
|
|
||||||
|
unused << PBrowserChild::Send__delete__(mTabChild);
|
||||||
|
|
||||||
|
mTabChild = nullptr;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
StaticRefPtr<TabChild> sPreallocatedTab;
|
StaticRefPtr<TabChild> sPreallocatedTab;
|
||||||
|
|
||||||
/*static*/
|
/*static*/
|
||||||
|
@ -2748,7 +2781,12 @@ TabChild::RecvDestroy()
|
||||||
// XXX what other code in ~TabChild() should we be running here?
|
// XXX what other code in ~TabChild() should we be running here?
|
||||||
DestroyWindow();
|
DestroyWindow();
|
||||||
|
|
||||||
return Send__delete__(this);
|
// Bounce through the event loop once to allow any delayed teardown runnables
|
||||||
|
// that were just generated to have a chance to run.
|
||||||
|
nsCOMPtr<nsIRunnable> deleteRunnable = new DelayedDeleteRunnable(this);
|
||||||
|
MOZ_ALWAYS_TRUE(NS_SUCCEEDED(NS_DispatchToCurrentThread(deleteRunnable)));
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -583,6 +583,7 @@ private:
|
||||||
|
|
||||||
class CachedFileDescriptorInfo;
|
class CachedFileDescriptorInfo;
|
||||||
class CachedFileDescriptorCallbackRunnable;
|
class CachedFileDescriptorCallbackRunnable;
|
||||||
|
class DelayedDeleteRunnable;
|
||||||
|
|
||||||
TextureFactoryIdentifier mTextureFactoryIdentifier;
|
TextureFactoryIdentifier mTextureFactoryIdentifier;
|
||||||
nsCOMPtr<nsIWebNavigation> mWebNav;
|
nsCOMPtr<nsIWebNavigation> mWebNav;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче