Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1803)

Unified Diff: chrome/browser/ui/app_modal_dialogs/message_box_handler.cc

Issue 7283022: Make a clean interface for dialog callbacks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc ('k') | content/browser/javascript_dialogs.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc ('k') | content/browser/javascript_dialogs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698