diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-14 15:05:02 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-14 15:05:02 +0000 |
commit | b0ff8e5c76ebc15cdb825f56558f3c3b3cfda837 (patch) | |
tree | b8ada24e32b743bc6e34c7f4c77e9dd298b7c05e /chrome/browser/login_prompt_mac.mm | |
parent | 60741b476f12d0a9a7a0adac446d1af75d1208af (diff) | |
download | chromium_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.mm | 15 |
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(); |