summaryrefslogtreecommitdiffstats
path: root/chrome/browser/login_prompt_mac.mm
diff options
context:
space:
mode:
authorthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-14 15:05:02 +0000
committerthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-14 15:05:02 +0000
commitb0ff8e5c76ebc15cdb825f56558f3c3b3cfda837 (patch)
treeb8ada24e32b743bc6e34c7f4c77e9dd298b7c05e /chrome/browser/login_prompt_mac.mm
parent60741b476f12d0a9a7a0adac446d1af75d1208af (diff)
downloadchromium_src-b0ff8e5c76ebc15cdb825f56558f3c3b3cfda837.zip
chromium_src-b0ff8e5c76ebc15cdb825f56558f3c3b3cfda837.tar.gz
chromium_src-b0ff8e5c76ebc15cdb825f56558f3c3b3cfda837.tar.bz2
Fix crash when closing tab with an open http auth sheet.
Parts of patch by mdm@chromium.org, taken from http://codereview.chromium.org/196104 BUG=19427, 21111, 21304 (not sure about last one) TEST=Open a page with an http auth sheet, open another tab, close tab with the open sheet -- should not crash. Also check that opening a tab with an open sheet, then hitting back, forward, reload still works and doesn't crash. Review URL: http://codereview.chromium.org/194095 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26105 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/login_prompt_mac.mm')
-rw-r--r--chrome/browser/login_prompt_mac.mm15
1 files changed, 10 insertions, 5 deletions
diff --git a/chrome/browser/login_prompt_mac.mm b/chrome/browser/login_prompt_mac.mm
index 99bbaba..db3569b 100644
--- a/chrome/browser/login_prompt_mac.mm
+++ b/chrome/browser/login_prompt_mac.mm
@@ -62,6 +62,8 @@ class LoginHandlerMac : public LoginHandler,
}
void SetModel(LoginModel* model) {
+ if (login_model_)
+ login_model_->SetObserver(NULL);
login_model_ = model;
if (login_model_)
login_model_->SetObserver(this);
@@ -164,6 +166,14 @@ class LoginHandlerMac : public LoginHandler,
this, &LoginHandlerMac::SendNotifications));
}
+ // Close sheet if it's still open, as required by
+ // ConstrainedWindowMacDelegate.
+ DCHECK(MessageLoop::current() == ui_loop_);
+ if (is_sheet_open())
+ [NSApp endSheet:sheet()];
+
+ SetModel(NULL);
+
// Delete this object once all InvokeLaters have been called.
request_loop_->ReleaseSoon(FROM_HERE, this);
}
@@ -209,11 +219,6 @@ class LoginHandlerMac : public LoginHandler,
void CloseContentsDeferred() {
DCHECK(MessageLoop::current() == ui_loop_);
- // Close sheet if it's still open, as required by
- // ConstrainedWindowMacDelegate.
- if (is_sheet_open())
- [NSApp endSheet:sheet()];
-
// The hosting ConstrainedWindow may have been freed.
if (dialog_)
dialog_->CloseConstrainedWindow();