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

Side by Side Diff: chrome/browser/history/history_backend_unittest.cc

Issue 285233012: Abstract history dependencies on bookmarks through HistoryClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 6 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
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/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
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/file_util.h" 14 #include "base/file_util.h"
15 #include "base/files/file_path.h" 15 #include "base/files/file_path.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
18 #include "base/path_service.h" 18 #include "base/path_service.h"
19 #include "base/run_loop.h" 19 #include "base/run_loop.h"
20 #include "base/strings/string16.h" 20 #include "base/strings/string16.h"
21 #include "base/strings/string_number_conversions.h" 21 #include "base/strings/string_number_conversions.h"
22 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
23 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
24 #include "chrome/browser/chrome_notification_types.h" 23 #include "chrome/browser/chrome_notification_types.h"
25 #include "chrome/browser/history/history_notifications.h" 24 #include "chrome/browser/history/history_notifications.h"
26 #include "chrome/browser/history/history_service.h" 25 #include "chrome/browser/history/history_service.h"
27 #include "chrome/browser/history/history_service_factory.h" 26 #include "chrome/browser/history/history_service_factory.h"
28 #include "chrome/browser/history/in_memory_database.h" 27 #include "chrome/browser/history/in_memory_database.h"
29 #include "chrome/browser/history/in_memory_history_backend.h" 28 #include "chrome/browser/history/in_memory_history_backend.h"
30 #include "chrome/browser/history/visit_filter.h" 29 #include "chrome/browser/history/visit_filter.h"
31 #include "chrome/common/chrome_constants.h" 30 #include "chrome/common/chrome_constants.h"
32 #include "chrome/common/chrome_paths.h" 31 #include "chrome/common/chrome_paths.h"
33 #include "chrome/common/importer/imported_favicon_usage.h" 32 #include "chrome/common/importer/imported_favicon_usage.h"
34 #include "chrome/test/base/testing_profile.h" 33 #include "chrome/test/base/testing_profile.h"
35 #include "components/bookmarks/browser/bookmark_model.h" 34 #include "components/history/core/test/history_client_fake_bookmarks.h"
36 #include "components/bookmarks/browser/bookmark_utils.h"
37 #include "components/bookmarks/test/bookmark_test_helpers.h"
38 #include "components/bookmarks/test/test_bookmark_client.h"
39 #include "content/public/browser/notification_details.h" 35 #include "content/public/browser/notification_details.h"
40 #include "content/public/browser/notification_source.h" 36 #include "content/public/browser/notification_source.h"
41 #include "content/public/test/test_browser_thread.h" 37 #include "content/public/test/test_browser_thread.h"
38 #include "testing/gmock/include/gmock/gmock.h"
42 #include "testing/gtest/include/gtest/gtest.h" 39 #include "testing/gtest/include/gtest/gtest.h"
43 #include "url/gurl.h" 40 #include "url/gurl.h"
44 41
45 using base::Time; 42 using base::Time;
46 43
47 // This file only tests functionality where it is most convenient to call the 44 // This file only tests functionality where it is most convenient to call the
48 // backend directly. Most of the history backend functions are tested by the 45 // backend directly. Most of the history backend functions are tested by the
49 // history unit test. Because of the elaborate callbacks involved, this is no 46 // history unit test. Because of the elaborate callbacks involved, this is no
50 // harder than calling it directly for many things. 47 // harder than calling it directly for many things.
51 48
52 namespace { 49 namespace {
53 50
54 static const gfx::Size kTinySize = gfx::Size(10, 10); 51 static const gfx::Size kTinySize = gfx::Size(10, 10);
55 static const gfx::Size kSmallSize = gfx::Size(16, 16); 52 static const gfx::Size kSmallSize = gfx::Size(16, 16);
56 static const gfx::Size kLargeSize = gfx::Size(32, 32); 53 static const gfx::Size kLargeSize = gfx::Size(32, 32);
57 54
58 // Comparison functions as to make it easier to check results of 55 // Comparison functions as to make it easier to check results of
59 // GetFaviconBitmaps() and GetIconMappingsForPageURL(). 56 // GetFaviconBitmaps() and GetIconMappingsForPageURL().
60 bool IconMappingLessThan(const history::IconMapping& a, 57 bool IconMappingLessThan(const history::IconMapping& a,
61 const history::IconMapping& b) { 58 const history::IconMapping& b) {
62 return a.icon_url < b.icon_url; 59 return a.icon_url < b.icon_url;
63 } 60 }
64 61
65 bool FaviconBitmapLessThan(const history::FaviconBitmap& a, 62 bool FaviconBitmapLessThan(const history::FaviconBitmap& a,
66 const history::FaviconBitmap& b) { 63 const history::FaviconBitmap& b) {
67 return a.pixel_size.GetArea() < b.pixel_size.GetArea(); 64 return a.pixel_size.GetArea() < b.pixel_size.GetArea();
68 } 65 }
69 66
67 class HistoryClientMock : public history::HistoryClientFakeBookmarks {
68 public:
69 MOCK_METHOD0(BlockUntilBookmarksLoaded, void());
70 };
71
70 } // namespace 72 } // namespace
71 73
72 namespace history { 74 namespace history {
73 75
74 class HistoryBackendTestBase; 76 class HistoryBackendTestBase;
75 77
76 // This must be a separate object since HistoryBackend manages its lifetime. 78 // This must be a separate object since HistoryBackend manages its lifetime.
77 // This just forwards the messages we're interested in to the test object. 79 // This just forwards the messages we're interested in to the test object.
78 class HistoryBackendTestDelegate : public HistoryBackend::Delegate { 80 class HistoryBackendTestDelegate : public HistoryBackend::Delegate {
79 public: 81 public:
(...skipping 29 matching lines...) Expand all
109 AddRequest(request, this); 111 AddRequest(request, this);
110 return request->handle(); 112 return request->handle();
111 } 113 }
112 }; 114 };
113 115
114 class HistoryBackendTestBase : public testing::Test { 116 class HistoryBackendTestBase : public testing::Test {
115 public: 117 public:
116 typedef std::vector<std::pair<int, HistoryDetails*> > NotificationList; 118 typedef std::vector<std::pair<int, HistoryDetails*> > NotificationList;
117 119
118 HistoryBackendTestBase() 120 HistoryBackendTestBase()
119 : bookmark_model_(bookmark_client_.CreateModel(false)), 121 : loaded_(false),
120 loaded_(false),
121 ui_thread_(content::BrowserThread::UI, &message_loop_) {} 122 ui_thread_(content::BrowserThread::UI, &message_loop_) {}
122 123
123 virtual ~HistoryBackendTestBase() { 124 virtual ~HistoryBackendTestBase() {
124 STLDeleteValues(&broadcasted_notifications_); 125 STLDeleteValues(&broadcasted_notifications_);
125 } 126 }
126 127
127 protected: 128 protected:
128 int num_broadcasted_notifications() const { 129 int num_broadcasted_notifications() const {
129 return broadcasted_notifications_.size(); 130 return broadcasted_notifications_.size();
130 } 131 }
(...skipping 14 matching lines...) Expand all
145 // Send the notifications directly to the in-memory database. 146 // Send the notifications directly to the in-memory database.
146 content::Details<HistoryDetails> det(details.get()); 147 content::Details<HistoryDetails> det(details.get());
147 mem_backend_->Observe( 148 mem_backend_->Observe(
148 type, content::Source<HistoryBackendTestBase>(NULL), det); 149 type, content::Source<HistoryBackendTestBase>(NULL), det);
149 150
150 // The backend passes ownership of the details pointer to us. 151 // The backend passes ownership of the details pointer to us.
151 broadcasted_notifications_.push_back( 152 broadcasted_notifications_.push_back(
152 std::make_pair(type, details.release())); 153 std::make_pair(type, details.release()));
153 } 154 }
154 155
155 test::TestBookmarkClient bookmark_client_; 156 history::HistoryClientFakeBookmarks history_client_;
156 scoped_refptr<HistoryBackend> backend_; // Will be NULL on init failure. 157 scoped_refptr<HistoryBackend> backend_; // Will be NULL on init failure.
157 scoped_ptr<InMemoryHistoryBackend> mem_backend_; 158 scoped_ptr<InMemoryHistoryBackend> mem_backend_;
158 scoped_ptr<BookmarkModel> bookmark_model_;
159 bool loaded_; 159 bool loaded_;
160 160
161 private: 161 private:
162 friend class HistoryBackendTestDelegate; 162 friend class HistoryBackendTestDelegate;
163 163
164 // testing::Test 164 // testing::Test
165 virtual void SetUp() { 165 virtual void SetUp() {
166 if (!base::CreateNewTempDirectory(FILE_PATH_LITERAL("BackendTest"), 166 if (!base::CreateNewTempDirectory(FILE_PATH_LITERAL("BackendTest"),
167 &test_dir_)) 167 &test_dir_))
168 return; 168 return;
169 backend_ = new HistoryBackend( 169 backend_ = new HistoryBackend(
170 test_dir_, new HistoryBackendTestDelegate(this), bookmark_model_.get()); 170 test_dir_, new HistoryBackendTestDelegate(this), &history_client_);
171 backend_->Init(std::string(), false); 171 backend_->Init(std::string(), false);
172 } 172 }
173 173
174 virtual void TearDown() { 174 virtual void TearDown() {
175 if (backend_.get()) 175 if (backend_.get())
176 backend_->Closing(); 176 backend_->Closing();
177 backend_ = NULL; 177 backend_ = NULL;
178 mem_backend_.reset(); 178 mem_backend_.reset();
179 base::DeleteFile(test_dir_, true); 179 base::DeleteFile(test_dir_, true);
180 base::RunLoop().RunUntilIdle(); 180 base::RunLoop().RunUntilIdle();
181 history_client_.ClearAllBookmarks();
181 } 182 }
182 183
183 void SetInMemoryBackend(scoped_ptr<InMemoryHistoryBackend> backend) { 184 void SetInMemoryBackend(scoped_ptr<InMemoryHistoryBackend> backend) {
184 mem_backend_.swap(backend); 185 mem_backend_.swap(backend);
185 } 186 }
186 187
187 // The types and details of notifications which were broadcasted. 188 // The types and details of notifications which were broadcasted.
188 NotificationList broadcasted_notifications_; 189 NotificationList broadcasted_notifications_;
189 190
190 base::MessageLoop message_loop_; 191 base::MessageLoop message_loop_;
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 backend_->db_->GetVisitsForURL(row2_id, &visits); 605 backend_->db_->GetVisitsForURL(row2_id, &visits);
605 ASSERT_EQ(1U, visits.size()); 606 ASSERT_EQ(1U, visits.size());
606 607
607 // The in-memory backend should have been set and it should have gotten the 608 // The in-memory backend should have been set and it should have gotten the
608 // typed URL. 609 // typed URL.
609 ASSERT_TRUE(mem_backend_.get()); 610 ASSERT_TRUE(mem_backend_.get());
610 URLRow outrow1; 611 URLRow outrow1;
611 EXPECT_TRUE(mem_backend_->db_->GetRowForURL(row1.url(), NULL)); 612 EXPECT_TRUE(mem_backend_->db_->GetRowForURL(row1.url(), NULL));
612 613
613 // Star row1. 614 // Star row1.
614 bookmark_model_->AddURL( 615 history_client_.AddBookmark(row1.url());
615 bookmark_model_->bookmark_bar_node(), 0, base::string16(), row1.url());
616 616
617 // Now finally clear all history. 617 // Now finally clear all history.
618 ClearBroadcastedNotifications(); 618 ClearBroadcastedNotifications();
619 backend_->DeleteAllHistory(); 619 backend_->DeleteAllHistory();
620 620
621 // The first URL should be preserved but the time should be cleared. 621 // The first URL should be preserved but the time should be cleared.
622 EXPECT_TRUE(backend_->db_->GetRowForURL(row1.url(), &outrow1)); 622 EXPECT_TRUE(backend_->db_->GetRowForURL(row1.url(), &outrow1));
623 EXPECT_EQ(row1.url(), outrow1.url()); 623 EXPECT_EQ(row1.url(), outrow1.url());
624 EXPECT_EQ(0, outrow1.visit_count()); 624 EXPECT_EQ(0, outrow1.visit_count());
625 EXPECT_EQ(0, outrow1.typed_count()); 625 EXPECT_EQ(0, outrow1.typed_count());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 669
670 // The remaining URL should still reference the same favicon, even if its 670 // The remaining URL should still reference the same favicon, even if its
671 // ID has changed. 671 // ID has changed.
672 std::vector<IconMapping> mappings; 672 std::vector<IconMapping> mappings;
673 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL( 673 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(
674 outrow1.url(), favicon_base::FAVICON, &mappings)); 674 outrow1.url(), favicon_base::FAVICON, &mappings));
675 EXPECT_EQ(1u, mappings.size()); 675 EXPECT_EQ(1u, mappings.size());
676 EXPECT_EQ(out_favicon1, mappings[0].icon_id); 676 EXPECT_EQ(out_favicon1, mappings[0].icon_id);
677 677
678 // The first URL should still be bookmarked. 678 // The first URL should still be bookmarked.
679 EXPECT_TRUE(bookmark_model_->IsBookmarked(row1.url())); 679 EXPECT_TRUE(history_client_.IsBookmarked(row1.url()));
680 680
681 // Check that we fire the notification about all history having been deleted. 681 // Check that we fire the notification about all history having been deleted.
682 ASSERT_EQ(1u, broadcasted_notifications().size()); 682 ASSERT_EQ(1u, broadcasted_notifications().size());
683 ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_DELETED, 683 ASSERT_EQ(chrome::NOTIFICATION_HISTORY_URLS_DELETED,
684 broadcasted_notifications()[0].first); 684 broadcasted_notifications()[0].first);
685 const URLsDeletedDetails* details = static_cast<const URLsDeletedDetails*>( 685 const URLsDeletedDetails* details = static_cast<const URLsDeletedDetails*>(
686 broadcasted_notifications()[0].second); 686 broadcasted_notifications()[0].second);
687 EXPECT_TRUE(details->all_history); 687 EXPECT_TRUE(details->all_history);
688 EXPECT_FALSE(details->archived); 688 EXPECT_FALSE(details->archived);
689 } 689 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 767
768 URLRows rows; 768 URLRows rows;
769 rows.push_back(row2); // Reversed order for the same reason as favicons. 769 rows.push_back(row2); // Reversed order for the same reason as favicons.
770 rows.push_back(row1); 770 rows.push_back(row1);
771 backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED); 771 backend_->AddPagesWithDetails(rows, history::SOURCE_BROWSED);
772 772
773 URLID row1_id = backend_->db_->GetRowForURL(row1.url(), NULL); 773 URLID row1_id = backend_->db_->GetRowForURL(row1.url(), NULL);
774 URLID row2_id = backend_->db_->GetRowForURL(row2.url(), NULL); 774 URLID row2_id = backend_->db_->GetRowForURL(row2.url(), NULL);
775 775
776 // Star the two URLs. 776 // Star the two URLs.
777 bookmark_utils::AddIfNotBookmarked( 777 history_client_.AddBookmark(row1.url());
778 bookmark_model_.get(), row1.url(), base::string16()); 778 history_client_.AddBookmark(row2.url());
779 bookmark_utils::AddIfNotBookmarked(
780 bookmark_model_.get(), row2.url(), base::string16());
781 779
782 // Delete url 2. Because url 2 is starred this won't delete the URL, only 780 // Delete url 2. Because url 2 is starred this won't delete the URL, only
783 // the visits. 781 // the visits.
784 backend_->expirer_.DeleteURL(row2.url()); 782 backend_->expirer_.DeleteURL(row2.url());
785 783
786 // Make sure url 2 is still valid, but has no visits. 784 // Make sure url 2 is still valid, but has no visits.
787 URLRow tmp_url_row; 785 URLRow tmp_url_row;
788 EXPECT_EQ(row2_id, backend_->db_->GetRowForURL(row2.url(), NULL)); 786 EXPECT_EQ(row2_id, backend_->db_->GetRowForURL(row2.url(), NULL));
789 VisitVector visits; 787 VisitVector visits;
790 backend_->db_->GetVisitsForURL(row2_id, &visits); 788 backend_->db_->GetVisitsForURL(row2_id, &visits);
791 EXPECT_EQ(0U, visits.size()); 789 EXPECT_EQ(0U, visits.size());
792 // The favicon should still be valid. 790 // The favicon should still be valid.
793 EXPECT_EQ(favicon2, 791 EXPECT_EQ(favicon2,
794 backend_->thumbnail_db_->GetFaviconIDForFaviconURL( 792 backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
795 favicon_url2, favicon_base::FAVICON, NULL)); 793 favicon_url2, favicon_base::FAVICON, NULL));
796 794
797 // Unstar row2. 795 // Unstar row2.
798 bookmark_utils::RemoveAllBookmarks(bookmark_model_.get(), row2.url()); 796 history_client_.DelBookmark(row2.url());
799 797
800 // Tell the backend it was unstarred. We have to explicitly do this as 798 // Tell the backend it was unstarred. We have to explicitly do this as
801 // BookmarkModel isn't wired up to the backend during testing. 799 // BookmarkModel isn't wired up to the backend during testing.
802 std::set<GURL> unstarred_urls; 800 std::set<GURL> unstarred_urls;
803 unstarred_urls.insert(row2.url()); 801 unstarred_urls.insert(row2.url());
804 backend_->URLsNoLongerBookmarked(unstarred_urls); 802 backend_->URLsNoLongerBookmarked(unstarred_urls);
805 803
806 // The URL should no longer exist. 804 // The URL should no longer exist.
807 EXPECT_FALSE(backend_->db_->GetRowForURL(row2.url(), &tmp_url_row)); 805 EXPECT_FALSE(backend_->db_->GetRowForURL(row2.url(), &tmp_url_row));
808 // And the favicon should be deleted. 806 // And the favicon should be deleted.
809 EXPECT_EQ(0, 807 EXPECT_EQ(0,
810 backend_->thumbnail_db_->GetFaviconIDForFaviconURL( 808 backend_->thumbnail_db_->GetFaviconIDForFaviconURL(
811 favicon_url2, favicon_base::FAVICON, NULL)); 809 favicon_url2, favicon_base::FAVICON, NULL));
812 810
813 // Unstar row 1. 811 // Unstar row 1.
814 bookmark_utils::RemoveAllBookmarks(bookmark_model_.get(), row1.url()); 812 history_client_.DelBookmark(row1.url());
813
815 // Tell the backend it was unstarred. We have to explicitly do this as 814 // Tell the backend it was unstarred. We have to explicitly do this as
816 // BookmarkModel isn't wired up to the backend during testing. 815 // BookmarkModel isn't wired up to the backend during testing.
817 unstarred_urls.clear(); 816 unstarred_urls.clear();
818 unstarred_urls.insert(row1.url()); 817 unstarred_urls.insert(row1.url());
819 backend_->URLsNoLongerBookmarked(unstarred_urls); 818 backend_->URLsNoLongerBookmarked(unstarred_urls);
820 819
821 // The URL should still exist (because there were visits). 820 // The URL should still exist (because there were visits).
822 EXPECT_EQ(row1_id, backend_->db_->GetRowForURL(row1.url(), NULL)); 821 EXPECT_EQ(row1_id, backend_->db_->GetRowForURL(row1.url(), NULL));
823 822
824 // There should still be visits. 823 // There should still be visits.
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 favicons.clear(); 1075 favicons.clear();
1077 favicon.favicon_url = GURL("http://mail.google.com/favicon.ico"); 1076 favicon.favicon_url = GURL("http://mail.google.com/favicon.ico");
1078 favicon.png_data.push_back('3'); 1077 favicon.png_data.push_back('3');
1079 favicon.urls.insert(url3); 1078 favicon.urls.insert(url3);
1080 favicons.push_back(favicon); 1079 favicons.push_back(favicon);
1081 backend_->SetImportedFavicons(favicons); 1080 backend_->SetImportedFavicons(favicons);
1082 URLRow url_row3; 1081 URLRow url_row3;
1083 EXPECT_TRUE(backend_->db_->GetRowForURL(url3, &url_row3) == 0); 1082 EXPECT_TRUE(backend_->db_->GetRowForURL(url3, &url_row3) == 0);
1084 1083
1085 // If the URL is bookmarked, it should get added to history with 0 visits. 1084 // If the URL is bookmarked, it should get added to history with 0 visits.
1086 bookmark_model_->AddURL( 1085 history_client_.AddBookmark(url3);
1087 bookmark_model_->bookmark_bar_node(), 0, base::string16(), url3);
1088 backend_->SetImportedFavicons(favicons); 1086 backend_->SetImportedFavicons(favicons);
1089 EXPECT_FALSE(backend_->db_->GetRowForURL(url3, &url_row3) == 0); 1087 EXPECT_FALSE(backend_->db_->GetRowForURL(url3, &url_row3) == 0);
1090 EXPECT_TRUE(url_row3.visit_count() == 0); 1088 EXPECT_TRUE(url_row3.visit_count() == 0);
1091 } 1089 }
1092 1090
1093 TEST_F(HistoryBackendTest, StripUsernamePasswordTest) { 1091 TEST_F(HistoryBackendTest, StripUsernamePasswordTest) {
1094 ASSERT_TRUE(backend_.get()); 1092 ASSERT_TRUE(backend_.get());
1095 1093
1096 GURL url("http://anyuser:anypass@www.google.com"); 1094 GURL url("http://anyuser:anypass@www.google.com");
1097 GURL stripped_url("http://www.google.com"); 1095 GURL stripped_url("http://www.google.com");
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 1475
1478 // Copy history database file to current directory so that it will be deleted 1476 // Copy history database file to current directory so that it will be deleted
1479 // in Teardown. 1477 // in Teardown.
1480 base::FilePath new_history_path(test_dir()); 1478 base::FilePath new_history_path(test_dir());
1481 base::DeleteFile(new_history_path, true); 1479 base::DeleteFile(new_history_path, true);
1482 base::CreateDirectory(new_history_path); 1480 base::CreateDirectory(new_history_path);
1483 base::FilePath new_history_file = 1481 base::FilePath new_history_file =
1484 new_history_path.Append(chrome::kHistoryFilename); 1482 new_history_path.Append(chrome::kHistoryFilename);
1485 ASSERT_TRUE(base::CopyFile(old_history_path, new_history_file)); 1483 ASSERT_TRUE(base::CopyFile(old_history_path, new_history_file));
1486 1484
1487 backend_ = new HistoryBackend(new_history_path, 1485 backend_ = new HistoryBackend(
1488 new HistoryBackendTestDelegate(this), 1486 new_history_path, new HistoryBackendTestDelegate(this), &history_client_);
1489 bookmark_model_.get());
1490 backend_->Init(std::string(), false); 1487 backend_->Init(std::string(), false);
1491 backend_->Closing(); 1488 backend_->Closing();
1492 backend_ = NULL; 1489 backend_ = NULL;
1493 1490
1494 // Now the database should already be migrated. 1491 // Now the database should already be migrated.
1495 // Check version first. 1492 // Check version first.
1496 int cur_version = HistoryDatabase::GetCurrentVersion(); 1493 int cur_version = HistoryDatabase::GetCurrentVersion();
1497 sql::Connection db; 1494 sql::Connection db;
1498 ASSERT_TRUE(db.Open(new_history_file)); 1495 ASSERT_TRUE(db.Open(new_history_file));
1499 sql::Statement s(db.GetUniqueStatement( 1496 sql::Statement s(db.GetUniqueStatement(
(...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after
2880 base::FilePath new_history_path(test_dir()); 2877 base::FilePath new_history_path(test_dir());
2881 base::DeleteFile(new_history_path, true); 2878 base::DeleteFile(new_history_path, true);
2882 base::CreateDirectory(new_history_path); 2879 base::CreateDirectory(new_history_path);
2883 base::FilePath new_history_file = 2880 base::FilePath new_history_file =
2884 new_history_path.Append(chrome::kHistoryFilename); 2881 new_history_path.Append(chrome::kHistoryFilename);
2885 base::FilePath new_archived_file = 2882 base::FilePath new_archived_file =
2886 new_history_path.Append(chrome::kArchivedHistoryFilename); 2883 new_history_path.Append(chrome::kArchivedHistoryFilename);
2887 ASSERT_TRUE(base::CopyFile(old_history, new_history_file)); 2884 ASSERT_TRUE(base::CopyFile(old_history, new_history_file));
2888 ASSERT_TRUE(base::CopyFile(old_archived, new_archived_file)); 2885 ASSERT_TRUE(base::CopyFile(old_archived, new_archived_file));
2889 2886
2890 backend_ = new HistoryBackend(new_history_path, 2887 backend_ = new HistoryBackend(
2891 new HistoryBackendTestDelegate(this), 2888 new_history_path, new HistoryBackendTestDelegate(this), &history_client_);
2892 bookmark_model_.get());
2893 backend_->Init(std::string(), false); 2889 backend_->Init(std::string(), false);
2894 backend_->Closing(); 2890 backend_->Closing();
2895 backend_ = NULL; 2891 backend_ = NULL;
2896 2892
2897 // Now both history and archived_history databases should already be migrated. 2893 // Now both history and archived_history databases should already be migrated.
2898 2894
2899 // Check version in history database first. 2895 // Check version in history database first.
2900 int cur_version = HistoryDatabase::GetCurrentVersion(); 2896 int cur_version = HistoryDatabase::GetCurrentVersion();
2901 sql::Connection db; 2897 sql::Connection db;
2902 ASSERT_TRUE(db.Open(new_history_file)); 2898 ASSERT_TRUE(db.Open(new_history_file));
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
3118 EXPECT_TRUE(backend_->db()->GetKeywordSearchTermRow(url1_id, NULL)); 3114 EXPECT_TRUE(backend_->db()->GetKeywordSearchTermRow(url1_id, NULL));
3119 EXPECT_FALSE(backend_->db()->GetKeywordSearchTermRow(url2_id, NULL)); 3115 EXPECT_FALSE(backend_->db()->GetKeywordSearchTermRow(url2_id, NULL));
3120 EXPECT_FALSE(backend_->db()->GetKeywordSearchTermRow(url3_id, NULL)); 3116 EXPECT_FALSE(backend_->db()->GetKeywordSearchTermRow(url3_id, NULL));
3121 } 3117 }
3122 3118
3123 // Simple test that removes a bookmark. This test exercises the code paths in 3119 // Simple test that removes a bookmark. This test exercises the code paths in
3124 // History that block till bookmark bar model is loaded. 3120 // History that block till bookmark bar model is loaded.
3125 TEST_F(HistoryBackendTest, RemoveNotification) { 3121 TEST_F(HistoryBackendTest, RemoveNotification) {
3126 scoped_ptr<TestingProfile> profile(new TestingProfile()); 3122 scoped_ptr<TestingProfile> profile(new TestingProfile());
3127 3123
3128 ASSERT_TRUE(profile->CreateHistoryService(false, false));
3129 profile->CreateBookmarkModel(true);
3130 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile.get());
3131 test::WaitForBookmarkModelToLoad(model);
3132
3133 // Add a URL. 3124 // Add a URL.
3134 GURL url("http://www.google.com"); 3125 GURL url("http://www.google.com");
3135 bookmark_utils::AddIfNotBookmarked(model, url, base::string16()); 3126 HistoryClientMock history_client;
3136 3127 history_client.AddBookmark(url);
3137 HistoryService* service = HistoryServiceFactory::GetForProfile( 3128 scoped_ptr<HistoryService> service(
3138 profile.get(), Profile::EXPLICIT_ACCESS); 3129 new HistoryService(&history_client, profile.get()));
3130 EXPECT_TRUE(service->Init(profile->GetPath()));
3139 3131
3140 service->AddPage( 3132 service->AddPage(
3141 url, base::Time::Now(), NULL, 1, GURL(), RedirectList(), 3133 url, base::Time::Now(), NULL, 1, GURL(), RedirectList(),
3142 content::PAGE_TRANSITION_TYPED, SOURCE_BROWSED, false); 3134 content::PAGE_TRANSITION_TYPED, SOURCE_BROWSED, false);
3143 3135
3144 // This won't actually delete the URL, rather it'll empty out the visits. 3136 // This won't actually delete the URL, rather it'll empty out the visits.
3145 // This triggers blocking on the BookmarkModel. 3137 // This triggers blocking on the BookmarkModel.
3138 EXPECT_CALL(history_client, BlockUntilBookmarksLoaded());
3146 service->DeleteURL(url); 3139 service->DeleteURL(url);
3147 } 3140 }
3148 3141
3149 // Test DeleteFTSIndexDatabases deletes expected files. 3142 // Test DeleteFTSIndexDatabases deletes expected files.
3150 TEST_F(HistoryBackendTest, DeleteFTSIndexDatabases) { 3143 TEST_F(HistoryBackendTest, DeleteFTSIndexDatabases) {
3151 ASSERT_TRUE(backend_.get()); 3144 ASSERT_TRUE(backend_.get());
3152 3145
3153 base::FilePath history_path(test_dir()); 3146 base::FilePath history_path(test_dir());
3154 base::FilePath db1(history_path.AppendASCII("History Index 2013-05")); 3147 base::FilePath db1(history_path.AppendASCII("History Index 2013-05"));
3155 base::FilePath db1_journal(db1.InsertBeforeExtensionASCII("-journal")); 3148 base::FilePath db1_journal(db1.InsertBeforeExtensionASCII("-journal"));
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
3384 // Verify that the second term is no longer returned as result, and also check 3377 // Verify that the second term is no longer returned as result, and also check
3385 // at the low level that it is gone for good. The term corresponding to the 3378 // at the low level that it is gone for good. The term corresponding to the
3386 // first URLRow should not be affected. 3379 // first URLRow should not be affected.
3387 EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1)); 3380 EXPECT_EQ(1u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term1));
3388 EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2)); 3381 EXPECT_EQ(0u, GetNumberOfMatchingSearchTerms(kTestKeywordId, term2));
3389 EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL)); 3382 EXPECT_TRUE(mem_backend_->db()->GetKeywordSearchTermRow(row1.id(), NULL));
3390 EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL)); 3383 EXPECT_FALSE(mem_backend_->db()->GetKeywordSearchTermRow(row2.id(), NULL));
3391 } 3384 }
3392 3385
3393 } // namespace history 3386 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698