Chromium Code Reviews| Index: chrome/browser/ui/browser.cc |
| diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc |
| index 22df809cdc2fd0730f4ccca2e2a721531ea31519..11048c86a33e17fd091c8c2f59a8589472c76d68 100644 |
| --- a/chrome/browser/ui/browser.cc |
| +++ b/chrome/browser/ui/browser.cc |
| @@ -108,6 +108,7 @@ |
| #include "chrome/browser/ui/chrome_pages.h" |
| #include "chrome/browser/ui/chrome_select_file_policy.h" |
| #include "chrome/browser/ui/extensions/shell_window.h" |
| +#include "chrome/browser/ui/fast_unload_controller.h" |
| #include "chrome/browser/ui/find_bar/find_bar.h" |
| #include "chrome/browser/ui/find_bar/find_bar_controller.h" |
| #include "chrome/browser/ui/find_bar/find_tab_helper.h" |
| @@ -233,6 +234,12 @@ BrowserWindow* CreateBrowserWindow(Browser* browser) { |
| return BrowserWindow::CreateBrowserWindow(browser); |
| } |
| +// Is the fast tab unload experiment enabled? |
| +bool FastTabUnloadEnabled() { |
|
sky
2013/06/27 16:13:16
IsFastTabUnloadEnabled?
|
| + return CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kEnableFastUnload); |
| +} |
| + |
| } // namespace |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -332,7 +339,6 @@ Browser::Browser(const CreateParams& params) |
| initial_show_state_(params.initial_show_state), |
| is_session_restore_(params.is_session_restore), |
| host_desktop_type_(params.host_desktop_type), |
| - unload_controller_(new chrome::UnloadController(this)), |
| weak_factory_(this), |
| content_setting_bubble_model_delegate_( |
| new BrowserContentSettingBubbleModelDelegate(this)), |
| @@ -348,6 +354,12 @@ Browser::Browser(const CreateParams& params) |
| // from opening at all, but the path that triggered it should be fixed. |
| CHECK(IncognitoModePrefs::CanOpenBrowser(profile_)); |
| + // TODO(jeremy): Move to initializer list once flag is removed. |
| + if (FastTabUnloadEnabled()) |
| + fast_unload_controller_.reset(new chrome::FastUnloadController(this)); |
| + else |
| + unload_controller_.reset(new chrome::UnloadController(this)); |
| + |
| if (!app_name_.empty()) |
| chrome::RegisterAppPrefs(app_name_, profile_); |
| tab_strip_model_->AddObserver(this); |
| @@ -585,7 +597,15 @@ bool Browser::ShouldCloseWindow() { |
| if (!CanCloseWithInProgressDownloads()) |
| return false; |
| - return unload_controller_->ShouldCloseWindow(); |
| + if (FastTabUnloadEnabled()) |
| + return fast_unload_controller_->ShouldCloseWindow(); |
| + else |
|
sky
2013/06/27 16:13:16
nit: no else after a return.
|
| + return unload_controller_->ShouldCloseWindow(); |
| +} |
| + |
| +bool Browser::HasCompletedUnloadProcessing() const { |
| + DCHECK(FastTabUnloadEnabled()); |
| + return fast_unload_controller_->HasCompletedUnloadProcessing(); |
| } |
| bool Browser::HasCompletedUnloadProcessing() const { |
| @@ -593,7 +613,10 @@ bool Browser::HasCompletedUnloadProcessing() const { |
| } |
| bool Browser::IsAttemptingToCloseBrowser() const { |
| - return unload_controller_->is_attempting_to_close_browser(); |
| + if (FastTabUnloadEnabled()) |
| + return fast_unload_controller_->is_attempting_to_close_browser(); |
| + else |
|
sky
2013/06/27 16:13:16
same nit here.
|
| + return unload_controller_->is_attempting_to_close_browser(); |
| } |
| void Browser::OnWindowClosing() { |
| @@ -636,7 +659,8 @@ void Browser::OnWindowClosing() { |
| content::Source<Browser>(this), |
| content::NotificationService::NoDetails()); |
| - tab_strip_model_->CloseAllTabs(); |
| + if (!FastTabUnloadEnabled()) |
| + tab_strip_model_->CloseAllTabs(); |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -1174,7 +1198,10 @@ void Browser::HandleKeyboardEvent(content::WebContents* source, |
| } |
| bool Browser::TabsNeedBeforeUnloadFired() { |
| - return unload_controller_->TabsNeedBeforeUnloadFired(); |
| + if (FastTabUnloadEnabled()) |
| + return fast_unload_controller_->TabsNeedBeforeUnloadFired(); |
| + else |
|
sky
2013/06/27 16:13:16
and here.
|
| + return unload_controller_->TabsNeedBeforeUnloadFired(); |
| } |
| bool Browser::IsMouseLocked() const { |
| @@ -1310,7 +1337,13 @@ void Browser::LoadingStateChanged(WebContents* source) { |
| } |
| void Browser::CloseContents(WebContents* source) { |
| - if (unload_controller_->CanCloseContents(source)) |
| + bool can_close_contents; |
| + if (FastTabUnloadEnabled()) |
| + can_close_contents = fast_unload_controller_->CanCloseContents(source); |
| + else |
| + can_close_contents = unload_controller_->CanCloseContents(source); |
| + |
| + if (can_close_contents) |
| chrome::CloseWebContents(this, source, true); |
| } |
| @@ -1373,8 +1406,12 @@ gfx::Rect Browser::GetRootWindowResizerRect() const { |
| void Browser::BeforeUnloadFired(WebContents* web_contents, |
| bool proceed, |
| bool* proceed_to_fire_unload) { |
| - *proceed_to_fire_unload = |
| - unload_controller_->BeforeUnloadFired(web_contents, proceed); |
| + if (FastTabUnloadEnabled()) |
|
sky
2013/06/27 16:13:16
nit: use {} for multi-line ones.
|
| + *proceed_to_fire_unload = |
| + fast_unload_controller_->BeforeUnloadFired(web_contents, proceed); |
| + else |
| + *proceed_to_fire_unload = |
| + unload_controller_->BeforeUnloadFired(web_contents, proceed); |
| } |
| bool Browser::ShouldFocusLocationBarByDefault(WebContents* source) { |