| Index: chrome/browser/ui/app_modal_dialogs/message_box_handler.cc
|
| diff --git a/chrome/browser/ui/app_modal_dialogs/message_box_handler.cc b/chrome/browser/ui/app_modal_dialogs/message_box_handler.cc
|
| index 09870d4beb977333173a63a2227db42dab4b5125..861d0731d66fe057c3ffab6c4d4d39f20ca1435f 100644
|
| --- a/chrome/browser/ui/app_modal_dialogs/message_box_handler.cc
|
| +++ b/chrome/browser/ui/app_modal_dialogs/message_box_handler.cc
|
| @@ -49,6 +49,8 @@ class ChromeJavaScriptDialogCreator : public content::JavaScriptDialogCreator {
|
| const string16& title,
|
| bool is_alert);
|
|
|
| + void CancelPendingDialogs(content::DialogDelegate* delegate);
|
| +
|
| // Mapping between the JavaScriptDialogDelegates and their extra data. The key
|
| // is a void* because the pointer is just a cookie and is never dereferenced.
|
| typedef std::map<void*, ChromeJavaScriptDialogExtraData>
|
| @@ -138,6 +140,7 @@ void ChromeJavaScriptDialogCreator::RunBeforeUnloadDialog(
|
|
|
| void ChromeJavaScriptDialogCreator::ResetJavaScriptState(
|
| content::JavaScriptDialogDelegate* delegate) {
|
| + CancelPendingDialogs(delegate);
|
| javascript_dialog_extra_data_.erase(delegate);
|
| }
|
|
|
| @@ -168,6 +171,16 @@ string16 ChromeJavaScriptDialogCreator::GetTitle(TitleType title_type,
|
| return string16();
|
| }
|
|
|
| +void ChromeJavaScriptDialogCreator::CancelPendingDialogs(
|
| + content::DialogDelegate* delegate) {
|
| + AppModalDialogQueue* queue = AppModalDialogQueue::GetInstance();
|
| + for (AppModalDialogQueue::iterator i = queue->begin();
|
| + i != queue->end(); ++i) {
|
| + if ((*i)->delegate() == delegate)
|
| + (*i)->Invalidate();
|
| + }
|
| +}
|
| +
|
| //------------------------------------------------------------------------------
|
|
|
| content::JavaScriptDialogCreator* GetJavaScriptDialogCreatorInstance() {
|
|
|