| 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 <set> | 5 #include <set> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 virtual sql::Connection& GetDB() OVERRIDE { | 64 virtual sql::Connection& GetDB() OVERRIDE { |
| 65 return db_; | 65 return db_; |
| 66 } | 66 } |
| 67 | 67 |
| 68 base::ScopedTempDir temp_dir_; | 68 base::ScopedTempDir temp_dir_; |
| 69 sql::Connection db_; | 69 sql::Connection db_; |
| 70 }; | 70 }; |
| 71 | 71 |
| 72 TEST_F(VisitDatabaseTest, Add) { | 72 TEST_F(VisitDatabaseTest, Add) { |
| 73 // Add one visit. | 73 // Add one visit. |
| 74 VisitRow visit_info1(1, Time::Now(), 0, content::PAGE_TRANSITION_LINK, 0); | 74 VisitRow visit_info1(1, Time::Now(), 0, ui::PAGE_TRANSITION_LINK, 0); |
| 75 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 75 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
| 76 | 76 |
| 77 // Add second visit for the same page. | 77 // Add second visit for the same page. |
| 78 VisitRow visit_info2(visit_info1.url_id, | 78 VisitRow visit_info2(visit_info1.url_id, |
| 79 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, | 79 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, |
| 80 content::PAGE_TRANSITION_TYPED, 0); | 80 ui::PAGE_TRANSITION_TYPED, 0); |
| 81 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); | 81 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); |
| 82 | 82 |
| 83 // Add third visit for a different page. | 83 // Add third visit for a different page. |
| 84 VisitRow visit_info3(2, | 84 VisitRow visit_info3(2, |
| 85 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, | 85 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, |
| 86 content::PAGE_TRANSITION_LINK, 0); | 86 ui::PAGE_TRANSITION_LINK, 0); |
| 87 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); | 87 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); |
| 88 | 88 |
| 89 // Query the first two. | 89 // Query the first two. |
| 90 std::vector<VisitRow> matches; | 90 std::vector<VisitRow> matches; |
| 91 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); | 91 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); |
| 92 EXPECT_EQ(static_cast<size_t>(2), matches.size()); | 92 EXPECT_EQ(static_cast<size_t>(2), matches.size()); |
| 93 | 93 |
| 94 // Make sure we got both (order in result set is visit time). | 94 // Make sure we got both (order in result set is visit time). |
| 95 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && | 95 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && |
| 96 IsVisitInfoEqual(matches[1], visit_info2)); | 96 IsVisitInfoEqual(matches[1], visit_info2)); |
| 97 } | 97 } |
| 98 | 98 |
| 99 TEST_F(VisitDatabaseTest, Delete) { | 99 TEST_F(VisitDatabaseTest, Delete) { |
| 100 // Add three visits that form a chain of navigation, and then delete the | 100 // Add three visits that form a chain of navigation, and then delete the |
| 101 // middle one. We should be left with the outer two visits, and the chain | 101 // middle one. We should be left with the outer two visits, and the chain |
| 102 // should link them. | 102 // should link them. |
| 103 static const int kTime1 = 1000; | 103 static const int kTime1 = 1000; |
| 104 VisitRow visit_info1(1, Time::FromInternalValue(kTime1), 0, | 104 VisitRow visit_info1(1, Time::FromInternalValue(kTime1), 0, |
| 105 content::PAGE_TRANSITION_LINK, 0); | 105 ui::PAGE_TRANSITION_LINK, 0); |
| 106 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 106 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
| 107 | 107 |
| 108 static const int kTime2 = kTime1 + 1; | 108 static const int kTime2 = kTime1 + 1; |
| 109 VisitRow visit_info2(1, Time::FromInternalValue(kTime2), | 109 VisitRow visit_info2(1, Time::FromInternalValue(kTime2), |
| 110 visit_info1.visit_id, content::PAGE_TRANSITION_LINK, 0); | 110 visit_info1.visit_id, ui::PAGE_TRANSITION_LINK, 0); |
| 111 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); | 111 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); |
| 112 | 112 |
| 113 static const int kTime3 = kTime2 + 1; | 113 static const int kTime3 = kTime2 + 1; |
| 114 VisitRow visit_info3(1, Time::FromInternalValue(kTime3), | 114 VisitRow visit_info3(1, Time::FromInternalValue(kTime3), |
| 115 visit_info2.visit_id, content::PAGE_TRANSITION_LINK, 0); | 115 visit_info2.visit_id, ui::PAGE_TRANSITION_LINK, 0); |
| 116 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); | 116 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); |
| 117 | 117 |
| 118 // First make sure all the visits are there. | 118 // First make sure all the visits are there. |
| 119 std::vector<VisitRow> matches; | 119 std::vector<VisitRow> matches; |
| 120 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); | 120 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); |
| 121 EXPECT_EQ(static_cast<size_t>(3), matches.size()); | 121 EXPECT_EQ(static_cast<size_t>(3), matches.size()); |
| 122 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && | 122 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && |
| 123 IsVisitInfoEqual(matches[1], visit_info2) && | 123 IsVisitInfoEqual(matches[1], visit_info2) && |
| 124 IsVisitInfoEqual(matches[2], visit_info3)); | 124 IsVisitInfoEqual(matches[2], visit_info3)); |
| 125 | 125 |
| 126 // Delete the middle one. | 126 // Delete the middle one. |
| 127 DeleteVisit(visit_info2); | 127 DeleteVisit(visit_info2); |
| 128 | 128 |
| 129 // The outer two should be left, and the last one should have the first as | 129 // The outer two should be left, and the last one should have the first as |
| 130 // the referrer. | 130 // the referrer. |
| 131 visit_info3.referring_visit = visit_info1.visit_id; | 131 visit_info3.referring_visit = visit_info1.visit_id; |
| 132 matches.clear(); | 132 matches.clear(); |
| 133 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); | 133 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); |
| 134 EXPECT_EQ(static_cast<size_t>(2), matches.size()); | 134 EXPECT_EQ(static_cast<size_t>(2), matches.size()); |
| 135 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && | 135 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && |
| 136 IsVisitInfoEqual(matches[1], visit_info3)); | 136 IsVisitInfoEqual(matches[1], visit_info3)); |
| 137 } | 137 } |
| 138 | 138 |
| 139 TEST_F(VisitDatabaseTest, Update) { | 139 TEST_F(VisitDatabaseTest, Update) { |
| 140 // Make something in the database. | 140 // Make something in the database. |
| 141 VisitRow original(1, Time::Now(), 23, content::PageTransitionFromInt(0), 19); | 141 VisitRow original(1, Time::Now(), 23, ui::PageTransitionFromInt(0), 19); |
| 142 AddVisit(&original, SOURCE_BROWSED); | 142 AddVisit(&original, SOURCE_BROWSED); |
| 143 | 143 |
| 144 // Mutate that row. | 144 // Mutate that row. |
| 145 VisitRow modification(original); | 145 VisitRow modification(original); |
| 146 modification.url_id = 2; | 146 modification.url_id = 2; |
| 147 modification.transition = content::PAGE_TRANSITION_TYPED; | 147 modification.transition = ui::PAGE_TRANSITION_TYPED; |
| 148 modification.visit_time = Time::Now() + TimeDelta::FromDays(1); | 148 modification.visit_time = Time::Now() + TimeDelta::FromDays(1); |
| 149 modification.referring_visit = 9292; | 149 modification.referring_visit = 9292; |
| 150 UpdateVisitRow(modification); | 150 UpdateVisitRow(modification); |
| 151 | 151 |
| 152 // Check that the mutated version was written. | 152 // Check that the mutated version was written. |
| 153 VisitRow final; | 153 VisitRow final; |
| 154 GetRowForVisit(original.visit_id, &final); | 154 GetRowForVisit(original.visit_id, &final); |
| 155 EXPECT_TRUE(IsVisitInfoEqual(modification, final)); | 155 EXPECT_TRUE(IsVisitInfoEqual(modification, final)); |
| 156 } | 156 } |
| 157 | 157 |
| 158 // TODO(brettw) write test for GetMostRecentVisitForURL! | 158 // TODO(brettw) write test for GetMostRecentVisitForURL! |
| 159 | 159 |
| 160 namespace { | 160 namespace { |
| 161 | 161 |
| 162 std::vector<VisitRow> GetTestVisitRows() { | 162 std::vector<VisitRow> GetTestVisitRows() { |
| 163 // Tests can be sensitive to the local timezone, so use a local time as the | 163 // Tests can be sensitive to the local timezone, so use a local time as the |
| 164 // basis for all visit times. | 164 // basis for all visit times. |
| 165 base::Time base_time = Time::UnixEpoch().LocalMidnight(); | 165 base::Time base_time = Time::UnixEpoch().LocalMidnight(); |
| 166 | 166 |
| 167 // Add one visit. | 167 // Add one visit. |
| 168 VisitRow visit_info1(1, base_time + TimeDelta::FromMinutes(1), 0, | 168 VisitRow visit_info1(1, base_time + TimeDelta::FromMinutes(1), 0, |
| 169 static_cast<content::PageTransition>( | 169 ui::PageTransitionFromInt( |
| 170 content::PAGE_TRANSITION_LINK | | 170 ui::PAGE_TRANSITION_LINK | |
| 171 content::PAGE_TRANSITION_CHAIN_START | | 171 ui::PAGE_TRANSITION_CHAIN_START | |
| 172 content::PAGE_TRANSITION_CHAIN_END), | 172 ui::PAGE_TRANSITION_CHAIN_END), |
| 173 0); | 173 0); |
| 174 visit_info1.visit_id = 1; | 174 visit_info1.visit_id = 1; |
| 175 | 175 |
| 176 // Add second visit for the same page. | 176 // Add second visit for the same page. |
| 177 VisitRow visit_info2(visit_info1.url_id, | 177 VisitRow visit_info2(visit_info1.url_id, |
| 178 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, | 178 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, |
| 179 static_cast<content::PageTransition>( | 179 ui::PageTransitionFromInt( |
| 180 content::PAGE_TRANSITION_TYPED | | 180 ui::PAGE_TRANSITION_TYPED | |
| 181 content::PAGE_TRANSITION_CHAIN_START | | 181 ui::PAGE_TRANSITION_CHAIN_START | |
| 182 content::PAGE_TRANSITION_CHAIN_END), | 182 ui::PAGE_TRANSITION_CHAIN_END), |
| 183 0); | 183 0); |
| 184 visit_info2.visit_id = 2; | 184 visit_info2.visit_id = 2; |
| 185 | 185 |
| 186 // Add third visit for a different page. | 186 // Add third visit for a different page. |
| 187 VisitRow visit_info3(2, | 187 VisitRow visit_info3(2, |
| 188 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, | 188 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, |
| 189 static_cast<content::PageTransition>( | 189 ui::PageTransitionFromInt( |
| 190 content::PAGE_TRANSITION_LINK | | 190 ui::PAGE_TRANSITION_LINK | |
| 191 content::PAGE_TRANSITION_CHAIN_START), | 191 ui::PAGE_TRANSITION_CHAIN_START), |
| 192 0); | 192 0); |
| 193 visit_info3.visit_id = 3; | 193 visit_info3.visit_id = 3; |
| 194 | 194 |
| 195 // Add a redirect visit from the last page. | 195 // Add a redirect visit from the last page. |
| 196 VisitRow visit_info4(3, | 196 VisitRow visit_info4(3, |
| 197 visit_info1.visit_time + TimeDelta::FromSeconds(3), visit_info3.visit_id, | 197 visit_info1.visit_time + TimeDelta::FromSeconds(3), visit_info3.visit_id, |
| 198 static_cast<content::PageTransition>( | 198 ui::PageTransitionFromInt( |
| 199 content::PAGE_TRANSITION_SERVER_REDIRECT | | 199 ui::PAGE_TRANSITION_SERVER_REDIRECT | |
| 200 content::PAGE_TRANSITION_CHAIN_END), | 200 ui::PAGE_TRANSITION_CHAIN_END), |
| 201 0); | 201 0); |
| 202 visit_info4.visit_id = 4; | 202 visit_info4.visit_id = 4; |
| 203 | 203 |
| 204 // Add a subframe visit. | 204 // Add a subframe visit. |
| 205 VisitRow visit_info5(4, | 205 VisitRow visit_info5(4, |
| 206 visit_info1.visit_time + TimeDelta::FromSeconds(4), visit_info4.visit_id, | 206 visit_info1.visit_time + TimeDelta::FromSeconds(4), visit_info4.visit_id, |
| 207 static_cast<content::PageTransition>( | 207 ui::PageTransitionFromInt( |
| 208 content::PAGE_TRANSITION_AUTO_SUBFRAME | | 208 ui::PAGE_TRANSITION_AUTO_SUBFRAME | |
| 209 content::PAGE_TRANSITION_CHAIN_START | | 209 ui::PAGE_TRANSITION_CHAIN_START | |
| 210 content::PAGE_TRANSITION_CHAIN_END), | 210 ui::PAGE_TRANSITION_CHAIN_END), |
| 211 0); | 211 0); |
| 212 visit_info5.visit_id = 5; | 212 visit_info5.visit_id = 5; |
| 213 | 213 |
| 214 // Add third visit for the same URL as visit 1 and 2, but exactly a day | 214 // Add third visit for the same URL as visit 1 and 2, but exactly a day |
| 215 // later than visit 2. | 215 // later than visit 2. |
| 216 VisitRow visit_info6(visit_info1.url_id, | 216 VisitRow visit_info6(visit_info1.url_id, |
| 217 visit_info2.visit_time + TimeDelta::FromDays(1), 1, | 217 visit_info2.visit_time + TimeDelta::FromDays(1), 1, |
| 218 static_cast<content::PageTransition>( | 218 ui::PageTransitionFromInt( |
| 219 content::PAGE_TRANSITION_TYPED | | 219 ui::PAGE_TRANSITION_TYPED | |
| 220 content::PAGE_TRANSITION_CHAIN_START | | 220 ui::PAGE_TRANSITION_CHAIN_START | |
| 221 content::PAGE_TRANSITION_CHAIN_END), | 221 ui::PAGE_TRANSITION_CHAIN_END), |
| 222 0); | 222 0); |
| 223 visit_info6.visit_id = 6; | 223 visit_info6.visit_id = 6; |
| 224 | 224 |
| 225 std::vector<VisitRow> test_visit_rows; | 225 std::vector<VisitRow> test_visit_rows; |
| 226 test_visit_rows.push_back(visit_info1); | 226 test_visit_rows.push_back(visit_info1); |
| 227 test_visit_rows.push_back(visit_info2); | 227 test_visit_rows.push_back(visit_info2); |
| 228 test_visit_rows.push_back(visit_info3); | 228 test_visit_rows.push_back(visit_info3); |
| 229 test_visit_rows.push_back(visit_info4); | 229 test_visit_rows.push_back(visit_info4); |
| 230 test_visit_rows.push_back(visit_info5); | 230 test_visit_rows.push_back(visit_info5); |
| 231 test_visit_rows.push_back(visit_info6); | 231 test_visit_rows.push_back(visit_info6); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 options.begin_time = test_visit_rows[1].visit_time; | 348 options.begin_time = test_visit_rows[1].visit_time; |
| 349 options.end_time = test_visit_rows[3].visit_time; | 349 options.end_time = test_visit_rows[3].visit_time; |
| 350 options.max_count = 0; | 350 options.max_count = 0; |
| 351 GetVisibleVisitsInRange(options, &results); | 351 GetVisibleVisitsInRange(options, &results); |
| 352 ASSERT_EQ(static_cast<size_t>(1), results.size()); | 352 ASSERT_EQ(static_cast<size_t>(1), results.size()); |
| 353 EXPECT_TRUE(IsVisitInfoEqual(results[0], test_visit_rows[1])); | 353 EXPECT_TRUE(IsVisitInfoEqual(results[0], test_visit_rows[1])); |
| 354 } | 354 } |
| 355 | 355 |
| 356 TEST_F(VisitDatabaseTest, VisitSource) { | 356 TEST_F(VisitDatabaseTest, VisitSource) { |
| 357 // Add visits. | 357 // Add visits. |
| 358 VisitRow visit_info1(111, Time::Now(), 0, content::PAGE_TRANSITION_LINK, 0); | 358 VisitRow visit_info1(111, Time::Now(), 0, ui::PAGE_TRANSITION_LINK, 0); |
| 359 ASSERT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 359 ASSERT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
| 360 | 360 |
| 361 VisitRow visit_info2(112, Time::Now(), 1, content::PAGE_TRANSITION_TYPED, 0); | 361 VisitRow visit_info2(112, Time::Now(), 1, ui::PAGE_TRANSITION_TYPED, 0); |
| 362 ASSERT_TRUE(AddVisit(&visit_info2, SOURCE_SYNCED)); | 362 ASSERT_TRUE(AddVisit(&visit_info2, SOURCE_SYNCED)); |
| 363 | 363 |
| 364 VisitRow visit_info3(113, Time::Now(), 0, content::PAGE_TRANSITION_TYPED, 0); | 364 VisitRow visit_info3(113, Time::Now(), 0, ui::PAGE_TRANSITION_TYPED, 0); |
| 365 ASSERT_TRUE(AddVisit(&visit_info3, SOURCE_EXTENSION)); | 365 ASSERT_TRUE(AddVisit(&visit_info3, SOURCE_EXTENSION)); |
| 366 | 366 |
| 367 // Query each visit. | 367 // Query each visit. |
| 368 std::vector<VisitRow> matches; | 368 std::vector<VisitRow> matches; |
| 369 ASSERT_TRUE(GetVisitsForURL(111, &matches)); | 369 ASSERT_TRUE(GetVisitsForURL(111, &matches)); |
| 370 ASSERT_EQ(1U, matches.size()); | 370 ASSERT_EQ(1U, matches.size()); |
| 371 VisitSourceMap sources; | 371 VisitSourceMap sources; |
| 372 GetVisitsSource(matches, &sources); | 372 GetVisitsSource(matches, &sources); |
| 373 EXPECT_EQ(0U, sources.size()); | 373 EXPECT_EQ(0U, sources.size()); |
| 374 | 374 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 // Now try without de-duping, expect to see all visible visits to url id 1. | 413 // Now try without de-duping, expect to see all visible visits to url id 1. |
| 414 options.duplicate_policy = QueryOptions::KEEP_ALL_DUPLICATES; | 414 options.duplicate_policy = QueryOptions::KEEP_ALL_DUPLICATES; |
| 415 GetVisibleVisitsForURL(url_id, options, &results); | 415 GetVisibleVisitsForURL(url_id, options, &results); |
| 416 ASSERT_EQ(static_cast<size_t>(3), results.size()); | 416 ASSERT_EQ(static_cast<size_t>(3), results.size()); |
| 417 EXPECT_TRUE(IsVisitInfoEqual(results[0], test_visit_rows[5])); | 417 EXPECT_TRUE(IsVisitInfoEqual(results[0], test_visit_rows[5])); |
| 418 EXPECT_TRUE(IsVisitInfoEqual(results[1], test_visit_rows[1])); | 418 EXPECT_TRUE(IsVisitInfoEqual(results[1], test_visit_rows[1])); |
| 419 EXPECT_TRUE(IsVisitInfoEqual(results[2], test_visit_rows[0])); | 419 EXPECT_TRUE(IsVisitInfoEqual(results[2], test_visit_rows[0])); |
| 420 } | 420 } |
| 421 | 421 |
| 422 } // namespace history | 422 } // namespace history |
| OLD | NEW |