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 "components/history/core/browser/history_backend.h" | 5 #include "components/history/core/browser/history_backend.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 ui::PageTransition transition, | 350 ui::PageTransition transition, |
351 base::Time time) { | 351 base::Time time) { |
352 history::RedirectList redirects; | 352 history::RedirectList redirects; |
353 for (int i = 0; sequence[i] != NULL; ++i) | 353 for (int i = 0; sequence[i] != NULL; ++i) |
354 redirects.push_back(GURL(sequence[i])); | 354 redirects.push_back(GURL(sequence[i])); |
355 | 355 |
356 ContextID context_id = reinterpret_cast<ContextID>(1); | 356 ContextID context_id = reinterpret_cast<ContextID>(1); |
357 history::HistoryAddPageArgs request( | 357 history::HistoryAddPageArgs request( |
358 redirects.back(), time, context_id, nav_entry_id, GURL(), | 358 redirects.back(), time, context_id, nav_entry_id, GURL(), |
359 redirects, transition, history::SOURCE_BROWSED, | 359 redirects, transition, history::SOURCE_BROWSED, |
360 true); | 360 true, true); |
361 backend_->AddPage(request); | 361 backend_->AddPage(request); |
362 } | 362 } |
363 | 363 |
364 // Adds CLIENT_REDIRECT page transition. | 364 // Adds CLIENT_REDIRECT page transition. |
365 // |url1| is the source URL and |url2| is the destination. | 365 // |url1| is the source URL and |url2| is the destination. |
366 // |did_replace| is true if the transition is non-user initiated and the | 366 // |did_replace| is true if the transition is non-user initiated and the |
367 // navigation entry for |url2| has replaced that for |url1|. The possibly | 367 // navigation entry for |url2| has replaced that for |url1|. The possibly |
368 // updated transition code of the visit records for |url1| and |url2| is | 368 // updated transition code of the visit records for |url1| and |url2| is |
369 // returned by filling in |*transition1| and |*transition2|, respectively. | 369 // returned by filling in |*transition1| and |*transition2|, respectively. |
370 // |time| is a time of the redirect. | 370 // |time| is a time of the redirect. |
371 void AddClientRedirect(const GURL& url1, | 371 void AddClientRedirect(const GURL& url1, |
372 const GURL& url2, | 372 const GURL& url2, |
373 bool did_replace, | 373 bool did_replace, |
374 base::Time time, | 374 base::Time time, |
375 int* transition1, | 375 int* transition1, |
376 int* transition2) { | 376 int* transition2) { |
377 ContextID dummy_context_id = reinterpret_cast<ContextID>(0x87654321); | 377 ContextID dummy_context_id = reinterpret_cast<ContextID>(0x87654321); |
378 history::RedirectList redirects; | 378 history::RedirectList redirects; |
379 if (url1.is_valid()) | 379 if (url1.is_valid()) |
380 redirects.push_back(url1); | 380 redirects.push_back(url1); |
381 if (url2.is_valid()) | 381 if (url2.is_valid()) |
382 redirects.push_back(url2); | 382 redirects.push_back(url2); |
383 HistoryAddPageArgs request( | 383 HistoryAddPageArgs request( |
384 url2, time, dummy_context_id, 0, url1, | 384 url2, time, dummy_context_id, 0, url1, |
385 redirects, ui::PAGE_TRANSITION_CLIENT_REDIRECT, | 385 redirects, ui::PAGE_TRANSITION_CLIENT_REDIRECT, |
386 history::SOURCE_BROWSED, did_replace); | 386 history::SOURCE_BROWSED, did_replace, true); |
387 backend_->AddPage(request); | 387 backend_->AddPage(request); |
388 | 388 |
389 *transition1 = GetTransition(url1); | 389 *transition1 = GetTransition(url1); |
390 *transition2 = GetTransition(url2); | 390 *transition2 = GetTransition(url2); |
391 } | 391 } |
392 | 392 |
393 int GetTransition(const GURL& url) { | 393 int GetTransition(const GURL& url) { |
394 if (!url.is_valid()) | 394 if (!url.is_valid()) |
395 return 0; | 395 return 0; |
396 URLRow row; | 396 URLRow row; |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 // data for the visited page works. This can happen when clearing the history | 772 // data for the visited page works. This can happen when clearing the history |
773 // immediately after visiting a page. | 773 // immediately after visiting a page. |
774 TEST_F(HistoryBackendTest, DeleteAllThenAddData) { | 774 TEST_F(HistoryBackendTest, DeleteAllThenAddData) { |
775 ASSERT_TRUE(backend_.get()); | 775 ASSERT_TRUE(backend_.get()); |
776 | 776 |
777 base::Time visit_time = base::Time::Now(); | 777 base::Time visit_time = base::Time::Now(); |
778 GURL url("http://www.google.com/"); | 778 GURL url("http://www.google.com/"); |
779 HistoryAddPageArgs request(url, visit_time, NULL, 0, GURL(), | 779 HistoryAddPageArgs request(url, visit_time, NULL, 0, GURL(), |
780 history::RedirectList(), | 780 history::RedirectList(), |
781 ui::PAGE_TRANSITION_KEYWORD_GENERATED, | 781 ui::PAGE_TRANSITION_KEYWORD_GENERATED, |
782 history::SOURCE_BROWSED, false); | 782 history::SOURCE_BROWSED, false, true); |
783 backend_->AddPage(request); | 783 backend_->AddPage(request); |
784 | 784 |
785 // Check that a row was added. | 785 // Check that a row was added. |
786 URLRow outrow; | 786 URLRow outrow; |
787 EXPECT_TRUE(backend_->db_->GetRowForURL(url, &outrow)); | 787 EXPECT_TRUE(backend_->db_->GetRowForURL(url, &outrow)); |
788 | 788 |
789 // Check that the visit was added. | 789 // Check that the visit was added. |
790 VisitVector all_visits; | 790 VisitVector all_visits; |
791 backend_->db_->GetAllVisitsInRange(base::Time(), base::Time(), 0, | 791 backend_->db_->GetAllVisitsInRange(base::Time(), base::Time(), 0, |
792 &all_visits); | 792 &all_visits); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
914 // KEYWORD_GENERATED. | 914 // KEYWORD_GENERATED. |
915 TEST_F(HistoryBackendTest, KeywordGenerated) { | 915 TEST_F(HistoryBackendTest, KeywordGenerated) { |
916 ASSERT_TRUE(backend_.get()); | 916 ASSERT_TRUE(backend_.get()); |
917 | 917 |
918 GURL url("http://google.com"); | 918 GURL url("http://google.com"); |
919 | 919 |
920 base::Time visit_time = base::Time::Now() - base::TimeDelta::FromDays(1); | 920 base::Time visit_time = base::Time::Now() - base::TimeDelta::FromDays(1); |
921 HistoryAddPageArgs request(url, visit_time, NULL, 0, GURL(), | 921 HistoryAddPageArgs request(url, visit_time, NULL, 0, GURL(), |
922 history::RedirectList(), | 922 history::RedirectList(), |
923 ui::PAGE_TRANSITION_KEYWORD_GENERATED, | 923 ui::PAGE_TRANSITION_KEYWORD_GENERATED, |
924 history::SOURCE_BROWSED, false); | 924 history::SOURCE_BROWSED, false, true); |
925 backend_->AddPage(request); | 925 backend_->AddPage(request); |
926 | 926 |
927 // A row should have been added for the url. | 927 // A row should have been added for the url. |
928 URLRow row; | 928 URLRow row; |
929 URLID url_id = backend_->db()->GetRowForURL(url, &row); | 929 URLID url_id = backend_->db()->GetRowForURL(url, &row); |
930 ASSERT_NE(0, url_id); | 930 ASSERT_NE(0, url_id); |
931 | 931 |
932 // The typed count should be 1. | 932 // The typed count should be 1. |
933 ASSERT_EQ(1, row.typed_count()); | 933 ASSERT_EQ(1, row.typed_count()); |
934 | 934 |
(...skipping 11 matching lines...) Expand all Loading... |
946 QueryOptions query_options; | 946 QueryOptions query_options; |
947 query_options.max_count = 1; | 947 query_options.max_count = 1; |
948 backend_->db()->GetVisibleVisitsInRange(query_options, &visits); | 948 backend_->db()->GetVisibleVisitsInRange(query_options, &visits); |
949 EXPECT_TRUE(visits.empty()); | 949 EXPECT_TRUE(visits.empty()); |
950 | 950 |
951 // Going back to the same entry should not increment the typed count. | 951 // Going back to the same entry should not increment the typed count. |
952 ui::PageTransition back_transition = ui::PageTransitionFromInt( | 952 ui::PageTransition back_transition = ui::PageTransitionFromInt( |
953 ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FORWARD_BACK); | 953 ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FORWARD_BACK); |
954 HistoryAddPageArgs back_request(url, visit_time, NULL, 0, GURL(), | 954 HistoryAddPageArgs back_request(url, visit_time, NULL, 0, GURL(), |
955 history::RedirectList(), back_transition, | 955 history::RedirectList(), back_transition, |
956 history::SOURCE_BROWSED, false); | 956 history::SOURCE_BROWSED, false, true); |
957 backend_->AddPage(back_request); | 957 backend_->AddPage(back_request); |
958 url_id = backend_->db()->GetRowForURL(url, &row); | 958 url_id = backend_->db()->GetRowForURL(url, &row); |
959 ASSERT_NE(0, url_id); | 959 ASSERT_NE(0, url_id); |
960 ASSERT_EQ(1, row.typed_count()); | 960 ASSERT_EQ(1, row.typed_count()); |
961 | 961 |
962 // Expire the visits. | 962 // Expire the visits. |
963 std::set<GURL> restrict_urls; | 963 std::set<GURL> restrict_urls; |
964 backend_->expire_backend()->ExpireHistoryBetween(restrict_urls, visit_time, | 964 backend_->expire_backend()->ExpireHistoryBetween(restrict_urls, visit_time, |
965 base::Time::Now()); | 965 base::Time::Now()); |
966 | 966 |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1475 | 1475 |
1476 TEST_F(HistoryBackendTest, AddPageArgsSource) { | 1476 TEST_F(HistoryBackendTest, AddPageArgsSource) { |
1477 ASSERT_TRUE(backend_.get()); | 1477 ASSERT_TRUE(backend_.get()); |
1478 | 1478 |
1479 GURL url("http://testpageargs.com"); | 1479 GURL url("http://testpageargs.com"); |
1480 | 1480 |
1481 // Assume this page is browsed by user. | 1481 // Assume this page is browsed by user. |
1482 HistoryAddPageArgs request1(url, base::Time::Now(), NULL, 0, GURL(), | 1482 HistoryAddPageArgs request1(url, base::Time::Now(), NULL, 0, GURL(), |
1483 history::RedirectList(), | 1483 history::RedirectList(), |
1484 ui::PAGE_TRANSITION_KEYWORD_GENERATED, | 1484 ui::PAGE_TRANSITION_KEYWORD_GENERATED, |
1485 history::SOURCE_BROWSED, false); | 1485 history::SOURCE_BROWSED, false, true); |
1486 backend_->AddPage(request1); | 1486 backend_->AddPage(request1); |
1487 // Assume this page is synced. | 1487 // Assume this page is synced. |
1488 HistoryAddPageArgs request2(url, base::Time::Now(), NULL, 0, GURL(), | 1488 HistoryAddPageArgs request2(url, base::Time::Now(), NULL, 0, GURL(), |
1489 history::RedirectList(), | 1489 history::RedirectList(), |
1490 ui::PAGE_TRANSITION_LINK, | 1490 ui::PAGE_TRANSITION_LINK, |
1491 history::SOURCE_SYNCED, false); | 1491 history::SOURCE_SYNCED, false, true); |
1492 backend_->AddPage(request2); | 1492 backend_->AddPage(request2); |
1493 // Assume this page is browsed again. | 1493 // Assume this page is browsed again. |
1494 HistoryAddPageArgs request3(url, base::Time::Now(), NULL, 0, GURL(), | 1494 HistoryAddPageArgs request3(url, base::Time::Now(), NULL, 0, GURL(), |
1495 history::RedirectList(), | 1495 history::RedirectList(), |
1496 ui::PAGE_TRANSITION_TYPED, | 1496 ui::PAGE_TRANSITION_TYPED, |
1497 history::SOURCE_BROWSED, false); | 1497 history::SOURCE_BROWSED, false, true); |
1498 backend_->AddPage(request3); | 1498 backend_->AddPage(request3); |
1499 | 1499 |
1500 // Three visits should be added with proper sources. | 1500 // Three visits should be added with proper sources. |
1501 VisitVector visits; | 1501 VisitVector visits; |
1502 URLRow row; | 1502 URLRow row; |
1503 URLID id = backend_->db()->GetRowForURL(url, &row); | 1503 URLID id = backend_->db()->GetRowForURL(url, &row); |
1504 ASSERT_TRUE(backend_->db()->GetVisitsForURL(id, &visits)); | 1504 ASSERT_TRUE(backend_->db()->GetVisitsForURL(id, &visits)); |
1505 ASSERT_EQ(3U, visits.size()); | 1505 ASSERT_EQ(3U, visits.size()); |
1506 VisitSourceMap visit_sources; | 1506 VisitSourceMap visit_sources; |
1507 ASSERT_TRUE(backend_->GetVisitsSource(visits, &visit_sources)); | 1507 ASSERT_TRUE(backend_->GetVisitsSource(visits, &visit_sources)); |
(...skipping 2291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3799 | 3799 |
3800 // Verify that the second term is no longer returned as result, and also check | 3800 // Verify that the second term is no longer returned as result, and also check |
3801 // at the low level that it is gone for good. The term corresponding to the | 3801 // at the low level that it is gone for good. The term corresponding to the |
3802 // first URLRow should not be affected. | 3802 // first URLRow should not be affected. |
3803 EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1)); | 3803 EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1)); |
3804 EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2)); | 3804 EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2)); |
3805 EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL)); | 3805 EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL)); |
3806 EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL)); | 3806 EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL)); |
3807 } | 3807 } |
3808 | 3808 |
| 3809 TEST_F(HistoryBackendTest, QueryMostVisitedURLs) { |
| 3810 ASSERT_TRUE(backend_.get()); |
| 3811 |
| 3812 // Pairs from page transitions to consider_for_ntp_most_visited. |
| 3813 std::vector<std::pair<ui::PageTransition, bool>> pages; |
| 3814 pages.emplace_back(ui::PAGE_TRANSITION_AUTO_BOOKMARK, true); // good. |
| 3815 pages.emplace_back(ui::PAGE_TRANSITION_AUTO_BOOKMARK, false); // bad. |
| 3816 pages.emplace_back(ui::PAGE_TRANSITION_LINK, true); // bad. |
| 3817 pages.emplace_back(ui::PAGE_TRANSITION_TYPED, false); // bad. |
| 3818 pages.emplace_back(ui::PAGE_TRANSITION_TYPED, true); // good. |
| 3819 |
| 3820 for (size_t i = 0; i < pages.size(); ++i) { |
| 3821 HistoryAddPageArgs args; |
| 3822 args.url = GURL("http://example" + base::SizeTToString(i + 1) + ".com"); |
| 3823 args.time = base::Time::Now() - base::TimeDelta::FromDays(i + 1); |
| 3824 args.transition = pages[i].first; |
| 3825 args.consider_for_ntp_most_visited = pages[i].second; |
| 3826 backend_->AddPage(args); |
| 3827 } |
| 3828 |
| 3829 MostVisitedURLList most_visited; |
| 3830 backend_->QueryMostVisitedURLs(100, 100, &most_visited); |
| 3831 |
| 3832 const base::string16 kSomeTitle; // Ignored by equality operator. |
| 3833 EXPECT_THAT( |
| 3834 most_visited, |
| 3835 ElementsAre(MostVisitedURL(GURL("http://example1.com"), kSomeTitle), |
| 3836 MostVisitedURL(GURL("http://example5.com"), kSomeTitle))); |
| 3837 } |
| 3838 |
3809 } // namespace history | 3839 } // namespace history |
OLD | NEW |