| Index: chrome/browser/history/history_backend_unittest.cc
|
| diff --git a/chrome/browser/history/history_backend_unittest.cc b/chrome/browser/history/history_backend_unittest.cc
|
| index cc0ddc2ba6be53ddec5463fb67445607a427bbcf..8244eb169d100003847da92be252768a14509f0b 100644
|
| --- a/chrome/browser/history/history_backend_unittest.cc
|
| +++ b/chrome/browser/history/history_backend_unittest.cc
|
| @@ -10,6 +10,7 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/bind.h"
|
| +#include "base/callback.h"
|
| #include "base/command_line.h"
|
| #include "base/files/file_path.h"
|
| #include "base/files/file_util.h"
|
| @@ -59,6 +60,11 @@ const gfx::Size kTinySize = gfx::Size(kTinyEdgeSize, kTinyEdgeSize);
|
| const gfx::Size kSmallSize = gfx::Size(kSmallEdgeSize, kSmallEdgeSize);
|
| const gfx::Size kLargeSize = gfx::Size(kLargeEdgeSize, kLargeEdgeSize);
|
|
|
| +typedef base::Callback<void(const history::URLRow*,
|
| + const history::URLRow*,
|
| + const history::URLRow*)>
|
| + SimulateNotificationCallback;
|
| +
|
| // Comparison functions as to make it easier to check results of
|
| // GetFaviconBitmaps() and GetIconMappingsForPageURL().
|
| bool IconMappingLessThan(const history::IconMapping& a,
|
| @@ -76,6 +82,25 @@ class HistoryClientMock : public history::HistoryClientFakeBookmarks {
|
| MOCK_METHOD0(BlockUntilBookmarksLoaded, void());
|
| };
|
|
|
| +void SimulateNotificationURLVisited(history::HistoryServiceObserver* observer,
|
| + const history::URLRow* row1,
|
| + const history::URLRow* row2,
|
| + const history::URLRow* row3) {
|
| + history::URLRows rows;
|
| + rows.push_back(*row1);
|
| + if (row2)
|
| + rows.push_back(*row2);
|
| + if (row3)
|
| + rows.push_back(*row3);
|
| +
|
| + base::Time visit_time;
|
| + history::RedirectList redirects;
|
| + for (const auto& row : rows) {
|
| + observer->OnURLVisited(
|
| + nullptr, ui::PAGE_TRANSITION_LINK, row, redirects, visit_time);
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace history {
|
| @@ -94,6 +119,10 @@ class HistoryBackendTestDelegate : public HistoryBackend::Delegate {
|
| scoped_ptr<InMemoryHistoryBackend> backend) override;
|
| virtual void NotifyAddVisit(const BriefVisitInfo& info) override {}
|
| virtual void NotifyFaviconChanged(const std::set<GURL>& urls) override;
|
| + virtual void NotifyURLVisited(ui::PageTransition transition,
|
| + const URLRow& row,
|
| + const RedirectList& redirects,
|
| + base::Time visit_time) override;
|
| virtual void BroadcastNotifications(
|
| int type,
|
| scoped_ptr<HistoryDetails> details) override;
|
| @@ -213,6 +242,19 @@ void HistoryBackendTestDelegate::NotifyFaviconChanged(
|
| test_->NotifyFaviconChanged(changed_favicons);
|
| }
|
|
|
| +void HistoryBackendTestDelegate::NotifyURLVisited(ui::PageTransition transition,
|
| + const URLRow& row,
|
| + const RedirectList& redirects,
|
| + base::Time visit_time) {
|
| + scoped_ptr<URLVisitedDetails> details(new URLVisitedDetails());
|
| + details->transition = transition;
|
| + details->row = row;
|
| + details->redirects = redirects;
|
| + details->visit_time = visit_time;
|
| + test_->BroadcastNotifications(chrome::NOTIFICATION_HISTORY_URL_VISITED,
|
| + details.Pass());
|
| +}
|
| +
|
| void HistoryBackendTestDelegate::BroadcastNotifications(
|
| int type,
|
| scoped_ptr<HistoryDetails> details) {
|
| @@ -380,7 +422,8 @@ class InMemoryHistoryBackendTest : public HistoryBackendTestBase {
|
| InMemoryHistoryBackendTest() {}
|
| virtual ~InMemoryHistoryBackendTest() {}
|
|
|
| - protected:
|
| + // Public so that the method can be bound in test fixture using
|
| + // base::Bind(&InMemoryHistoryBackendTest::SimulateNotification, ...).
|
| void SimulateNotification(int type,
|
| const URLRow* row1,
|
| const URLRow* row2 = NULL,
|
| @@ -409,6 +452,7 @@ class InMemoryHistoryBackendTest : public HistoryBackendTestBase {
|
| }
|
| }
|
|
|
| + protected:
|
| size_t GetNumberOfMatchingSearchTerms(const int keyword_id,
|
| const base::string16& prefix) {
|
| std::vector<KeywordSearchTermVisit> matching_terms;
|
| @@ -451,7 +495,8 @@ class InMemoryHistoryBackendTest : public HistoryBackendTestBase {
|
| const base::string16& term1,
|
| const base::string16& term2);
|
|
|
| - void TestAddingAndChangingURLRows(int notification_type);
|
| + void TestAddingAndChangingURLRows(
|
| + const SimulateNotificationCallback& callback);
|
|
|
| static const KeywordID kTestKeywordId;
|
| static const char kTestSearchTerm1[];
|
| @@ -3013,7 +3058,7 @@ TEST_F(HistoryBackendTest, DeleteFTSIndexDatabases) {
|
| // Common implementation for the two tests below, given that the only difference
|
| // between them is the type of the notification sent out.
|
| void InMemoryHistoryBackendTest::TestAddingAndChangingURLRows(
|
| - int notification_type) {
|
| + const SimulateNotificationCallback& callback) {
|
| const char kTestTypedURLAlternativeTitle[] = "Google Search Again";
|
| const char kTestNonTypedURLAlternativeTitle[] = "Google News Again";
|
|
|
| @@ -3021,7 +3066,7 @@ void InMemoryHistoryBackendTest::TestAddingAndChangingURLRows(
|
| // never before seen by the cache) have been modified.
|
| URLRow row1(CreateTestTypedURL());
|
| URLRow row2(CreateTestNonTypedURL());
|
| - SimulateNotification(notification_type, &row1, &row2);
|
| + callback.Run(&row1, &row2, nullptr);
|
|
|
| // The in-memory database should only pick up the typed URL, and should ignore
|
| // the non-typed one. The typed URL should retain the ID that was present in
|
| @@ -3034,7 +3079,7 @@ void InMemoryHistoryBackendTest::TestAddingAndChangingURLRows(
|
| // Try changing attributes (other than typed_count) for existing URLRows.
|
| row1.set_title(base::UTF8ToUTF16(kTestTypedURLAlternativeTitle));
|
| row2.set_title(base::UTF8ToUTF16(kTestNonTypedURLAlternativeTitle));
|
| - SimulateNotification(notification_type, &row1, &row2);
|
| + callback.Run(&row1, &row2, nullptr);
|
|
|
| // URLRows that are cached by the in-memory database should be updated.
|
| EXPECT_NE(0, mem_backend_->db()->GetRowForURL(row1.url(), &cached_row1));
|
| @@ -3046,7 +3091,7 @@ void InMemoryHistoryBackendTest::TestAddingAndChangingURLRows(
|
| // previously non-typed URLRow.
|
| row1.set_typed_count(0);
|
| row2.set_typed_count(2);
|
| - SimulateNotification(notification_type, &row1, &row2);
|
| + callback.Run(&row1, &row2, nullptr);
|
|
|
| // The in-memory database should stop caching the first URLRow, and start
|
| // caching the second URLRow.
|
| @@ -3058,11 +3103,15 @@ void InMemoryHistoryBackendTest::TestAddingAndChangingURLRows(
|
| }
|
|
|
| TEST_F(InMemoryHistoryBackendTest, OnURLsModified) {
|
| - TestAddingAndChangingURLRows(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED);
|
| + TestAddingAndChangingURLRows(
|
| + base::Bind(&InMemoryHistoryBackendTest::SimulateNotification,
|
| + base::Unretained(this),
|
| + chrome::NOTIFICATION_HISTORY_URLS_MODIFIED));
|
| }
|
|
|
| TEST_F(InMemoryHistoryBackendTest, OnURLsVisisted) {
|
| - TestAddingAndChangingURLRows(chrome::NOTIFICATION_HISTORY_URL_VISITED);
|
| + TestAddingAndChangingURLRows(base::Bind(
|
| + &SimulateNotificationURLVisited, base::Unretained(mem_backend_.get())));
|
| }
|
|
|
| TEST_F(InMemoryHistoryBackendTest, OnURLsDeletedPiecewise) {
|
|
|