| Index: chrome/browser/ui/unload_controller.cc
|
| ===================================================================
|
| --- chrome/browser/ui/unload_controller.cc (revision 207139)
|
| +++ chrome/browser/ui/unload_controller.cc (working copy)
|
| @@ -8,6 +8,7 @@
|
| #include "base/message_loop.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_tabstrip.h"
|
| +#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model_delegate.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| @@ -222,7 +223,8 @@
|
| tabs_needing_unload_ack_.insert(contents);
|
| browser_->tab_strip_model()->DetachWebContentsAt(index);
|
| contents->SetDelegate(detached_delegate_.get());
|
| - contents->OnUnloadDetachedStarted();
|
| + CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
|
| + core_tab_helper->OnUnloadDetachedStarted();
|
| return true;
|
| }
|
| return false;
|
| @@ -250,7 +252,10 @@
|
| // the tab's render_view_host may have been nulled out.
|
| if (contents->GetRenderViewHost()) {
|
| tab_needing_before_unload_ack_ = contents;
|
| - contents->OnCloseStarted();
|
| +
|
| + CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
|
| + core_tab_helper->OnCloseStarted();
|
| +
|
| contents->GetRenderViewHost()->FirePageBeforeUnload(false);
|
| } else {
|
| ProcessPendingTabs();
|
| @@ -271,7 +276,9 @@
|
| // Null check render_view_host here as this gets called on a PostTask
|
| // and the tab's render_view_host may have been nulled out.
|
| if (contents->GetRenderViewHost()) {
|
| - contents->OnUnloadStarted();
|
| + CoreTabHelper* core_tab_helper =
|
| + CoreTabHelper::FromWebContents(contents);
|
| + core_tab_helper->OnUnloadStarted();
|
| DetachWebContents(contents);
|
| contents->GetRenderViewHost()->ClosePage();
|
| }
|
| @@ -313,13 +320,18 @@
|
| DCHECK(is_attempting_to_close_browser_);
|
| tabs_needing_before_unload_.clear();
|
| if (tab_needing_before_unload_ack_ != NULL) {
|
| - tab_needing_before_unload_ack_->OnCloseCanceled();
|
| +
|
| + CoreTabHelper* core_tab_helper =
|
| + CoreTabHelper::FromWebContents(tab_needing_before_unload_ack_);
|
| + core_tab_helper->OnCloseCanceled();
|
| tab_needing_before_unload_ack_ = NULL;
|
| }
|
| for (WebContentsSet::iterator it = tabs_needing_unload_.begin();
|
| it != tabs_needing_unload_.end(); it++) {
|
| content::WebContents* contents = *it;
|
| - contents->OnCloseCanceled();
|
| +
|
| + CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents);
|
| + core_tab_helper->OnCloseCanceled();
|
| }
|
| tabs_needing_unload_.clear();
|
|
|
|
|