mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 968804 - Part b: Add outer window assertions to {Can,Force,Final}Close; r=peterv
This commit is contained in:
parent
d02b9c0ccb
commit
529d64e30b
@ -8218,8 +8218,11 @@ public:
|
||||
bool
|
||||
nsGlobalWindow::CanClose()
|
||||
{
|
||||
if (!mDocShell)
|
||||
MOZ_ASSERT(IsOuterWindow());
|
||||
|
||||
if (!mDocShell) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Ask the content viewer whether the toplevel window can close.
|
||||
// If the content viewer returns false, it is responsible for calling
|
||||
@ -8313,7 +8316,7 @@ nsGlobalWindow::Close(ErrorResult& aError)
|
||||
return;
|
||||
}
|
||||
|
||||
aError = FinalClose();
|
||||
FinalClose();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -8325,32 +8328,35 @@ nsGlobalWindow::Close()
|
||||
return rv.ErrorCode();
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsGlobalWindow::ForceClose()
|
||||
{
|
||||
MOZ_ASSERT(IsOuterWindow());
|
||||
|
||||
if (IsFrame() || !mDocShell) {
|
||||
// This may be a frame in a frameset, or a window that's already closed.
|
||||
// Ignore such calls.
|
||||
|
||||
return NS_OK;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mHavePendingClose) {
|
||||
// We're going to be closed anyway; do nothing since we don't want
|
||||
// to double-close
|
||||
return NS_OK;
|
||||
return;
|
||||
}
|
||||
|
||||
mInClose = true;
|
||||
|
||||
DispatchCustomEvent("DOMWindowClose");
|
||||
|
||||
return FinalClose();
|
||||
FinalClose();
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsGlobalWindow::FinalClose()
|
||||
{
|
||||
MOZ_ASSERT(IsOuterWindow());
|
||||
|
||||
// Flag that we were closed.
|
||||
mIsClosed = true;
|
||||
|
||||
@ -8374,8 +8380,6 @@ nsGlobalWindow::FinalClose()
|
||||
} else {
|
||||
mHavePendingClose = true;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -470,8 +470,9 @@ public:
|
||||
virtual NS_HIDDEN_(void) EnterModalState();
|
||||
virtual NS_HIDDEN_(void) LeaveModalState();
|
||||
|
||||
// Outer windows only.
|
||||
virtual NS_HIDDEN_(bool) CanClose();
|
||||
virtual NS_HIDDEN_(nsresult) ForceClose();
|
||||
virtual NS_HIDDEN_(void) ForceClose();
|
||||
|
||||
virtual NS_HIDDEN_(void) MaybeUpdateTouchState();
|
||||
virtual NS_HIDDEN_(void) UpdateTouchState();
|
||||
@ -1045,7 +1046,8 @@ protected:
|
||||
void DropOuterWindowDocs();
|
||||
void CleanUp();
|
||||
void ClearControllers();
|
||||
nsresult FinalClose();
|
||||
// Outer windows only.
|
||||
void FinalClose();
|
||||
|
||||
inline void MaybeClearInnerWindow(nsGlobalWindow* aExpectedInner)
|
||||
{
|
||||
|
@ -424,8 +424,9 @@ public:
|
||||
virtual void EnterModalState() = 0;
|
||||
virtual void LeaveModalState() = 0;
|
||||
|
||||
// Outer windows only.
|
||||
virtual bool CanClose() = 0;
|
||||
virtual nsresult ForceClose() = 0;
|
||||
virtual void ForceClose() = 0;
|
||||
|
||||
bool IsModalContentWindow() const
|
||||
{
|
||||
|
@ -363,6 +363,7 @@ nsAppStartup::Quit(uint32_t aMode)
|
||||
windowEnumerator->GetNext(getter_AddRefs(window));
|
||||
nsCOMPtr<nsPIDOMWindow> domWindow(do_QueryInterface(window));
|
||||
if (domWindow) {
|
||||
MOZ_ASSERT(domWindow->IsOuterWindow());
|
||||
if (!domWindow->CanClose())
|
||||
return NS_OK;
|
||||
}
|
||||
@ -504,10 +505,12 @@ nsAppStartup::CloseAllWindows()
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(isupports);
|
||||
NS_ASSERTION(window, "not an nsPIDOMWindow");
|
||||
if (window)
|
||||
if (window) {
|
||||
MOZ_ASSERT(window->IsOuterWindow());
|
||||
window->ForceClose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsAppStartup::EnterLastWindowClosingSurvivalArea(void)
|
||||
|
Loading…
Reference in New Issue
Block a user