Index: chrome/browser/sessions/persistent_tab_restore_service_browsertest.cc |
diff --git a/chrome/browser/sessions/persistent_tab_restore_service_browsertest.cc b/chrome/browser/sessions/persistent_tab_restore_service_browsertest.cc |
index b90a8dde57aa313c2afde55e974bb576e1dfb8ad..399b35a863525562e2b5f7a61c872c573363d6fc 100644 |
--- a/chrome/browser/sessions/persistent_tab_restore_service_browsertest.cc |
+++ b/chrome/browser/sessions/persistent_tab_restore_service_browsertest.cc |
@@ -12,6 +12,7 @@ |
#include "chrome/browser/sessions/session_service_factory.h" |
#include "chrome/browser/sessions/session_types.h" |
#include "chrome/browser/sessions/tab_restore_service_factory.h" |
+#include "chrome/browser/sessions/tab_restore_service_observer.h" |
#include "chrome/browser/ui/browser_window.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/url_constants.h" |
@@ -169,6 +170,33 @@ class PersistentTabRestoreServiceTest : public ChromeRenderViewHostTestHarness { |
content::TestBrowserThread ui_thread_; |
}; |
+namespace { |
+ |
+class TestTabRestoreServiceObserver : public TabRestoreServiceObserver { |
+ public: |
+ TestTabRestoreServiceObserver() : got_loaded_(false) {} |
+ |
+ void clear_got_loaded() { got_loaded_ = false; } |
+ bool got_loaded() const { return got_loaded_; } |
+ |
+ // TabRestoreServiceObserver: |
+ virtual void TabRestoreServiceChanged(TabRestoreService* service) OVERRIDE { |
+ } |
+ virtual void TabRestoreServiceDestroyed(TabRestoreService* service) OVERRIDE { |
+ } |
+ virtual void TabRestoreServiceLoaded(TabRestoreService* service) OVERRIDE { |
+ got_loaded_ = true; |
+ } |
+ |
+ private: |
+ // Was TabRestoreServiceLoaded() invoked? |
+ bool got_loaded_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestTabRestoreServiceObserver); |
+}; |
+ |
+} // namespace |
+ |
TEST_F(PersistentTabRestoreServiceTest, Basic) { |
AddThreeNavigations(); |
@@ -372,7 +400,13 @@ TEST_F(PersistentTabRestoreServiceTest, LoadPreviousSession) { |
SessionServiceFactory::GetForProfile(profile())-> |
MoveCurrentSessionToLastSession(); |
+ EXPECT_FALSE(service_->IsLoaded()); |
+ |
+ TestTabRestoreServiceObserver observer; |
+ service_->AddObserver(&observer); |
service_->LoadTabsFromLastSession(); |
+ EXPECT_TRUE(observer.got_loaded()); |
+ service_->RemoveObserver(&observer); |
// Make sure we get back one entry with one tab whose url is url1. |
ASSERT_EQ(1U, service_->entries().size()); |
@@ -695,3 +729,23 @@ TEST_F(PersistentTabRestoreServiceTest, PruneIsCalled) { |
service_->LoadTabsFromLastSession(); |
EXPECT_EQ(max_entries, service_->entries().size()); |
} |
+ |
+// Makes sure invoking LoadTabsFromLastSession() when the max number of entries |
+// have been added results in IsLoaded() returning true and notifies observers. |
+TEST_F(PersistentTabRestoreServiceTest, GoToLoadedWhenHaveMaxEntries) { |
+ const size_t max_entries = kMaxEntries; |
+ for (size_t i = 0; i < max_entries + 5; i++) { |
+ NavigateAndCommit( |
+ GURL(base::StringPrintf("http://%d", static_cast<int>(i)))); |
+ service_->CreateHistoricalTab(web_contents(), -1); |
+ } |
+ |
+ EXPECT_FALSE(service_->IsLoaded()); |
+ TestTabRestoreServiceObserver observer; |
+ service_->AddObserver(&observer); |
+ EXPECT_EQ(max_entries, service_->entries().size()); |
+ service_->LoadTabsFromLastSession(); |
+ EXPECT_TRUE(observer.got_loaded()); |
+ EXPECT_TRUE(service_->IsLoaded()); |
+ service_->RemoveObserver(&observer); |
+} |