Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1361)

Side by Side Diff: chrome/browser/sessions/persistent_tab_restore_service_browsertest.cc

Issue 14497003: Moves TabNavigation into components/sessions and renames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Really remove webkit_support Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/sessions/session_service.h" 10 #include "chrome/browser/sessions/session_service.h"
11 #include "chrome/browser/sessions/session_service_factory.h" 11 #include "chrome/browser/sessions/session_service_factory.h"
12 #include "chrome/browser/sessions/session_types.h" 12 #include "chrome/browser/sessions/session_types.h"
13 #include "chrome/browser/sessions/session_types_test_helper.h"
14 #include "chrome/browser/sessions/tab_restore_service_factory.h" 13 #include "chrome/browser/sessions/tab_restore_service_factory.h"
15 #include "chrome/browser/ui/browser_window.h" 14 #include "chrome/browser/ui/browser_window.h"
16 #include "chrome/common/chrome_notification_types.h" 15 #include "chrome/common/chrome_notification_types.h"
17 #include "chrome/common/url_constants.h" 16 #include "chrome/common/url_constants.h"
18 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 17 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
19 #include "chrome/test/base/chrome_render_view_test.h" 18 #include "chrome/test/base/chrome_render_view_test.h"
20 #include "chrome/test/base/in_process_browser_test.h" 19 #include "chrome/test/base/in_process_browser_test.h"
21 #include "chrome/test/base/testing_profile.h" 20 #include "chrome/test/base/testing_profile.h"
21 #include "components/sessions/serialized_navigation_entry_test_helper.h"
22 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
23 #include "content/public/browser/navigation_controller.h" 23 #include "content/public/browser/navigation_controller.h"
24 #include "content/public/browser/navigation_entry.h" 24 #include "content/public/browser/navigation_entry.h"
25 #include "content/public/browser/notification_service.h" 25 #include "content/public/browser/notification_service.h"
26 #include "content/public/browser/notification_types.h" 26 #include "content/public/browser/notification_types.h"
27 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
28 #include "content/public/test/render_view_test.h" 28 #include "content/public/test/render_view_test.h"
29 #include "content/public/test/test_browser_thread.h" 29 #include "content/public/test/test_browser_thread.h"
30 #include "content/public/test/test_utils.h" 30 #include "content/public/test/test_utils.h"
31 #include "content/public/test/web_contents_tester.h" 31 #include "content/public/test/web_contents_tester.h"
32 #include "testing/gtest/include/gtest/gtest.h" 32 #include "testing/gtest/include/gtest/gtest.h"
33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" 33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
34 34
35 typedef TabRestoreService::Tab Tab; 35 typedef TabRestoreService::Tab Tab;
36 typedef TabRestoreService::Window Window; 36 typedef TabRestoreService::Window Window;
37 using content::WebContentsTester;
38 37
39 using content::NavigationEntry; 38 using content::NavigationEntry;
39 using content::WebContentsTester;
40 using sessions::SerializedNavigationEntry;
41 using sessions::SerializedNavigationEntryTestHelper;
40 42
41 // Create subclass that overrides TimeNow so that we can control the time used 43 // Create subclass that overrides TimeNow so that we can control the time used
42 // for closed tabs and windows. 44 // for closed tabs and windows.
43 class PersistentTabRestoreTimeFactory : public TabRestoreService::TimeFactory { 45 class PersistentTabRestoreTimeFactory : public TabRestoreService::TimeFactory {
44 public: 46 public:
45 PersistentTabRestoreTimeFactory() : time_(base::Time::Now()) {} 47 PersistentTabRestoreTimeFactory() : time_(base::Time::Now()) {}
46 48
47 virtual ~PersistentTabRestoreTimeFactory() {} 49 virtual ~PersistentTabRestoreTimeFactory() {}
48 50
49 virtual base::Time TimeNow() OVERRIDE { 51 virtual base::Time TimeNow() OVERRIDE {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 SessionID window_id; 131 SessionID window_id;
130 session_service->SetWindowType( 132 session_service->SetWindowType(
131 window_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL); 133 window_id, Browser::TYPE_TABBED, SessionService::TYPE_NORMAL);
132 session_service->SetTabWindow(window_id, tab_id); 134 session_service->SetTabWindow(window_id, tab_id);
133 session_service->SetTabIndexInWindow(window_id, tab_id, 0); 135 session_service->SetTabIndexInWindow(window_id, tab_id, 0);
134 session_service->SetSelectedTabInWindow(window_id, 0); 136 session_service->SetSelectedTabInWindow(window_id, 0);
135 if (pinned) 137 if (pinned)
136 session_service->SetPinnedState(window_id, tab_id, true); 138 session_service->SetPinnedState(window_id, tab_id, true);
137 session_service->UpdateTabNavigation( 139 session_service->UpdateTabNavigation(
138 window_id, tab_id, 140 window_id, tab_id,
139 SessionTypesTestHelper::CreateNavigation(url1_.spec(), "title")); 141 SerializedNavigationEntryTestHelper::CreateNavigation(
142 url1_.spec(), "title"));
140 } 143 }
141 144
142 // Creates a SessionService and assigns it to the Profile. The SessionService 145 // Creates a SessionService and assigns it to the Profile. The SessionService
143 // is configured with a single window with a single tab pointing at url1_ by 146 // is configured with a single window with a single tab pointing at url1_ by
144 // way of AddWindowWithOneTabToSessionService. If |pinned| is true, the 147 // way of AddWindowWithOneTabToSessionService. If |pinned| is true, the
145 // tab is marked as pinned in the session service. 148 // tab is marked as pinned in the session service.
146 void CreateSessionServiceWithOneWindow(bool pinned) { 149 void CreateSessionServiceWithOneWindow(bool pinned) {
147 // The profile takes ownership of this. 150 // The profile takes ownership of this.
148 SessionService* session_service = new SessionService(profile()); 151 SessionService* session_service = new SessionService(profile());
149 SessionServiceFactory::SetForTestProfile(profile(), session_service); 152 SessionServiceFactory::SetForTestProfile(profile(), session_service);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 541
539 AddThreeNavigations(); 542 AddThreeNavigations();
540 543
541 // Have the service record the tab. 544 // Have the service record the tab.
542 service_->CreateHistoricalTab(web_contents(), -1); 545 service_->CreateHistoricalTab(web_contents(), -1);
543 546
544 // Make sure an entry was created. 547 // Make sure an entry was created.
545 ASSERT_EQ(1U, service_->entries().size()); 548 ASSERT_EQ(1U, service_->entries().size());
546 549
547 // Make sure the entry matches. 550 // Make sure the entry matches.
548 std::vector<TabNavigation> old_navigations; 551 std::vector<SerializedNavigationEntry> old_navigations;
549 { 552 {
550 // |entry|/|tab| doesn't survive after RecreateService(). 553 // |entry|/|tab| doesn't survive after RecreateService().
551 TabRestoreService::Entry* entry = service_->entries().front(); 554 TabRestoreService::Entry* entry = service_->entries().front();
552 ASSERT_EQ(TabRestoreService::TAB, entry->type); 555 ASSERT_EQ(TabRestoreService::TAB, entry->type);
553 Tab* tab = static_cast<Tab*>(entry); 556 Tab* tab = static_cast<Tab*>(entry);
554 tab->timestamp = tab_timestamp; 557 tab->timestamp = tab_timestamp;
555 old_navigations = tab->navigations; 558 old_navigations = tab->navigations;
556 } 559 }
557 560
558 EXPECT_EQ(3U, old_navigations.size()); 561 EXPECT_EQ(3U, old_navigations.size());
559 for (size_t i = 0; i < old_navigations.size(); ++i) { 562 for (size_t i = 0; i < old_navigations.size(); ++i) {
560 EXPECT_FALSE( 563 EXPECT_FALSE(old_navigations[i].timestamp().is_null());
561 SessionTypesTestHelper::GetTimestamp(old_navigations[i]).is_null());
562 } 564 }
563 565
564 // Set this, otherwise previous session won't be loaded. 566 // Set this, otherwise previous session won't be loaded.
565 profile()->set_last_session_exited_cleanly(false); 567 profile()->set_last_session_exited_cleanly(false);
566 568
567 RecreateService(); 569 RecreateService();
568 570
569 // One entry should be created. 571 // One entry should be created.
570 ASSERT_EQ(1U, service_->entries().size()); 572 ASSERT_EQ(1U, service_->entries().size());
571 573
572 // And verify the entry. 574 // And verify the entry.
573 TabRestoreService::Entry* restored_entry = service_->entries().front(); 575 TabRestoreService::Entry* restored_entry = service_->entries().front();
574 ASSERT_EQ(TabRestoreService::TAB, restored_entry->type); 576 ASSERT_EQ(TabRestoreService::TAB, restored_entry->type);
575 Tab* restored_tab = 577 Tab* restored_tab =
576 static_cast<Tab*>(restored_entry); 578 static_cast<Tab*>(restored_entry);
577 EXPECT_EQ(tab_timestamp.ToInternalValue(), 579 EXPECT_EQ(tab_timestamp.ToInternalValue(),
578 restored_tab->timestamp.ToInternalValue()); 580 restored_tab->timestamp.ToInternalValue());
579 ASSERT_EQ(old_navigations.size(), restored_tab->navigations.size()); 581 ASSERT_EQ(old_navigations.size(), restored_tab->navigations.size());
580 for (size_t i = 0; i < restored_tab->navigations.size(); ++i) { 582 for (size_t i = 0; i < restored_tab->navigations.size(); ++i) {
581 EXPECT_EQ( 583 EXPECT_EQ(old_navigations[i].timestamp(),
582 SessionTypesTestHelper::GetTimestamp(old_navigations[i]), 584 restored_tab->navigations[i].timestamp());
583 SessionTypesTestHelper::GetTimestamp(restored_tab->navigations[i]));
584 } 585 }
585 } 586 }
586 587
587 TEST_F(PersistentTabRestoreServiceTest, PruneEntries) { 588 TEST_F(PersistentTabRestoreServiceTest, PruneEntries) {
588 service_->ClearEntries(); 589 service_->ClearEntries();
589 ASSERT_TRUE(service_->entries().empty()); 590 ASSERT_TRUE(service_->entries().empty());
590 591
591 const size_t max_entries = kMaxEntries; 592 const size_t max_entries = kMaxEntries;
592 for (size_t i = 0; i < max_entries + 5; i++) { 593 for (size_t i = 0; i < max_entries + 5; i++) {
593 TabNavigation navigation = 594 SerializedNavigationEntry navigation =
594 SessionTypesTestHelper::CreateNavigation( 595 SerializedNavigationEntryTestHelper::CreateNavigation(
595 base::StringPrintf("http://%d", static_cast<int>(i)), 596 base::StringPrintf("http://%d", static_cast<int>(i)),
596 base::StringPrintf("%d", static_cast<int>(i))); 597 base::StringPrintf("%d", static_cast<int>(i)));
597 598
598 Tab* tab = new Tab(); 599 Tab* tab = new Tab();
599 tab->navigations.push_back(navigation); 600 tab->navigations.push_back(navigation);
600 tab->current_navigation_index = 0; 601 tab->current_navigation_index = 0;
601 602
602 mutable_entries()->push_back(tab); 603 mutable_entries()->push_back(tab);
603 } 604 }
604 605
605 // Only keep kMaxEntries around. 606 // Only keep kMaxEntries around.
606 EXPECT_EQ(max_entries + 5, service_->entries().size()); 607 EXPECT_EQ(max_entries + 5, service_->entries().size());
607 PruneEntries(); 608 PruneEntries();
608 EXPECT_EQ(max_entries, service_->entries().size()); 609 EXPECT_EQ(max_entries, service_->entries().size());
609 // Pruning again does nothing. 610 // Pruning again does nothing.
610 PruneEntries(); 611 PruneEntries();
611 EXPECT_EQ(max_entries, service_->entries().size()); 612 EXPECT_EQ(max_entries, service_->entries().size());
612 613
613 // Prune older first. 614 // Prune older first.
614 const char kRecentUrl[] = "http://recent"; 615 const char kRecentUrl[] = "http://recent";
615 TabNavigation navigation = 616 SerializedNavigationEntry navigation =
616 SessionTypesTestHelper::CreateNavigation(kRecentUrl, "Most recent"); 617 SerializedNavigationEntryTestHelper::CreateNavigation(kRecentUrl,
618 "Most recent");
617 Tab* tab = new Tab(); 619 Tab* tab = new Tab();
618 tab->navigations.push_back(navigation); 620 tab->navigations.push_back(navigation);
619 tab->current_navigation_index = 0; 621 tab->current_navigation_index = 0;
620 mutable_entries()->push_front(tab); 622 mutable_entries()->push_front(tab);
621 EXPECT_EQ(max_entries + 1, service_->entries().size()); 623 EXPECT_EQ(max_entries + 1, service_->entries().size());
622 PruneEntries(); 624 PruneEntries();
623 EXPECT_EQ(max_entries, service_->entries().size()); 625 EXPECT_EQ(max_entries, service_->entries().size());
624 EXPECT_EQ(GURL(kRecentUrl), 626 EXPECT_EQ(GURL(kRecentUrl),
625 static_cast<Tab*>(service_->entries().front())-> 627 static_cast<Tab*>(service_->entries().front())->
626 navigations[0].virtual_url()); 628 navigations[0].virtual_url());
627 629
628 // Ignore NTPs. 630 // Ignore NTPs.
629 navigation = 631 navigation = SerializedNavigationEntryTestHelper::CreateNavigation(
630 SessionTypesTestHelper::CreateNavigation( 632 chrome::kChromeUINewTabURL, "New tab");
631 chrome::kChromeUINewTabURL, "New tab");
632 633
633 tab = new Tab(); 634 tab = new Tab();
634 tab->navigations.push_back(navigation); 635 tab->navigations.push_back(navigation);
635 tab->current_navigation_index = 0; 636 tab->current_navigation_index = 0;
636 mutable_entries()->push_front(tab); 637 mutable_entries()->push_front(tab);
637 638
638 EXPECT_EQ(max_entries + 1, service_->entries().size()); 639 EXPECT_EQ(max_entries + 1, service_->entries().size());
639 PruneEntries(); 640 PruneEntries();
640 EXPECT_EQ(max_entries, service_->entries().size()); 641 EXPECT_EQ(max_entries, service_->entries().size());
641 EXPECT_EQ(GURL(kRecentUrl), 642 EXPECT_EQ(GURL(kRecentUrl),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 NavigateAndCommit( 687 NavigateAndCommit(
687 GURL(base::StringPrintf("http://%d", static_cast<int>(i)))); 688 GURL(base::StringPrintf("http://%d", static_cast<int>(i))));
688 service_->CreateHistoricalTab(web_contents(), -1); 689 service_->CreateHistoricalTab(web_contents(), -1);
689 } 690 }
690 691
691 EXPECT_EQ(max_entries, service_->entries().size()); 692 EXPECT_EQ(max_entries, service_->entries().size());
692 // This should not crash. 693 // This should not crash.
693 service_->LoadTabsFromLastSession(); 694 service_->LoadTabsFromLastSession();
694 EXPECT_EQ(max_entries, service_->entries().size()); 695 EXPECT_EQ(max_entries, service_->entries().size());
695 } 696 }
OLDNEW
« no previous file with comments | « chrome/browser/sessions/persistent_tab_restore_service.cc ('k') | chrome/browser/sessions/session_command.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698