diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-27 22:05:13 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-27 22:05:13 +0000 |
commit | 28191891f2389382e4e53d004e04a74bcb1b152e (patch) | |
tree | ba47a955a1347bf43585c6e5c8ae23116eb8b49e /chrome/browser/browser.cc | |
parent | 1f05db25d586c82e8420a8a28c1d0b6a7bcf44e6 (diff) | |
download | chromium_src-28191891f2389382e4e53d004e04a74bcb1b152e.zip chromium_src-28191891f2389382e4e53d004e04a74bcb1b152e.tar.gz chromium_src-28191891f2389382e4e53d004e04a74bcb1b152e.tar.bz2 |
Inform the command updater of the tab restore state.
BUG=14428
TEST=TabRestoreUITest.*
Review URL: http://codereview.chromium.org/2228004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48437 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r-- | chrome/browser/browser.cc | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index 0687eca..608b963 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -64,7 +64,6 @@ #include "chrome/browser/renderer_host/site_instance.h" #include "chrome/browser/sessions/session_service.h" #include "chrome/browser/sessions/session_types.h" -#include "chrome/browser/sessions/tab_restore_service.h" #include "chrome/browser/status_bubble.h" #include "chrome/browser/sync/profile_sync_service.h" #include "chrome/browser/sync/sync_ui_util.h" @@ -232,6 +231,12 @@ Browser::Browser(Type type, Profile* profile) use_vertical_tabs_.SetValue(false); } UpdateTabStripModelInsertionPolicy(); + + tab_restore_service_ = profile->GetTabRestoreService(); + if (tab_restore_service_) { + tab_restore_service_->AddObserver(this); + TabRestoreServiceChanged(tab_restore_service_); + } } Browser::~Browser() { @@ -275,6 +280,8 @@ Browser::~Browser() { // away so they don't try and call back to us. if (select_file_dialog_.get()) select_file_dialog_->ListenerDestroyed(); + + TabRestoreServiceDestroyed(tab_restore_service_); } // static @@ -969,8 +976,7 @@ void Browser::ReplaceRestoredTab( } bool Browser::CanRestoreTab() { - TabRestoreService* service = profile_->GetTabRestoreService(); - return service && !service->entries().empty(); + return command_updater_.IsCommandEnabled(IDC_RESTORE_TAB); } bool Browser::NavigateToIndexWithDisposition(int index, @@ -3005,6 +3011,7 @@ void Browser::InitCommandState() { command_updater_.UpdateCommandEnabled(IDC_NEW_TAB, true); command_updater_.UpdateCommandEnabled(IDC_CLOSE_TAB, true); command_updater_.UpdateCommandEnabled(IDC_DUPLICATE_TAB, true); + command_updater_.UpdateCommandEnabled(IDC_RESTORE_TAB, false); command_updater_.UpdateCommandEnabled(IDC_FULLSCREEN, true); command_updater_.UpdateCommandEnabled(IDC_EXIT, true); @@ -3111,8 +3118,6 @@ void Browser::InitCommandState() { command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_6, normal_window); command_updater_.UpdateCommandEnabled(IDC_SELECT_TAB_7, normal_window); command_updater_.UpdateCommandEnabled(IDC_SELECT_LAST_TAB, normal_window); - command_updater_.UpdateCommandEnabled(IDC_RESTORE_TAB, - !profile_->IsOffTheRecord()); // Page-related commands command_updater_.UpdateCommandEnabled(IDC_BOOKMARK_PAGE, normal_window); @@ -3881,6 +3886,20 @@ bool Browser::RunUnloadEventsHelper(TabContents* contents) { return false; } +void Browser::TabRestoreServiceChanged(TabRestoreService* service) { + command_updater_.UpdateCommandEnabled(IDC_RESTORE_TAB, + !service->entries().empty()); +} + +void Browser::TabRestoreServiceDestroyed(TabRestoreService* service) { + if (!tab_restore_service_) + return; + + DCHECK_EQ(tab_restore_service_, service); + tab_restore_service_->RemoveObserver(this); + tab_restore_service_ = NULL; +} + bool Browser::IsPinned(TabContents* source) { int index = tabstrip_model_.GetIndexOfTabContents(source); if (index == TabStripModel::kNoTab) { |