mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-22 20:33:10 +09:00
Issue #1643 - Follow-up: Ensure we properly clear our pointers when the
Presentation of a document is destroyed.
This commit is contained in:
parent
208ef44f9f
commit
317b96a1be
3 changed files with 24 additions and 9 deletions
|
|
@ -15,7 +15,7 @@ namespace dom {
|
|||
void
|
||||
ResizeObserverNotificationHelper::WillRefresh(TimeStamp aTime)
|
||||
{
|
||||
MOZ_ASSERT(mOwner, "Why is mOwner already dead when this RefreshObserver is still registered?");
|
||||
MOZ_DIAGNOSTIC_ASSERT(mOwner, "RefreshObserver should have been de-registered on time, but isn't.");
|
||||
if (mOwner) {
|
||||
mOwner->Notify();
|
||||
}
|
||||
|
|
@ -69,10 +69,8 @@ ResizeObserverNotificationHelper::Unregister()
|
|||
}
|
||||
|
||||
nsRefreshDriver* refreshDriver = GetRefreshDriver();
|
||||
if (!refreshDriver) {
|
||||
// We can't access RefreshDriver now. Just abort the Unregister().
|
||||
return;
|
||||
}
|
||||
MOZ_RELEASE_ASSERT(refreshDriver,
|
||||
"We should not leave a dangling reference to the observer around");
|
||||
|
||||
refreshDriver->RemoveRefreshObserver(this, Flush_Display);
|
||||
mRegistered = false;
|
||||
|
|
@ -81,9 +79,8 @@ ResizeObserverNotificationHelper::Unregister()
|
|||
void
|
||||
ResizeObserverNotificationHelper::Disconnect()
|
||||
{
|
||||
Unregister();
|
||||
// Our owner is dying. Clear our pointer to it, in case we outlive it.
|
||||
mOwner = nullptr;
|
||||
MOZ_RELEASE_ASSERT(!mRegistered, "How can we die when registered?");
|
||||
MOZ_RELEASE_ASSERT(!mOwner, "Forgot to clear weak pointer?");
|
||||
}
|
||||
|
||||
ResizeObserverNotificationHelper::~ResizeObserverNotificationHelper()
|
||||
|
|
@ -111,6 +108,10 @@ ResizeObserverController::AddResizeObserver(ResizeObserver* aObserver)
|
|||
mResizeObservers.AppendElement(aObserver);
|
||||
}
|
||||
|
||||
void ResizeObserverController::DetachFromDocument() {
|
||||
mResizeObserverNotificationHelper->Unregister();
|
||||
}
|
||||
|
||||
void
|
||||
ResizeObserverController::Notify()
|
||||
{
|
||||
|
|
@ -240,7 +241,10 @@ ResizeObserverController::GetShell() const
|
|||
|
||||
ResizeObserverController::~ResizeObserverController()
|
||||
{
|
||||
mResizeObserverNotificationHelper->Disconnect();
|
||||
MOZ_RELEASE_ASSERT(
|
||||
!mResizeObserverNotificationHelper->IsRegistered(),
|
||||
"Nothing else should keep a reference to our notification helper when we go away");
|
||||
mResizeObserverNotificationHelper->DetachFromOwner();
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue