Index: chrome/browser/browser.cc |
=================================================================== |
--- chrome/browser/browser.cc (revision 44834) |
+++ chrome/browser/browser.cc (working copy) |
@@ -3207,16 +3207,41 @@ |
// RESPONSE_RECEIVED case, the user decided to go along with the closing. |
return true; |
} |
- |
+ // Indicated that normal (non-incognito) downloads are pending. |
+ bool normal_downloads_are_present = false; |
+ bool incognito_downloads_are_present = false; |
// If there are no download in-progress, our job is done. |
DownloadManager* download_manager = profile_->GetDownloadManager(); |
- if (!download_manager || download_manager->in_progress_count() == 0) |
+ if (profile_->IsOffTheRecord()) { |
+ // Browser is incognito and so download_manager if present is for incognito |
+ // downloads. |
+ incognito_downloads_are_present = |
+ (download_manager && download_manager->in_progress_count() != 0); |
+ // Check original profile. |
+ download_manager = profile_->GetOriginalProfile()->GetDownloadManager(); |
+ } |
+ |
+ normal_downloads_are_present = |
+ (download_manager && download_manager->in_progress_count() != 0); |
+ if (!normal_downloads_are_present && !incognito_downloads_are_present) |
return true; |
+ if (is_attempting_to_close_browser_) |
+ return true; |
+ |
+ if ((!normal_downloads_are_present && !profile()->IsOffTheRecord()) || |
+ (!incognito_downloads_are_present && profile()->IsOffTheRecord())) |
+ return true; |
+ |
// Let's figure out if we are the last window for our profile. |
// Note that we cannot just use BrowserList::GetBrowserCount as browser |
// windows closing is delayed and the returned count might include windows |
// that are being closed. |
+ // The browser allowed to be closed only if: |
+ // 1. It is a regular browser and there are no regular downloads present or |
+ // this is not the last regular browser window. |
+ // 2. It is an incognito browser and there are no incognito downloads present |
+ // or this is not the last incognito browser window. |
int count = 0; |
for (BrowserList::const_iterator iter = BrowserList::begin(); |
iter != BrowserList::end(); ++iter) { |
@@ -3224,6 +3249,15 @@ |
if (*iter == this || (*iter)->is_attempting_to_close_browser_) |
continue; |
+ // Verify that this is not the last non-incognito or incognito browser, |
+ // depending on the pending downloads. |
+ if (normal_downloads_are_present && !profile()->IsOffTheRecord() && |
+ (*iter)->profile()->IsOffTheRecord()) |
+ continue; |
+ if (incognito_downloads_are_present && profile()->IsOffTheRecord() && |
+ !(*iter)->profile()->IsOffTheRecord()) |
+ continue; |
+ |
// We test the original profile, because an incognito browser window keeps |
// the original profile alive (and its DownloadManager). |
// We also need to test explicitly the profile directly so that 2 incognito |