OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sessions/persistent_tab_restore_service.h" | 5 #include "chrome/browser/sessions/persistent_tab_restore_service.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
11 #include "chrome/browser/sessions/session_service.h" | 11 #include "chrome/browser/sessions/session_service.h" |
12 #include "chrome/browser/sessions/session_service_factory.h" | 12 #include "chrome/browser/sessions/session_service_factory.h" |
13 #include "chrome/browser/sessions/session_types.h" | 13 #include "chrome/browser/sessions/session_types.h" |
14 #include "chrome/browser/sessions/tab_restore_service_factory.h" | 14 #include "chrome/browser/sessions/tab_restore_service_factory.h" |
| 15 #include "chrome/browser/sessions/tab_restore_service_observer.h" |
15 #include "chrome/browser/ui/browser_window.h" | 16 #include "chrome/browser/ui/browser_window.h" |
16 #include "chrome/common/chrome_notification_types.h" | 17 #include "chrome/common/chrome_notification_types.h" |
17 #include "chrome/common/url_constants.h" | 18 #include "chrome/common/url_constants.h" |
18 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 19 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
19 #include "chrome/test/base/chrome_render_view_test.h" | 20 #include "chrome/test/base/chrome_render_view_test.h" |
20 #include "chrome/test/base/in_process_browser_test.h" | 21 #include "chrome/test/base/in_process_browser_test.h" |
21 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
22 #include "components/sessions/serialized_navigation_entry_test_helper.h" | 23 #include "components/sessions/serialized_navigation_entry_test_helper.h" |
23 #include "content/public/browser/browser_thread.h" | 24 #include "content/public/browser/browser_thread.h" |
24 #include "content/public/browser/navigation_controller.h" | 25 #include "content/public/browser/navigation_controller.h" |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 GURL url2_; | 163 GURL url2_; |
163 GURL url3_; | 164 GURL url3_; |
164 std::string user_agent_override_; | 165 std::string user_agent_override_; |
165 scoped_ptr<PersistentTabRestoreService> service_; | 166 scoped_ptr<PersistentTabRestoreService> service_; |
166 PersistentTabRestoreTimeFactory* time_factory_; | 167 PersistentTabRestoreTimeFactory* time_factory_; |
167 content::RenderViewTest::RendererWebKitPlatformSupportImplNoSandbox | 168 content::RenderViewTest::RendererWebKitPlatformSupportImplNoSandbox |
168 webkit_platform_support_; | 169 webkit_platform_support_; |
169 content::TestBrowserThread ui_thread_; | 170 content::TestBrowserThread ui_thread_; |
170 }; | 171 }; |
171 | 172 |
| 173 namespace { |
| 174 |
| 175 class TestTabRestoreServiceObserver : public TabRestoreServiceObserver { |
| 176 public: |
| 177 TestTabRestoreServiceObserver() : got_loaded_(false) {} |
| 178 |
| 179 void clear_got_loaded() { got_loaded_ = false; } |
| 180 bool got_loaded() const { return got_loaded_; } |
| 181 |
| 182 // TabRestoreServiceObserver: |
| 183 virtual void TabRestoreServiceChanged(TabRestoreService* service) OVERRIDE { |
| 184 } |
| 185 virtual void TabRestoreServiceDestroyed(TabRestoreService* service) OVERRIDE { |
| 186 } |
| 187 virtual void TabRestoreServiceLoaded(TabRestoreService* service) OVERRIDE { |
| 188 got_loaded_ = true; |
| 189 } |
| 190 |
| 191 private: |
| 192 // Was TabRestoreServiceLoaded() invoked? |
| 193 bool got_loaded_; |
| 194 |
| 195 DISALLOW_COPY_AND_ASSIGN(TestTabRestoreServiceObserver); |
| 196 }; |
| 197 |
| 198 } // namespace |
| 199 |
172 TEST_F(PersistentTabRestoreServiceTest, Basic) { | 200 TEST_F(PersistentTabRestoreServiceTest, Basic) { |
173 AddThreeNavigations(); | 201 AddThreeNavigations(); |
174 | 202 |
175 // Have the service record the tab. | 203 // Have the service record the tab. |
176 service_->CreateHistoricalTab(web_contents(), -1); | 204 service_->CreateHistoricalTab(web_contents(), -1); |
177 | 205 |
178 // Make sure an entry was created. | 206 // Make sure an entry was created. |
179 ASSERT_EQ(1U, service_->entries().size()); | 207 ASSERT_EQ(1U, service_->entries().size()); |
180 | 208 |
181 // Make sure the entry matches. | 209 // Make sure the entry matches. |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 ASSERT_EQ(1U, service_->entries().size()); | 393 ASSERT_EQ(1U, service_->entries().size()); |
366 } | 394 } |
367 | 395 |
368 // Makes sure we load the previous session as necessary. | 396 // Makes sure we load the previous session as necessary. |
369 TEST_F(PersistentTabRestoreServiceTest, LoadPreviousSession) { | 397 TEST_F(PersistentTabRestoreServiceTest, LoadPreviousSession) { |
370 CreateSessionServiceWithOneWindow(false); | 398 CreateSessionServiceWithOneWindow(false); |
371 | 399 |
372 SessionServiceFactory::GetForProfile(profile())-> | 400 SessionServiceFactory::GetForProfile(profile())-> |
373 MoveCurrentSessionToLastSession(); | 401 MoveCurrentSessionToLastSession(); |
374 | 402 |
| 403 EXPECT_FALSE(service_->IsLoaded()); |
| 404 |
| 405 TestTabRestoreServiceObserver observer; |
| 406 service_->AddObserver(&observer); |
375 service_->LoadTabsFromLastSession(); | 407 service_->LoadTabsFromLastSession(); |
| 408 EXPECT_TRUE(observer.got_loaded()); |
| 409 service_->RemoveObserver(&observer); |
376 | 410 |
377 // Make sure we get back one entry with one tab whose url is url1. | 411 // Make sure we get back one entry with one tab whose url is url1. |
378 ASSERT_EQ(1U, service_->entries().size()); | 412 ASSERT_EQ(1U, service_->entries().size()); |
379 TabRestoreService::Entry* entry2 = service_->entries().front(); | 413 TabRestoreService::Entry* entry2 = service_->entries().front(); |
380 ASSERT_EQ(TabRestoreService::WINDOW, entry2->type); | 414 ASSERT_EQ(TabRestoreService::WINDOW, entry2->type); |
381 TabRestoreService::Window* window = | 415 TabRestoreService::Window* window = |
382 static_cast<TabRestoreService::Window*>(entry2); | 416 static_cast<TabRestoreService::Window*>(entry2); |
383 ASSERT_EQ(1U, window->tabs.size()); | 417 ASSERT_EQ(1U, window->tabs.size()); |
384 EXPECT_EQ(0, window->timestamp.ToInternalValue()); | 418 EXPECT_EQ(0, window->timestamp.ToInternalValue()); |
385 EXPECT_EQ(0, window->selected_tab_index); | 419 EXPECT_EQ(0, window->selected_tab_index); |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 NavigateAndCommit( | 722 NavigateAndCommit( |
689 GURL(base::StringPrintf("http://%d", static_cast<int>(i)))); | 723 GURL(base::StringPrintf("http://%d", static_cast<int>(i)))); |
690 service_->CreateHistoricalTab(web_contents(), -1); | 724 service_->CreateHistoricalTab(web_contents(), -1); |
691 } | 725 } |
692 | 726 |
693 EXPECT_EQ(max_entries, service_->entries().size()); | 727 EXPECT_EQ(max_entries, service_->entries().size()); |
694 // This should not crash. | 728 // This should not crash. |
695 service_->LoadTabsFromLastSession(); | 729 service_->LoadTabsFromLastSession(); |
696 EXPECT_EQ(max_entries, service_->entries().size()); | 730 EXPECT_EQ(max_entries, service_->entries().size()); |
697 } | 731 } |
| 732 |
| 733 // Makes sure invoking LoadTabsFromLastSession() when the max number of entries |
| 734 // have been added results in IsLoaded() returning true and notifies observers. |
| 735 TEST_F(PersistentTabRestoreServiceTest, GoToLoadedWhenHaveMaxEntries) { |
| 736 const size_t max_entries = kMaxEntries; |
| 737 for (size_t i = 0; i < max_entries + 5; i++) { |
| 738 NavigateAndCommit( |
| 739 GURL(base::StringPrintf("http://%d", static_cast<int>(i)))); |
| 740 service_->CreateHistoricalTab(web_contents(), -1); |
| 741 } |
| 742 |
| 743 EXPECT_FALSE(service_->IsLoaded()); |
| 744 TestTabRestoreServiceObserver observer; |
| 745 service_->AddObserver(&observer); |
| 746 EXPECT_EQ(max_entries, service_->entries().size()); |
| 747 service_->LoadTabsFromLastSession(); |
| 748 EXPECT_TRUE(observer.got_loaded()); |
| 749 EXPECT_TRUE(service_->IsLoaded()); |
| 750 service_->RemoveObserver(&observer); |
| 751 } |
OLD | NEW |