| Index: chrome/browser/ui/fast_unload_controller.cc
|
| diff --git a/chrome/browser/ui/fast_unload_controller.cc b/chrome/browser/ui/fast_unload_controller.cc
|
| index 8da78ec707c1a19bae849127aa55c235040855c4..19f0e509526d1465e1ef5dd2d4769ff618ccaa7d 100644
|
| --- a/chrome/browser/ui/fast_unload_controller.cc
|
| +++ b/chrome/browser/ui/fast_unload_controller.cc
|
| @@ -219,6 +219,51 @@ bool FastUnloadController::TabsNeedBeforeUnloadFired() {
|
| return !tabs_needing_before_unload_.empty();
|
| }
|
|
|
| +bool FastUnloadController::HasCompletedUnloadProcessing() const {
|
| + return is_attempting_to_close_browser_ &&
|
| + tabs_needing_before_unload_.empty() &&
|
| + tab_needing_before_unload_ack_ == NULL &&
|
| + tabs_needing_unload_.empty() &&
|
| + tabs_needing_unload_ack_.empty();
|
| +}
|
| +
|
| +void FastUnloadController::CancelWindowClose() {
|
| + // Closing of window can be canceled from a beforeunload handler.
|
| + DCHECK(is_attempting_to_close_browser_);
|
| + tabs_needing_before_unload_.clear();
|
| + if (tab_needing_before_unload_ack_ != NULL) {
|
| + CoreTabHelper* core_tab_helper =
|
| + CoreTabHelper::FromWebContents(tab_needing_before_unload_ack_);
|
| + core_tab_helper->OnCloseCanceled();
|
| + DevToolsWindow::OnPageCloseCanceled(tab_needing_before_unload_ack_);
|
| + tab_needing_before_unload_ack_ = NULL;
|
| + }
|
| + for (WebContentsSet::iterator it = tabs_needing_unload_.begin();
|
| + it != tabs_needing_unload_.end(); it++) {
|
| + content::WebContents* contents = *it;
|
| +
|
| + CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
|
| + core_tab_helper->OnCloseCanceled();
|
| + DevToolsWindow::OnPageCloseCanceled(contents);
|
| + }
|
| + tabs_needing_unload_.clear();
|
| +
|
| + // No need to clear tabs_needing_unload_ack_. Those tabs are already detached.
|
| +
|
| + if (is_calling_before_unload_handlers()) {
|
| + base::Callback<void(bool)> on_close_confirmed = on_close_confirmed_;
|
| + on_close_confirmed_.Reset();
|
| + on_close_confirmed.Run(false);
|
| + }
|
| +
|
| + is_attempting_to_close_browser_ = false;
|
| +
|
| + content::NotificationService::current()->Notify(
|
| + chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
|
| + content::Source<Browser>(browser_),
|
| + content::NotificationService::NoDetails());
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // FastUnloadController, content::NotificationObserver implementation:
|
|
|
| @@ -405,51 +450,6 @@ void FastUnloadController::ProcessPendingTabs() {
|
| }
|
| }
|
|
|
| -bool FastUnloadController::HasCompletedUnloadProcessing() const {
|
| - return is_attempting_to_close_browser_ &&
|
| - tabs_needing_before_unload_.empty() &&
|
| - tab_needing_before_unload_ack_ == NULL &&
|
| - tabs_needing_unload_.empty() &&
|
| - tabs_needing_unload_ack_.empty();
|
| -}
|
| -
|
| -void FastUnloadController::CancelWindowClose() {
|
| - // Closing of window can be canceled from a beforeunload handler.
|
| - DCHECK(is_attempting_to_close_browser_);
|
| - tabs_needing_before_unload_.clear();
|
| - if (tab_needing_before_unload_ack_ != NULL) {
|
| - CoreTabHelper* core_tab_helper =
|
| - CoreTabHelper::FromWebContents(tab_needing_before_unload_ack_);
|
| - core_tab_helper->OnCloseCanceled();
|
| - DevToolsWindow::OnPageCloseCanceled(tab_needing_before_unload_ack_);
|
| - tab_needing_before_unload_ack_ = NULL;
|
| - }
|
| - for (WebContentsSet::iterator it = tabs_needing_unload_.begin();
|
| - it != tabs_needing_unload_.end(); it++) {
|
| - content::WebContents* contents = *it;
|
| -
|
| - CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
|
| - core_tab_helper->OnCloseCanceled();
|
| - DevToolsWindow::OnPageCloseCanceled(contents);
|
| - }
|
| - tabs_needing_unload_.clear();
|
| -
|
| - // No need to clear tabs_needing_unload_ack_. Those tabs are already detached.
|
| -
|
| - if (is_calling_before_unload_handlers()) {
|
| - base::Callback<void(bool)> on_close_confirmed = on_close_confirmed_;
|
| - on_close_confirmed_.Reset();
|
| - on_close_confirmed.Run(false);
|
| - }
|
| -
|
| - is_attempting_to_close_browser_ = false;
|
| -
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
|
| - content::Source<Browser>(browser_),
|
| - content::NotificationService::NoDetails());
|
| -}
|
| -
|
| void FastUnloadController::ClearUnloadState(content::WebContents* contents) {
|
| if (tabs_needing_unload_ack_.erase(contents) > 0) {
|
| if (HasCompletedUnloadProcessing())
|
|
|