1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/command_line.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/file_util.h" 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/format_macros.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h" 9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/path_service.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/values.h" 13513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/history/history_backend.h" 14513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/history/history_database.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_marshaling.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history_notifications.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/history/history_unittest_base.h" 18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/history/top_sites.h" 19513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/history/top_sites_backend.h" 20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/history/top_sites_cache.h" 21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/history/top_sites_database.h" 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/most_visited_handler.h" 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/chrome_constants.h" 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/chrome_paths.h" 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/chrome_switches.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/tools/profiles/thumbnail-inl.h" 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/chromium_strings.h" 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/generated_resources.h" 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/locale_settings.h" 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/core/SkBitmap.h" 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/codec/jpeg_codec.h" 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace history { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace { 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Used by WaitForHistory, see it for details. 43513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass WaitForHistoryTask : public HistoryDBTask { 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistoryTask() {} 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool RunOnDBThread(HistoryBackend* backend, HistoryDatabase* db) { 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return true; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void DoneRunOnMainThread() { 52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoop::current()->Quit(); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DISALLOW_COPY_AND_ASSIGN(WaitForHistoryTask); 57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Used for querying top sites. Either runs sequentially, or runs a nested 60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// nested message loop until the response is complete. The later is used when 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// TopSites is queried before it finishes loading. 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TopSitesQuerier { 63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier() : number_of_callbacks_(0), waiting_(false) {} 65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Queries top sites. If |wait| is true a nested message loop is run until the 67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // callback is notified. 68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void QueryTopSites(TopSites* top_sites, bool wait) { 69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int start_number_of_callbacks = number_of_callbacks_; 70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites->GetMostVisitedURLs( 71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &consumer_, 72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NewCallback(this, &TopSitesQuerier::OnTopSitesAvailable)); 73513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (wait && start_number_of_callbacks == number_of_callbacks_) { 74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch waiting_ = true; 75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoop::current()->Run(); 76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CancelRequest() { 80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch consumer_.CancelAllRequests(); 81513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 82513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void set_urls(const MostVisitedURLList& urls) { urls_ = urls; } 84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const MostVisitedURLList& urls() const { return urls_; } 85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int number_of_callbacks() const { return number_of_callbacks_; } 87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Callback for TopSites::GetMostVisitedURLs. 90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void OnTopSitesAvailable(const history::MostVisitedURLList& data) { 91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch urls_ = data; 92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch number_of_callbacks_++; 93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (waiting_) { 94513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoop::current()->Quit(); 95513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch waiting_ = false; 96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 98513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 99513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CancelableRequestConsumer consumer_; 100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURLList urls_; 101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int number_of_callbacks_; 102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool waiting_; 103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TopSitesQuerier); 105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 106513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Extracts the data from |t1| into a SkBitmap. This is intended for usage of 108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// thumbnail data, which is stored as jpgs. 109513209b27ff55e2841eac0e4120199c23acce758Ben MurdochSkBitmap ExtractThumbnail(const RefCountedBytes& t1) { 110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_ptr<SkBitmap> image(gfx::JPEGCodec::Decode(t1.front(), 111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch t1.data.size())); 112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return image.get() ? *image : SkBitmap(); 113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Returns true if t1 and t2 contain the same data. 116513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool ThumbnailsAreEqual(RefCountedBytes* t1, RefCountedBytes* t2) { 117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!t1 || !t2) 118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return false; 119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (t1->data.size() != t2->data.size()) 120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return false; 121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return std::equal(t1->data.begin(), 122513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch t1->data.end(), 123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch t2->data.begin()); 124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} // namespace 127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TopSitesTest : public HistoryUnitTestBase { 129513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 130513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesTest() 131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch : ui_thread_(BrowserThread::UI, &message_loop_), 132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch db_thread_(BrowserThread::DB, &message_loop_), 133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch original_command_line_(*CommandLine::ForCurrentProcess()) { 1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_.reset(new TestingProfile); 138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (CreateHistoryAndTopSites()) { 139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile_->CreateHistoryService(false, false); 140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile_->CreateTopSites(); 141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile_->BlockUntilTopSitesLoaded(); 142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_.reset(); 147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch *CommandLine::ForCurrentProcess() = original_command_line_; 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns true if history and top sites should be created in SetUp. 151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool CreateHistoryAndTopSites() { 152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return true; 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Gets the thumbnail for |url| from TopSites. 156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap GetThumbnail(const GURL& url) { 157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> data; 158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return top_sites()->GetPageThumbnail(url, &data) ? 159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ExtractThumbnail(*data.get()) : SkBitmap(); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Creates a bitmap of the specified color. 163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap CreateBitmap(SkColor color) { 164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap thumbnail; 165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch thumbnail.setConfig(SkBitmap::kARGB_8888_Config, 4, 4); 166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch thumbnail.allocPixels(); 167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch thumbnail.eraseColor(color); 168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return thumbnail; 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Forces top sites to load top sites from history, then recreates top sites. 172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreating top sites makes sure the changes from history are saved and 173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // loaded from the db. 174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void RefreshTopSitesAndRecreate() { 175513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch StartQueryForMostVisited(); 176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RecreateTopSitesAndBlock(); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Blocks the caller until history processes a task. This is useful if you 181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // need to wait until you know history has processed a task. 182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void WaitForHistory() { 183513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->ScheduleDBTask(new WaitForHistoryTask(), &consumer_); 184513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoop::current()->Run(); 1853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Waits for top sites to finish processing a task. This is useful if you need 188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // to wait until top sites finishes processing a task. 189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void WaitForTopSites() { 190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->backend_->DoEmptyRequest( 191513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &consumer_, 192513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NewCallback(this, &TopSitesTest::QuitCallback)); 193513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoop::current()->Run(); 194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSites* top_sites() { return profile_->GetTopSites(); } 197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CancelableRequestConsumer* consumer() { return &consumer_; } 198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TestingProfile* profile() {return profile_.get();} 199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch HistoryService* history_service() { 200513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); 201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 202513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURLList GetPrepopulatePages() { 204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return TopSites::GetPrepopulatePages(); 205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns true if the TopSitesQuerier contains the prepopulate data starting 208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // at |start_index|. 209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void ContainsPrepopulatePages(const TopSitesQuerier& querier, 210513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch size_t start_index) { 211513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURLList prepopulate_urls = GetPrepopulatePages(); 212513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_LE(start_index + prepopulate_urls.size(), querier.urls().size()); 213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (size_t i = 0; i < prepopulate_urls.size(); ++i) { 214513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(prepopulate_urls[i].url.spec(), 215513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.urls()[start_index + i].url.spec()) << " @ index " << 216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch i; 217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 218513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Used for callbacks from history. 221513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void EmptyCallback() { 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 224513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Quit the current message loop when invoked. Useful when running a nested 225513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // message loop. 226513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void QuitCallback(TopSitesBackend::Handle handle) { 227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoop::current()->Quit(); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Adds a page to history. 231513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void AddPageToHistory(const GURL& url) { 232513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RedirectList redirects; 233513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch redirects.push_back(url); 234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->AddPage( 235513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url, static_cast<void*>(this), 0, GURL(), PageTransition::TYPED, 236513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch redirects, history::SOURCE_BROWSED, false); 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Adds a page to history. 240513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void AddPageToHistory(const GURL& url, const string16& title) { 241513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RedirectList redirects; 242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch redirects.push_back(url); 243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->AddPage( 244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url, static_cast<void*>(this), 0, GURL(), PageTransition::TYPED, 245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch redirects, history::SOURCE_BROWSED, false); 246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->SetPageTitle(url, title); 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Adds a page to history. 250513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void AddPageToHistory(const GURL& url, 251513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const string16& title, 252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const history::RedirectList& redirects, 253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch base::Time time) { 254513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->AddPage( 255513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url, time, static_cast<void*>(this), 0, GURL(), PageTransition::TYPED, 256513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch redirects, history::SOURCE_BROWSED, false); 257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->SetPageTitle(url, title); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Delets a url. 261513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void DeleteURL(const GURL& url) { 262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->DeleteURL(url); 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 265513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns true if the thumbnail equals the specified bytes. 266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool ThumbnailEqualsBytes(const SkBitmap& image, RefCountedBytes* bytes) { 267513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> encoded_image; 268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EncodeBitmap(image, &encoded_image); 269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return ThumbnailsAreEqual(encoded_image, bytes); 270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 272513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreates top sites. This forces top sites to reread from the db. 273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void RecreateTopSitesAndBlock() { 274513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate TopSites and wait for it to load. 275513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateTopSites(); 276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // As history already loaded we have to fake this call. 277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->BlockUntilTopSitesLoaded(); 278513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 280513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Wrappers that allow private TopSites functions to be called from the 281513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // individual tests without making them all be friends. 282513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL GetCanonicalURL(const GURL& url) { 283513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return top_sites()->cache_->GetCanonicalURL(url); 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetTopSites(const MostVisitedURLList& new_top_sites) { 287513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->SetTopSites(new_top_sites); 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 290513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void StartQueryForMostVisited() { 291513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->StartQueryForMostVisited(); 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 294513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool EncodeBitmap(const SkBitmap& image, 295513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes>* bytes) { 296513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return TopSites::EncodeBitmap(image, bytes); 297513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 298513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 299513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetLastNumUrlsChanged(size_t value) { 300513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->last_num_urls_changed_ = value; 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch size_t last_num_urls_changed() { return top_sites()->last_num_urls_changed_; } 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 305513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch base::TimeDelta GetUpdateDelay() { 306513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return top_sites()->GetUpdateDelay(); 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 309513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool IsTopSitesLoaded() { return top_sites()->loaded_; } 310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool AddPrepopulatedPages(MostVisitedURLList* urls) { 312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return TopSites::AddPrepopulatedPages(urls); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 316513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MessageLoopForUI message_loop_; 317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BrowserThread ui_thread_; 318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch BrowserThread db_thread_; 319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_ptr<TestingProfile> profile_; 320513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CancelableRequestConsumer consumer_; 321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CommandLine original_command_line_; 322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TopSitesTest); 324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; // Class TopSitesTest 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 326513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TopSitesMigrationTest : public TopSitesTest { 327513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 328513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesMigrationTest() {} 329513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 330513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void SetUp() { 331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesTest::SetUp(); 332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 333513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch FilePath data_path; 334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_path)); 335513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch data_path = data_path.AppendASCII("top_sites"); 336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 337513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Set up history and thumbnails as they would be before migration. 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(ExecuteSQLScript( 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen data_path.AppendASCII("history.19.sql"), 340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profile()->GetPath().Append(chrome::kHistoryFilename))); 341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(ExecuteSQLScript( 342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen data_path.AppendASCII("thumbnails.3.sql"), 343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profile()->GetPath().Append(chrome::kThumbnailsFilename))); 344513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 345513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateHistoryService(false, false); 346513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateTopSites(); 347513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->BlockUntilTopSitesLoaded(); 348513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 349513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 350513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Returns true if history and top sites should be created in SetUp. 351513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual bool CreateHistoryAndTopSites() { 352513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return false; 353513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 354513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 355513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch protected: 356513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Assertions for the migration test. This is extracted into a standalone 357513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // method so that it can be invoked twice. 358513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void MigrationAssertions() { 359513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 360513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 361513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 362513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We shouldn't have gotten a callback. 363513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier.number_of_callbacks()); 364513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 365513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The data we loaded should contain google and yahoo. 366513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 367513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GURL("http://google.com/"), querier.urls()[0].url); 368513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GURL("http://yahoo.com/"), querier.urls()[1].url); 369513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 370513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap goog_thumbnail = GetThumbnail(GURL("http://google.com/")); 372513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, goog_thumbnail.width()); 373513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 374513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap yahoo_thumbnail = GetThumbnail(GURL("http://yahoo.com/")); 375513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(2, yahoo_thumbnail.width()); 376513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 377513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Favicon assertions are handled in ThumbnailDatabase. 378513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 379513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 380513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private: 381513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 382513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TopSitesMigrationTest); 383513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Helper function for appending a URL to a vector of "most visited" URLs, 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// using the default values for everything but the URL. 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void AppendMostVisitedURL(std::vector<MostVisitedURL>* list, 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& url) { 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL mv; 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.url = url; 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(url); 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch list->push_back(mv); 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Same as AppendMostVisitedURL except that it adds a redirect from the first 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// URL to the second. 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void AppendMostVisitedURLWithRedirect( 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<MostVisitedURL>* list, 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& redirect_source, const GURL& redirect_dest) { 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL mv; 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.url = redirect_dest; 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(redirect_source); 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(redirect_dest); 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch list->push_back(mv); 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 407513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests GetCanonicalURL. 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, GetCanonicalURL) { 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Have two chains: 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // google.com -> www.google.com 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // news.google.com (no redirects) 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL news("http://news.google.com/"); 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL source("http://google.com/"); 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL dest("http://www.google.com/"); 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<MostVisitedURL> most_visited; 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURLWithRedirect(&most_visited, source, dest); 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&most_visited, news); 419513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(most_visited); 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 4213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Random URLs not in the database are returned unchanged. 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL result = GetCanonicalURL(GURL("http://fark.com/")); 4233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(GURL("http://fark.com/"), result); 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Easy case, there are no redirects and the exact URL is stored. 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = GetCanonicalURL(news); 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(news, result); 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL in question is the source URL in a redirect list. 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = GetCanonicalURL(source); 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(dest, result); 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL in question is the destination of a redirect. 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch result = GetCanonicalURL(dest); 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(dest, result); 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 438513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests DiffMostVisited. 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, DiffMostVisited) { 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL stays_the_same("http://staysthesame/"); 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL gets_added_1("http://getsadded1/"); 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL gets_added_2("http://getsadded2/"); 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL gets_deleted_1("http://getsdeleted2/"); 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL gets_moved_1("http://getsmoved1/"); 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<MostVisitedURL> old_list; 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&old_list, stays_the_same); // 0 (unchanged) 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&old_list, gets_deleted_1); // 1 (deleted) 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&old_list, gets_moved_1); // 2 (moved to 3) 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<MostVisitedURL> new_list; 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&new_list, stays_the_same); // 0 (unchanged) 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&new_list, gets_added_1); // 1 (added) 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&new_list, gets_added_2); // 2 (added) 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&new_list, gets_moved_1); // 3 (moved from 2) 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 457513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history::TopSitesDelta delta; 458513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history::TopSites::DiffMostVisited(old_list, new_list, &delta); 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 460513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u, delta.added.size()); 461513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(gets_added_1 == delta.added[0].url.url); 462513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1, delta.added[0].rank); 463513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(gets_added_2 == delta.added[1].url.url); 464513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2, delta.added[1].rank); 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 466513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u, delta.deleted.size()); 467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(gets_deleted_1 == delta.deleted[0].url); 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 469513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u, delta.moved.size()); 470513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(gets_moved_1 == delta.moved[0].url.url); 471513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(3, delta.moved[0].rank); 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 474513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests SetPageThumbnail. 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, SetPageThumbnail) { 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url1a("http://google.com/"); 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url1b("http://www.google.com/"); 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url2("http://images.google.com/"); 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL invalid_url("chrome://favicon/http://google.com/"); 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<MostVisitedURL> list; 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AppendMostVisitedURL(&list, url2); 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL mv; 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.url = url1b; 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(url1a); 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(url1b); 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch list.push_back(mv); 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Save our most visited data containing that one site. 491513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(list); 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a dummy thumbnail. 494513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap thumbnail(CreateBitmap(SK_ColorWHITE)); 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time now = base::Time::Now(); 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ThumbnailScore low_score(1.0, true, true, now); 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ThumbnailScore medium_score(0.5, true, true, now); 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ThumbnailScore high_score(0.0, true, true, now); 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Setting the thumbnail for invalid pages should fail. 502513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->SetPageThumbnail(invalid_url, 503513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch thumbnail, medium_score)); 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Setting the thumbnail for url2 should succeed, lower scores shouldn't 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // replace it, higher scores should. 507513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(url2, thumbnail, medium_score)); 508513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->SetPageThumbnail(url2, thumbnail, low_score)); 509513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(url2, thumbnail, high_score)); 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set on the redirect source should succeed. It should be replacable by 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the same score on the redirect destination, which in turn should not 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // be replaced by the source again. 514513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(url1a, thumbnail, medium_score)); 515513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(url1b, thumbnail, medium_score)); 516513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->SetPageThumbnail(url1a, thumbnail, medium_score)); 517513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 518513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 519513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure a thumbnail is correctly removed when the page is removed. 520513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(TopSitesTest, ThumbnailRemoved) { 521513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL url("http://google.com/"); 522513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 523513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Configure top sites with 'google.com'. 524513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::vector<MostVisitedURL> list; 525513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AppendMostVisitedURL(&list, url); 526513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(list); 527513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 528513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Create a dummy thumbnail. 529513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap thumbnail(CreateBitmap(SK_ColorRED)); 530513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 531513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch base::Time now = base::Time::Now(); 532513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore low_score(1.0, true, true, now); 533513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore medium_score(0.5, true, true, now); 534513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore high_score(0.0, true, true, now); 535513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 536513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Set the thumbnail. 537513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(url, thumbnail, medium_score)); 538513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 539513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make sure the thumbnail was actually set. 540513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> result; 541513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(url, &result)); 542513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(thumbnail, result.get())); 543513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 544513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Reset the thumbnails and make sure we don't get it back. 545513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(MostVisitedURLList()); 546513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->GetPageThumbnail(url, &result)); 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 549513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests GetPageThumbnail. 5503345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, GetPageThumbnail) { 5513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MostVisitedURLList url_list; 552513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURL url1; 553513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url1.url = GURL("http://asdf.com"); 5543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url1.redirects.push_back(url1.url); 5553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url_list.push_back(url1); 5563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 557513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURL url2; 558513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url2.url = GURL("http://gmail.com"); 5593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url2.redirects.push_back(url2.url); 5603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url2.redirects.push_back(GURL("http://mail.google.com")); 5613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url_list.push_back(url2); 5623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 563513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(url_list); 5643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Create a dummy thumbnail. 566513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap thumbnail(CreateBitmap(SK_ColorWHITE)); 5673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ThumbnailScore score(0.5, true, true, base::Time::Now()); 5683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 569513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> result; 570513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(url1.url, thumbnail, score)); 571513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(url1.url, &result)); 5723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 573513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(GURL("http://gmail.com"), 5743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick thumbnail, score)); 575513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(GURL("http://gmail.com"), 576513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &result)); 5773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Get a thumbnail via a redirect. 578513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(GURL("http://mail.google.com"), 579513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &result)); 5803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 581513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(GURL("http://mail.google.com"), 5823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick thumbnail, score)); 583513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(url2.url, &result)); 5843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 585513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(thumbnail, result.get())); 5863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 5873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 588513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests GetMostVisitedURLs. 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, GetMostVisited) { 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL news("http://news.google.com/"); 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google("http://google.com/"); 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 593513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(news); 594513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(google); 595513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 596513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch StartQueryForMostVisited(); 597513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 598513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 599513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 600513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 601513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 602513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1, querier.number_of_callbacks()); 603513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 6043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // 2 extra prepopulated URLs. 605513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 606513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(news, querier.urls()[0].url); 607513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google, querier.urls()[1].url); 608513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 611513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure changes done to top sites get mirrored to the db. 612513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(TopSitesTest, SaveToDB) { 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL url; 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL asdf_url("http://asdf.com"); 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 asdf_title(ASCIIToUTF16("ASDF")); 616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google_url("http://google.com"); 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 google_title(ASCIIToUTF16("Google")); 618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL news_url("http://news.google.com"); 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 news_title(ASCIIToUTF16("Google News")); 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 621513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Add asdf_url to history. 622513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(asdf_url, asdf_title); 623513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 624513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make TopSites reread from the db. 625513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch StartQueryForMostVisited(); 626513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 628513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Add a thumbnail. 629513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap tmp_bitmap(CreateBitmap(SK_ColorBLUE)); 630513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(top_sites()->SetPageThumbnail(asdf_url, tmp_bitmap, 631513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore())); 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 633513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RecreateTopSitesAndBlock(); 634513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 635513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 636513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 637513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 638513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 639513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_url, querier.urls()[0].url); 640513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_title, querier.urls()[0].title); 641513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 642513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 643513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> read_data; 644513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(asdf_url, &read_data)); 645513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(tmp_bitmap, read_data.get())); 646513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL url2; 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.url = google_url; 650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.title = google_title; 651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.redirects.push_back(url2.url); 652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 653513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(url2.url, url2.title); 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 655513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Add new thumbnail at rank 0 and shift the other result to 1. 656513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(top_sites()->SetPageThumbnail(google_url, 657513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch tmp_bitmap, 658513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore())); 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 660513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make TopSites reread from the db. 661513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 663513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 664513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 665513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 666513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 667513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_url, querier.urls()[0].url); 668513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_title, querier.urls()[0].title); 669513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google_url, querier.urls()[1].url); 670513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google_title, querier.urls()[1].title); 671513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 672513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 675513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// More permutations of saving to db. 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, RealDatabase) { 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL url; 678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL asdf_url("http://asdf.com"); 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 asdf_title(ASCIIToUTF16("ASDF")); 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google1_url("http://google.com"); 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google2_url("http://google.com/redirect"); 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google3_url("http://www.google.com"); 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 google_title(ASCIIToUTF16("Google")); 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL news_url("http://news.google.com"); 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 news_title(ASCIIToUTF16("Google News")); 686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.url = asdf_url; 688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.title = asdf_title; 689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.redirects.push_back(url.url); 690513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap asdf_thumbnail(CreateBitmap(SK_ColorRED)); 691513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(top_sites()->SetPageThumbnail( 692513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch asdf_url, asdf_thumbnail, ThumbnailScore())); 693513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 694513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch base::Time add_time(base::Time::Now()); 695513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(url.url, url.title, url.redirects, add_time); 696513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 697513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 698513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 699513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 700513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 701513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 702513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 703513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 704513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_url, querier.urls()[0].url); 705513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_title, querier.urls()[0].title); 706513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 707513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 708513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> read_data; 709513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(asdf_url, &read_data)); 710513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(asdf_thumbnail, read_data.get())); 711513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL url2; 714513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url2.url = google3_url; 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.title = google_title; 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.redirects.push_back(google1_url); 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.redirects.push_back(google2_url); 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2.redirects.push_back(google3_url); 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 720513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(google3_url, url2.title, url2.redirects, 721513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch add_time - base::TimeDelta::FromMinutes(1)); 722513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Add google twice so that it becomes the first visited site. 723513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(google3_url, url2.title, url2.redirects, 724513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch add_time - base::TimeDelta::FromMinutes(2)); 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 726513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap google_thumbnail(CreateBitmap(SK_ColorBLUE)); 727513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(top_sites()->SetPageThumbnail( 728513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url2.url, google_thumbnail, ThumbnailScore())); 729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 730513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 732513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 733513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> read_data; 734513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 735513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 736513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 737513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 738513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google1_url, querier.urls()[0].url); 739513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google_title, querier.urls()[0].title); 740513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(3u, querier.urls()[0].redirects.size()); 741513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(google3_url, &read_data)); 742513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(google_thumbnail, read_data.get())); 743513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 744513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_url, querier.urls()[1].url); 745513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(asdf_title, querier.urls()[1].title); 746513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 747513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 749513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap weewar_bitmap(CreateBitmap(SK_ColorYELLOW)); 750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 751513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch base::Time thumbnail_time(base::Time::Now()); 752513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore low_score(1.0, true, true, thumbnail_time); 753513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore medium_score(0.5, true, true, thumbnail_time); 754513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ThumbnailScore high_score(0.0, true, true, thumbnail_time); 755513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 756513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 1. Set to weewar. (Writes the thumbnail to the DB.) 757513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(google3_url, 758513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch weewar_bitmap, 759513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch medium_score)); 760513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 761513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 762513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> read_data; 763513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(google3_url, &read_data)); 764513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(weewar_bitmap, read_data.get())); 765513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 766513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 767513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap google_bitmap(CreateBitmap(SK_ColorGREEN)); 768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 2. Set to google - low score. 770513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->SetPageThumbnail(google3_url, 771513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch google_bitmap, 772513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch low_score)); 773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 3. Set to google - high score. 775513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(google1_url, 776513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch google_bitmap, 777513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch high_score)); 778513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check that the thumbnail was updated. 780513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 781513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 782513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> read_data; 783513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->GetPageThumbnail(google3_url, &read_data)); 784513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(ThumbnailEqualsBytes(weewar_bitmap, read_data.get())); 785513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(google_bitmap, read_data.get())); 786513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7893345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, DeleteNotifications) { 790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google1_url("http://google.com"); 791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google2_url("http://google.com/redirect"); 792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL google3_url("http://www.google.com"); 793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 google_title(ASCIIToUTF16("Google")); 794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL news_url("http://news.google.com"); 795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 news_title(ASCIIToUTF16("Google News")); 796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 797513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(google1_url, google_title); 798513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(news_url, news_title); 799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 800513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 802513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 803513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 804513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 806513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(4u, querier.urls().size()); 807513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 809513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DeleteURL(news_url); 810513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 811513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Wait for history to process the deletion. 812513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 813513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 814513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 815513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 816513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 817513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 818513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 819513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google_title, querier.urls()[0].title); 820513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 821513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 822513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 823513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Now reload. This verifies topsites actually wrote the deletion to disk. 824513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 825513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 826513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 827513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 828513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 829513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 830513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 831513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(google_title, querier.urls()[0].title); 832513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 833513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 834513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 835513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DeleteURL(google1_url); 836513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 837513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Wait for history to process the deletion. 838513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 839513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 840513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 841513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 842513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 843513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 844513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(GetPrepopulatePages().size(), querier.urls().size()); 845513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 0)); 846513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 847513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 848513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Now reload. This verifies topsites actually wrote the deletion to disk. 849513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 850513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 851513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 852513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 853513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 854513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 855513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(GetPrepopulatePages().size(), querier.urls().size()); 856513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 0)); 857513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 8583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 8593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 8603345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, PinnedURLsDeleted) { 8613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL google1_url("http://google.com"); 8623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL google2_url("http://google.com/redirect"); 8633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL google3_url("http://www.google.com"); 8643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick string16 google_title(ASCIIToUTF16("Google")); 8653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL news_url("http://news.google.com"); 8663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick string16 news_title(ASCIIToUTF16("Google News")); 8673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 868513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(google1_url, google_title); 869513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch AddPageToHistory(news_url, news_title); 870513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 871513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RefreshTopSitesAndRecreate(); 8723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 873513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 874513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 875513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 8763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 877513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 2 extra prepopulated URLs. 878513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(4u, querier.urls().size()); 879513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 8803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 881513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddPinnedURL(news_url, 3); 882513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->IsURLPinned(news_url)); 883513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 884513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch DeleteURL(news_url); 885513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 886513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 887513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 888513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 889513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 890513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 891513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 2 extra prepopulated URLs. 892513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(3u, querier.urls().size()); 893513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsURLPinned(news_url)); 894513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 895513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 896513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch history_service()->ExpireHistoryBetween( 897513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::set<GURL>(), base::Time(), base::Time(), 898513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch consumer(), NewCallback(static_cast<TopSitesTest*>(this), 899513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch &TopSitesTest::EmptyCallback)), 900513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 901513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 902513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 903513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier; 904513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier.QueryTopSites(top_sites(), false); 905513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 906513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // 2 extra prepopulated URLs. 907513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(GetPrepopulatePages().size(), querier.urls().size()); 908513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsURLPinned(google1_url)); 909513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 0)); 910513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 913513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure GetUpdateDelay is updated appropriately. 914c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, GetUpdateDelay) { 915513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetLastNumUrlsChanged(0); 916513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(30, GetUpdateDelay().InSeconds()); 917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 918513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURLList url_list; 919513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url_list.resize(20); 920513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL tmp_url(GURL("http://x")); 921513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (size_t i = 0; i < url_list.size(); ++i) { 922513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url_list[i].url = tmp_url; 923513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch url_list[i].redirects.push_back(tmp_url); 924513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 925513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(url_list); 926513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(20u, last_num_urls_changed()); 927513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetLastNumUrlsChanged(0); 928513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(60, GetUpdateDelay().InMinutes()); 929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 930513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetLastNumUrlsChanged(3); 931513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(52, GetUpdateDelay().InMinutes()); 932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 933513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetLastNumUrlsChanged(20); 934513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, GetUpdateDelay().InMinutes()); 935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 937513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(TopSitesMigrationTest, Migrate) { 938513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(IsTopSitesLoaded()); 939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 940513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make sure the data was migrated to top sites. 941513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(MigrationAssertions()); 942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 943513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We need to wait for top sites and history to finish processing requests. 944513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForTopSites(); 945513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForHistory(); 946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 947513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make sure there is no longer a Thumbnails file on disk. 948513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_FALSE(file_util::PathExists( 949513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->GetPath().Append(chrome::kThumbnailsFilename))); 950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 951513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate top sites and make sure everything is still there. 952513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateHistoryService(false, false); 953513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RecreateTopSitesAndBlock(); 954513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 955513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(MigrationAssertions()); 956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 958513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verifies that callbacks are notified correctly if requested before top sites 959513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// has loaded. 960513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(TopSitesTest, NotifyCallbacksWhenLoaded) { 961513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate top sites. It won't be loaded now. 962513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateTopSites(); 963513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 964513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(IsTopSitesLoaded()); 965513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 966513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier1; 967513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier2; 968513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier3; 969513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 970513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Starts the queries. 971513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier1.QueryTopSites(top_sites(), false); 972513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier2.QueryTopSites(top_sites(), false); 973513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier3.QueryTopSites(top_sites(), false); 974513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 975513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We shouldn't have gotten a callback. 976513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier1.number_of_callbacks()); 977513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier2.number_of_callbacks()); 978513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier3.number_of_callbacks()); 979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 980513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Wait for loading to complete. 981513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->BlockUntilTopSitesLoaded(); 982513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 983513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Now we should have gotten the callbacks. 984513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier1.number_of_callbacks()); 985513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages().size(), querier1.urls().size()); 986513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier2.number_of_callbacks()); 987513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages().size(), querier2.urls().size()); 988513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier3.number_of_callbacks()); 989513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages().size(), querier3.urls().size()); 990513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 991513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Reset the top sites. 992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURLList pages; 993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL url; 994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.url = GURL("http://1.com/"); 995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.redirects.push_back(url.url); 996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages.push_back(url); 997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.url = GURL("http://2.com/"); 998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.redirects.push_back(url.url); 999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages.push_back(url); 1000513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(pages); 1001513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1002513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate top sites. It won't be loaded now. 1003513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateTopSites(); 1004513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1005513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(IsTopSitesLoaded()); 1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1007513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier4; 1008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1009513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Query again. 1010513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier4.QueryTopSites(top_sites(), false); 10113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1012513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We shouldn't have gotten a callback. 1013513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier4.number_of_callbacks()); 1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1015513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Wait for loading to complete. 1016513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->BlockUntilTopSitesLoaded(); 1017513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1018513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Now we should have gotten the callbacks. 1019513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier4.number_of_callbacks()); 1020513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), querier4.urls().size()); 1021513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1022513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://1.com/", querier4.urls()[0].url.spec()); 1023513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://2.com/", querier4.urls()[1].url.spec()); 1024513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier4, 2)); 1025513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1026513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Reset the top sites again, this time don't reload. 1027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.url = GURL("http://3.com/"); 1028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url.redirects.push_back(url.url); 1029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch pages.push_back(url); 1030513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(pages); 1031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1032513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Query again. 1033513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier5; 1034513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier5.QueryTopSites(top_sites(), true); 1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1036513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier5.number_of_callbacks()); 10373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1038513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(3u + GetPrepopulatePages().size(), querier5.urls().size()); 1039513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://1.com/", querier5.urls()[0].url.spec()); 1040513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://2.com/", querier5.urls()[1].url.spec()); 1041513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://3.com/", querier5.urls()[2].url.spec()); 1042513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier5, 3)); 1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1045513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure canceled requests are not notified. 1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, CancelingRequestsForTopSites) { 1047513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate top sites. It won't be loaded now. 1048513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateTopSites(); 1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1050513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(IsTopSitesLoaded()); 1051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1052513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier1; 1053513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier querier2; 1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1055513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Starts the queries. 1056513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier1.QueryTopSites(top_sites(), false); 1057513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier2.QueryTopSites(top_sites(), false); 1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1059513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We shouldn't have gotten a callback. 1060513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier1.number_of_callbacks()); 1061513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier2.number_of_callbacks()); 1062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1063513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch querier2.CancelRequest(); 1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1065513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Wait for loading to complete. 1066513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->BlockUntilTopSitesLoaded(); 1067513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1068513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The first callback should succeed. 1069513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(1, querier1.number_of_callbacks()); 1070513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages().size(), querier1.urls().size()); 1071513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1072513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // And the canceled callback should not be notified. 1073513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, querier2.number_of_callbacks()); 1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1076513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure temporary thumbnails are copied over correctly. 1077c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(TopSitesTest, AddTemporaryThumbnail) { 1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL unknown_url("http://news.google.com/"); 1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL invalid_url("chrome://thumb/http://google.com/"); 1080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url1a("http://google.com/"); 1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url1b("http://www.google.com/"); 1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a dummy thumbnail. 1084513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SkBitmap thumbnail(CreateBitmap(SK_ColorRED)); 1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ThumbnailScore medium_score(0.5, true, true, base::Time::Now()); 1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Don't store thumbnails for Javascript URLs. 1089513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->SetPageThumbnail(invalid_url, 1090513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch thumbnail, 1091513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch medium_score)); 1092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Store thumbnails for unknown (but valid) URLs temporarily - calls 1093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // AddTemporaryThumbnail. 1094513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->SetPageThumbnail(unknown_url, 1095513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch thumbnail, 1096513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch medium_score)); 1097513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1098513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // We shouldn't get the thumnail back though (the url isn't in to sites yet). 1099513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_refptr<RefCountedBytes> out; 1100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->GetPageThumbnail(unknown_url, &out)); 1101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // But we should be able to get the temporary page thumbnail score. 1102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThumbnailScore out_score; 1103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(top_sites()->GetTemporaryPageThumbnailScore(unknown_url, 1104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &out_score)); 1105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(medium_score.Equals(out_score)); 1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<MostVisitedURL> list; 1108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MostVisitedURL mv; 1110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.url = unknown_url; 1111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(mv.url); 1112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(url1a); 1113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mv.redirects.push_back(url1b); 1114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch list.push_back(mv); 1115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Update URLs. This should result in using thumbnail. 1117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(list); 1118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(top_sites()->GetPageThumbnail(unknown_url, &out)); 1120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(ThumbnailEqualsBytes(thumbnail, out.get())); 1121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests variations of blacklisting. 11243345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, Blacklisting) { 11253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MostVisitedURLList pages; 11263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MostVisitedURL url, url1; 11273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url.url = GURL("http://bbc.com/"); 11283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url.redirects.push_back(url.url); 11293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pages.push_back(url); 11303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url1.url = GURL("http://google.com/"); 11313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url1.redirects.push_back(url1.url); 11323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pages.push_back(url1); 11333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(pages); 1135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsBlacklisted(GURL("http://bbc.com/"))); 1136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1137513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Blacklist google.com. 1138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddBlacklistedURL(GURL("http://google.com/")); 1139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL prepopulate_url = GetPrepopulatePages()[0].url; 1141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->HasBlacklistedItems()); 1143513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->IsBlacklisted(GURL("http://google.com/"))); 1144513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsBlacklisted(GURL("http://bbc.com/"))); 1145513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsBlacklisted(prepopulate_url)); 1146513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make sure the blacklisted site isn't returned in the results. 11483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 1149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size(), q.urls().size()); 1152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 1)); 11543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 11553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate top sites and make sure blacklisted url was correctly read. 1157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RecreateTopSitesAndBlock(); 1158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size(), q.urls().size()); 1162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 1)); 1164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 11653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Blacklist one of the prepopulate urls. 1167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddBlacklistedURL(prepopulate_url); 1168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->HasBlacklistedItems()); 11693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make sure the blacklisted prepopulate url isn't returned. 11713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 1172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(1u + GetPrepopulatePages().size() - 1, q.urls().size()); 1175513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (size_t i = 1; i < q.urls().size(); ++i) 1177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NE(prepopulate_url.spec(), q.urls()[i].url.spec()); 11783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 11793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Mark google as no longer blacklisted. 1181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->RemoveBlacklistedURL(GURL("http://google.com/")); 1182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(top_sites()->HasBlacklistedItems()); 1183513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsBlacklisted(GURL("http://google.com/"))); 1184513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1185513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Make sure google is returned now. 11863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick { 1187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size() - 1, q.urls().size()); 1190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1191513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[1].url.spec()); 1192513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NE(prepopulate_url.spec(), q.urls()[2].url.spec()); 11933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 11943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1195513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Remove all blacklisted sites. 1196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->ClearBlacklistedURLs(); 1197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->HasBlacklistedItems()); 1198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1200513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1202513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), q.urls().size()); 1203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[1].url.spec()); 1205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 2)); 1206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 12073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 12083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests variations of pinning/unpinning urls. 12103345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, PinnedURLs) { 12113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MostVisitedURLList pages; 12123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MostVisitedURL url, url1; 12133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url.url = GURL("http://bbc.com/"); 12143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url.redirects.push_back(url.url); 12153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pages.push_back(url); 12163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url1.url = GURL("http://google.com/"); 12173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url1.redirects.push_back(url1.url); 12183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick pages.push_back(url1); 12193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch SetTopSites(pages); 1221513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1222513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsURLPinned(GURL("http://bbc.com/"))); 1223513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1224513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1225513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1226513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), q.urls().size()); 1228513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1229513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[1].url.spec()); 1230513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 2)); 1231513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 1232513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1233513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddPinnedURL(GURL("http://google.com/"), 3); 1234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsURLPinned(GURL("http://bbc.com/"))); 1235513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsURLPinned(GetPrepopulatePages()[0].url)); 1236513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1237513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1238513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1239513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1240513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(4u, q.urls().size()); 1241513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 1)); 1243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[3].url.spec()); 1244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 1245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->RemovePinnedURL(GURL("http://google.com/")); 1247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(top_sites()->IsURLPinned(GURL("http://google.com/"))); 1248513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1250513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1251513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(2u + GetPrepopulatePages().size(), q.urls().size()); 1253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 1254513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[1].url.spec()); 1255513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 2)); 1256513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 1257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1258513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch GURL prepopulate_url = GetPrepopulatePages()[0].url; 1259513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddPinnedURL(GURL("http://bbc.com"), 1); 1260513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddPinnedURL(prepopulate_url, 0); 1261513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1263513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1264513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1265513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(3u + GetPrepopulatePages().size() - 1, q.urls().size()); 1266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(prepopulate_url, q.urls()[0].url); 1267513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[1].url.spec()); 1268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[2].url.spec()); 1269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (GetPrepopulatePages().size() > 1) 1270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages()[1].url, q.urls()[3].url); 1271513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 1272513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recreate and make sure state remains the same. 1274513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch RecreateTopSitesAndBlock(); 1275513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1278513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1279513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_EQ(3u + GetPrepopulatePages().size() - 1, q.urls().size()); 1280513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(prepopulate_url, q.urls()[0].url); 1281513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://bbc.com/", q.urls()[1].url.spec()); 1282513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ("http://google.com/", q.urls()[2].url.spec()); 1283513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (GetPrepopulatePages().size() > 1) 1284513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages()[1].url, q.urls()[3].url); 1285513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 12863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 12873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Tests blacklisting and pinning. 12893345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, BlacklistingAndPinnedURLs) { 1290513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURLList prepopulate_urls = GetPrepopulatePages(); 1291513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (prepopulate_urls.size() < 2) 1292513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return; 1293513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1294513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddPinnedURL(prepopulate_urls[0].url, 1); 1295513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch top_sites()->AddBlacklistedURL(prepopulate_urls[1].url); 12963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1297513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch { 1298513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1299513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1300513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_LE(2u, q.urls().size()); 1302513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GURL(), q.urls()[0].url); 1303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(prepopulate_urls[0].url, q.urls()[1].url); 1304513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 13053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 13063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1307513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure prepopulated pages exist. 13083345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(TopSitesTest, AddPrepopulatedPages) { 1309513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TopSitesQuerier q; 1310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.QueryTopSites(top_sites(), true); 1311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages().size(), q.urls().size()); 1312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 0)); 13133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1314513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch MostVisitedURLList pages = q.urls(); 1315513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(AddPrepopulatedPages(&pages)); 13163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(GetPrepopulatePages().size(), pages.size()); 1318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch q.set_urls(pages); 1319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 0)); 1320513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 13213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Makes sure creating top sites before history is created works. 1323513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(TopSitesTest, CreateTopSitesThenHistory) { 1324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->DestroyTopSites(); 1325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->DestroyHistoryService(); 1326513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1327513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Remove the TopSites file. This forces TopSites to wait until history loads 1328513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // before TopSites is considered loaded. 1329513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch file_util::Delete(profile()->GetPath().Append(chrome::kTopSitesFilename), 1330513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch false); 1331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Create TopSites, but not History. 1333513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateTopSites(); 1334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WaitForTopSites(); 1335513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_FALSE(IsTopSitesLoaded()); 1336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1337513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Load history, which should make TopSites finish loading too. 1338513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->CreateHistoryService(false, false); 1339513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile()->BlockUntilTopSitesLoaded(); 1340513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(IsTopSitesLoaded()); 13413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 13423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace history 1344