Bug 636374 - don't show multiple onbeforeunload prompts, r=bz
This commit is contained in:
@@ -1054,7 +1054,19 @@ nsDocumentViewer::LoadComplete(nsresult aStatus)
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDocumentViewer::PermitUnload(bool aCallerClosesWindow, bool *aPermitUnload)
|
||||
nsDocumentViewer::PermitUnload(bool aCallerClosesWindow,
|
||||
bool *aPermitUnload)
|
||||
{
|
||||
bool shouldPrompt = true;
|
||||
return PermitUnloadInternal(aCallerClosesWindow, &shouldPrompt,
|
||||
aPermitUnload);
|
||||
}
|
||||
|
||||
|
||||
nsresult
|
||||
nsDocumentViewer::PermitUnloadInternal(bool aCallerClosesWindow,
|
||||
bool *aShouldPrompt,
|
||||
bool *aPermitUnload)
|
||||
{
|
||||
*aPermitUnload = true;
|
||||
|
||||
@@ -1133,8 +1145,8 @@ nsDocumentViewer::PermitUnload(bool aCallerClosesWindow, bool *aPermitUnload)
|
||||
nsCOMPtr<nsIDocShellTreeNode> docShellNode(mContainer);
|
||||
nsAutoString text;
|
||||
beforeUnload->GetReturnValue(text);
|
||||
if (event->GetInternalNSEvent()->mFlags.mDefaultPrevented ||
|
||||
!text.IsEmpty()) {
|
||||
if (*aShouldPrompt && (event->GetInternalNSEvent()->mFlags.mDefaultPrevented ||
|
||||
!text.IsEmpty())) {
|
||||
// Ask the user if it's ok to unload the current page
|
||||
|
||||
nsCOMPtr<nsIPrompt> prompt = do_GetInterface(docShellNode);
|
||||
@@ -1186,6 +1198,11 @@ nsDocumentViewer::PermitUnload(bool aCallerClosesWindow, bool *aPermitUnload)
|
||||
|
||||
// Button 0 == leave, button 1 == stay
|
||||
*aPermitUnload = (buttonPressed == 0);
|
||||
// If the user decided to go ahead, make sure not to prompt the user again
|
||||
// by toggling the internal prompting bool to false:
|
||||
if (*aPermitUnload) {
|
||||
*aShouldPrompt = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1204,7 +1221,8 @@ nsDocumentViewer::PermitUnload(bool aCallerClosesWindow, bool *aPermitUnload)
|
||||
docShell->GetContentViewer(getter_AddRefs(cv));
|
||||
|
||||
if (cv) {
|
||||
cv->PermitUnload(aCallerClosesWindow, aPermitUnload);
|
||||
cv->PermitUnloadInternal(aCallerClosesWindow, aShouldPrompt,
|
||||
aPermitUnload);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user