| 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/history/history_backend.h" | 5 #include "chrome/browser/history/history_backend.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 row4.set_typed_count(1); | 815 row4.set_typed_count(1); |
| 816 row4.set_last_visit(Time::Now() - base::TimeDelta::FromDays(365 + 2)); | 816 row4.set_last_visit(Time::Now() - base::TimeDelta::FromDays(365 + 2)); |
| 817 | 817 |
| 818 URLRows rows; | 818 URLRows rows; |
| 819 rows.push_back(row1); | 819 rows.push_back(row1); |
| 820 rows.push_back(row2); | 820 rows.push_back(row2); |
| 821 rows.push_back(row3); | 821 rows.push_back(row3); |
| 822 rows.push_back(row4); | 822 rows.push_back(row4); |
| 823 backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED); | 823 backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED); |
| 824 | 824 |
| 825 // Verify that recent URLs have ended up in the main |db_|, while expired URLs | 825 // Verify that recent URLs have ended up in the main |db_|, while the expired |
| 826 // have ended up in the |archived_db_|. | 826 // URL has not. |
| 827 URLRow stored_row1, stored_row2, stored_row3, stored_row4; | 827 URLRow stored_row1, stored_row2, stored_row3, stored_row4; |
| 828 EXPECT_NE(0, backend_->db_->GetRowForURL(row1.url(), &stored_row1)); | 828 EXPECT_NE(0, backend_->db_->GetRowForURL(row1.url(), &stored_row1)); |
| 829 EXPECT_NE(0, backend_->db_->GetRowForURL(row2.url(), &stored_row2)); | 829 EXPECT_NE(0, backend_->db_->GetRowForURL(row2.url(), &stored_row2)); |
| 830 EXPECT_NE(0, backend_->db_->GetRowForURL(row3.url(), &stored_row3)); | 830 EXPECT_NE(0, backend_->db_->GetRowForURL(row3.url(), &stored_row3)); |
| 831 EXPECT_EQ(0, backend_->db_->GetRowForURL(row4.url(), &stored_row4)); | 831 EXPECT_EQ(0, backend_->db_->GetRowForURL(row4.url(), &stored_row4)); |
| 832 | 832 |
| 833 EXPECT_EQ(0, backend_->archived_db_->GetRowForURL(row1.url(), &stored_row1)); | |
| 834 EXPECT_EQ(0, backend_->archived_db_->GetRowForURL(row2.url(), &stored_row2)); | |
| 835 EXPECT_EQ(0, backend_->archived_db_->GetRowForURL(row3.url(), &stored_row3)); | |
| 836 EXPECT_NE(0, backend_->archived_db_->GetRowForURL(row4.url(), &stored_row4)); | |
| 837 | |
| 838 ASSERT_EQ(1u, broadcasted_notifications().size()); | 833 ASSERT_EQ(1u, broadcasted_notifications().size()); |
| 839 ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, | 834 ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, |
| 840 broadcasted_notifications()[0].first); | 835 broadcasted_notifications()[0].first); |
| 841 const URLsModifiedDetails* details = static_cast<const URLsModifiedDetails*>( | 836 const URLsModifiedDetails* details = static_cast<const URLsModifiedDetails*>( |
| 842 broadcasted_notifications()[0].second); | 837 broadcasted_notifications()[0].second); |
| 843 EXPECT_EQ(2u, details->changed_urls.size()); | 838 EXPECT_EQ(2u, details->changed_urls.size()); |
| 844 | 839 |
| 845 URLRows::const_iterator it_row2 = std::find_if( | 840 URLRows::const_iterator it_row2 = std::find_if( |
| 846 details->changed_urls.begin(), | 841 details->changed_urls.begin(), |
| 847 details->changed_urls.end(), | 842 details->changed_urls.end(), |
| (...skipping 1753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2601 // Remove the visit to cnn.com. | 2596 // Remove the visit to cnn.com. |
| 2602 ASSERT_TRUE(backend_->RemoveVisits(visits1)); | 2597 ASSERT_TRUE(backend_->RemoveVisits(visits1)); |
| 2603 } | 2598 } |
| 2604 | 2599 |
| 2605 // Test for migration of adding visit_duration column. | 2600 // Test for migration of adding visit_duration column. |
| 2606 TEST_F(HistoryBackendTest, MigrationVisitDuration) { | 2601 TEST_F(HistoryBackendTest, MigrationVisitDuration) { |
| 2607 ASSERT_TRUE(backend_.get()); | 2602 ASSERT_TRUE(backend_.get()); |
| 2608 backend_->Closing(); | 2603 backend_->Closing(); |
| 2609 backend_ = NULL; | 2604 backend_ = NULL; |
| 2610 | 2605 |
| 2611 base::FilePath old_history_path, old_history, old_archived; | 2606 base::FilePath old_history_path, old_history; |
| 2612 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &old_history_path)); | 2607 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &old_history_path)); |
| 2613 old_history_path = old_history_path.AppendASCII("History"); | 2608 old_history_path = old_history_path.AppendASCII("History"); |
| 2614 old_history = old_history_path.AppendASCII("HistoryNoDuration"); | 2609 old_history = old_history_path.AppendASCII("HistoryNoDuration"); |
| 2615 old_archived = old_history_path.AppendASCII("ArchivedNoDuration"); | |
| 2616 | 2610 |
| 2617 // Copy history database file to current directory so that it will be deleted | 2611 // Copy history database file to current directory so that it will be deleted |
| 2618 // in Teardown. | 2612 // in Teardown. |
| 2619 base::FilePath new_history_path(getTestDir()); | 2613 base::FilePath new_history_path(getTestDir()); |
| 2620 base::DeleteFile(new_history_path, true); | 2614 base::DeleteFile(new_history_path, true); |
| 2621 base::CreateDirectory(new_history_path); | 2615 base::CreateDirectory(new_history_path); |
| 2622 base::FilePath new_history_file = | 2616 base::FilePath new_history_file = |
| 2623 new_history_path.Append(chrome::kHistoryFilename); | 2617 new_history_path.Append(chrome::kHistoryFilename); |
| 2624 base::FilePath new_archived_file = | |
| 2625 new_history_path.Append(chrome::kArchivedHistoryFilename); | |
| 2626 ASSERT_TRUE(base::CopyFile(old_history, new_history_file)); | 2618 ASSERT_TRUE(base::CopyFile(old_history, new_history_file)); |
| 2627 ASSERT_TRUE(base::CopyFile(old_archived, new_archived_file)); | |
| 2628 | 2619 |
| 2629 backend_ = new HistoryBackend(new_history_path, | 2620 backend_ = new HistoryBackend(new_history_path, |
| 2630 new HistoryBackendTestDelegate(this), | 2621 new HistoryBackendTestDelegate(this), |
| 2631 &bookmark_model_); | 2622 &bookmark_model_); |
| 2632 backend_->Init(std::string(), false); | 2623 backend_->Init(std::string(), false); |
| 2633 backend_->Closing(); | 2624 backend_->Closing(); |
| 2634 backend_ = NULL; | 2625 backend_ = NULL; |
| 2635 | 2626 |
| 2636 // Now both history and archived_history databases should already be migrated. | 2627 // Now the history database should already be migrated. |
| 2637 | 2628 |
| 2638 // Check version in history database first. | 2629 // Check version in history database first. |
| 2639 int cur_version = HistoryDatabase::GetCurrentVersion(); | 2630 int cur_version = HistoryDatabase::GetCurrentVersion(); |
| 2640 sql::Connection db; | 2631 sql::Connection db; |
| 2641 ASSERT_TRUE(db.Open(new_history_file)); | 2632 ASSERT_TRUE(db.Open(new_history_file)); |
| 2642 sql::Statement s(db.GetUniqueStatement( | 2633 sql::Statement s(db.GetUniqueStatement( |
| 2643 "SELECT value FROM meta WHERE key = 'version'")); | 2634 "SELECT value FROM meta WHERE key = 'version'")); |
| 2644 ASSERT_TRUE(s.Step()); | 2635 ASSERT_TRUE(s.Step()); |
| 2645 int file_version = s.ColumnInt(0); | 2636 int file_version = s.ColumnInt(0); |
| 2646 EXPECT_EQ(cur_version, file_version); | 2637 EXPECT_EQ(cur_version, file_version); |
| 2647 | 2638 |
| 2648 // Check visit_duration column in visits table is created and set to 0. | 2639 // Check visit_duration column in visits table is created and set to 0. |
| 2649 s.Assign(db.GetUniqueStatement( | 2640 s.Assign(db.GetUniqueStatement( |
| 2650 "SELECT visit_duration FROM visits LIMIT 1")); | 2641 "SELECT visit_duration FROM visits LIMIT 1")); |
| 2651 ASSERT_TRUE(s.Step()); | 2642 ASSERT_TRUE(s.Step()); |
| 2652 EXPECT_EQ(0, s.ColumnInt(0)); | 2643 EXPECT_EQ(0, s.ColumnInt(0)); |
| 2653 | |
| 2654 // Repeat version and visit_duration checks in archived history database | |
| 2655 // also. | |
| 2656 cur_version = ArchivedDatabase::GetCurrentVersion(); | |
| 2657 sql::Connection archived_db; | |
| 2658 ASSERT_TRUE(archived_db.Open(new_archived_file)); | |
| 2659 sql::Statement s1(archived_db.GetUniqueStatement( | |
| 2660 "SELECT value FROM meta WHERE key = 'version'")); | |
| 2661 ASSERT_TRUE(s1.Step()); | |
| 2662 file_version = s1.ColumnInt(0); | |
| 2663 EXPECT_EQ(cur_version, file_version); | |
| 2664 | |
| 2665 // Check visit_duration column in visits table is created and set to 0. | |
| 2666 s1.Assign(archived_db.GetUniqueStatement( | |
| 2667 "SELECT visit_duration FROM visits LIMIT 1")); | |
| 2668 ASSERT_TRUE(s1.Step()); | |
| 2669 EXPECT_EQ(0, s1.ColumnInt(0)); | |
| 2670 } | 2644 } |
| 2671 | 2645 |
| 2672 TEST_F(HistoryBackendTest, AddPageNoVisitForBookmark) { | 2646 TEST_F(HistoryBackendTest, AddPageNoVisitForBookmark) { |
| 2673 ASSERT_TRUE(backend_.get()); | 2647 ASSERT_TRUE(backend_.get()); |
| 2674 | 2648 |
| 2675 GURL url("http://www.google.com"); | 2649 GURL url("http://www.google.com"); |
| 2676 base::string16 title(base::UTF8ToUTF16("Bookmark title")); | 2650 base::string16 title(base::UTF8ToUTF16("Bookmark title")); |
| 2677 backend_->AddPageNoVisitForBookmark(url, title); | 2651 backend_->AddPageNoVisitForBookmark(url, title); |
| 2678 | 2652 |
| 2679 URLRow row; | 2653 URLRow row; |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2909 | 2883 |
| 2910 // Delete all DTS index databases. | 2884 // Delete all DTS index databases. |
| 2911 backend_->DeleteFTSIndexDatabases(); | 2885 backend_->DeleteFTSIndexDatabases(); |
| 2912 EXPECT_FALSE(base::PathExists(db1)); | 2886 EXPECT_FALSE(base::PathExists(db1)); |
| 2913 EXPECT_FALSE(base::PathExists(db1_wal)); | 2887 EXPECT_FALSE(base::PathExists(db1_wal)); |
| 2914 EXPECT_FALSE(base::PathExists(db1_journal)); | 2888 EXPECT_FALSE(base::PathExists(db1_journal)); |
| 2915 EXPECT_FALSE(base::PathExists(db2_symlink)); | 2889 EXPECT_FALSE(base::PathExists(db2_symlink)); |
| 2916 EXPECT_TRUE(base::PathExists(db2_actual)); // Symlinks shouldn't be followed. | 2890 EXPECT_TRUE(base::PathExists(db2_actual)); // Symlinks shouldn't be followed. |
| 2917 } | 2891 } |
| 2918 | 2892 |
| 2893 TEST_F(HistoryBackendTest, ArchiveDatabaseGetsPurged) { |
| 2894 ASSERT_TRUE(backend_.get()); |
| 2895 backend_->Closing(); |
| 2896 backend_ = NULL; |
| 2897 |
| 2898 // kArchivedHistoryFilename |
| 2899 |
| 2900 base::FilePath old_history_path; |
| 2901 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &old_history_path)); |
| 2902 old_history_path = old_history_path.AppendASCII("History"); |
| 2903 old_history_path = old_history_path.AppendASCII("HistoryNoSource"); |
| 2904 |
| 2905 // Copy history database file to current directory so that it will be deleted |
| 2906 // in Teardown. |
| 2907 base::FilePath new_history_path(getTestDir()); |
| 2908 base::DeleteFile(new_history_path, true); |
| 2909 base::CreateDirectory(new_history_path); |
| 2910 base::FilePath new_history_file = |
| 2911 new_history_path.Append(chrome::kHistoryFilename); |
| 2912 ASSERT_TRUE(base::CopyFile(old_history_path, new_history_file)); |
| 2913 |
| 2914 backend_ = new HistoryBackend(new_history_path, |
| 2915 new HistoryBackendTestDelegate(this), |
| 2916 &bookmark_model_); |
| 2917 backend_->Init(std::string(), false); |
| 2918 backend_->Closing(); |
| 2919 backend_ = NULL; |
| 2920 |
| 2921 // Now the database should already be migrated. |
| 2922 // Check version first. |
| 2923 int cur_version = HistoryDatabase::GetCurrentVersion(); |
| 2924 sql::Connection db; |
| 2925 ASSERT_TRUE(db.Open(new_history_file)); |
| 2926 sql::Statement s(db.GetUniqueStatement( |
| 2927 "SELECT value FROM meta WHERE key = 'version'")); |
| 2928 ASSERT_TRUE(s.Step()); |
| 2929 int file_version = s.ColumnInt(0); |
| 2930 EXPECT_EQ(cur_version, file_version); |
| 2931 |
| 2932 // Check visit_source table is created and empty. |
| 2933 s.Assign(db.GetUniqueStatement( |
| 2934 "SELECT name FROM sqlite_master WHERE name=\"visit_source\"")); |
| 2935 ASSERT_TRUE(s.Step()); |
| 2936 s.Assign(db.GetUniqueStatement("SELECT * FROM visit_source LIMIT 10")); |
| 2937 EXPECT_FALSE(s.Step()); |
| 2938 } |
| 2939 |
| 2919 } // namespace history | 2940 } // namespace history |
| OLD | NEW |