top_sites_impl_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/message_loop/message_loop.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_db_task.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/history/history_types.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_unittest_base.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/top_sites_cache.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/top_sites_impl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/cancelable_task_tracker.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/codec/jpeg_codec.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace history { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used by WaitForHistory, see it for details. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WaitForHistoryTask : public HistoryDBTask { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForHistoryTask() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool RunOnDBThread(HistoryBackend* backend, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryDatabase* db) OVERRIDE { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoneRunOnMainThread() OVERRIDE { 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WaitForHistoryTask() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WaitForHistoryTask); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Used for querying top sites. Either runs sequentially, or runs a nested 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// nested message loop until the response is complete. The later is used when 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TopSites is queried before it finishes loading. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TopSitesQuerier { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier() 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : weak_ptr_factory_(this), 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) number_of_callbacks_(0), 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_(false) {} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Queries top sites. If |wait| is true a nested message loop is run until the 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // callback is notified. 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void QueryTopSites(TopSitesImpl* top_sites, bool wait) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int start_number_of_callbacks = number_of_callbacks_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites->GetMostVisitedURLs( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&TopSitesQuerier::OnTopSitesAvailable, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (wait && start_number_of_callbacks == number_of_callbacks_) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = true; 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CancelRequest() { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_ptr_factory_.InvalidateWeakPtrs(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_urls(const MostVisitedURLList& urls) { urls_ = urls; } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MostVisitedURLList& urls() const { return urls_; } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int number_of_callbacks() const { return number_of_callbacks_; } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Callback for TopSitesImpl::GetMostVisitedURLs. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnTopSitesAvailable(const history::MostVisitedURLList& data) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) urls_ = data; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) number_of_callbacks_++; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (waiting_) { 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_ = false; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<TopSitesQuerier> weak_ptr_factory_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList urls_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int number_of_callbacks_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool waiting_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TopSitesQuerier); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extracts the data from |t1| into a SkBitmap. This is intended for usage of 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thumbnail data, which is stored as jpgs. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SkBitmap ExtractThumbnail(const base::RefCountedMemory& t1) { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<SkBitmap> image(gfx::JPEGCodec::Decode(t1.front(), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) t1.size())); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return image.get() ? *image : SkBitmap(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if t1 and t2 contain the same data. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ThumbnailsAreEqual(base::RefCountedMemory* t1, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RefCountedMemory* t2) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!t1 || !t2) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (t1->size() != t2->size()) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !memcmp(t1->front(), t2->front(), t1->size()); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TopSitesImplTest : public HistoryUnitTestBase { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TopSitesImplTest() 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_thread_(BrowserThread::DB, &message_loop_) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (CreateHistoryAndTopSites()) { 133bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ASSERT_TRUE(profile_->CreateHistoryService(false, false)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateTopSites(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->BlockUntilTopSitesLoaded(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if history and top sites should be created in SetUp. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CreateHistoryAndTopSites() { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the thumbnail for |url| from TopSites. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap GetThumbnail(const GURL& url) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> data; 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return top_sites()->GetPageThumbnail(url, false, &data) ? 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtractThumbnail(*data.get()) : SkBitmap(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a bitmap of the specified color. Caller takes ownership. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image CreateBitmap(SkColor color) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkBitmap thumbnail; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thumbnail.setConfig(SkBitmap::kARGB_8888_Config, 4, 4); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thumbnail.allocPixels(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thumbnail.eraseColor(color); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Image::CreateFrom1xBitmap(thumbnail); // adds ref. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Forces top sites to load top sites from history, then recreates top sites. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreating top sites makes sure the changes from history are saved and 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded from the db. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RefreshTopSitesAndRecreate() { 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartQueryForMostVisited(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForHistory(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateTopSitesAndBlock(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Blocks the caller until history processes a task. This is useful if you 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need to wait until you know history has processed a task. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForHistory() { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->ScheduleDBTask(new WaitForHistoryTask(), &consumer_); 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Waits for top sites to finish processing a task. This is useful if you need 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to wait until top sites finishes processing a task. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForTopSites() { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->backend_->DoEmptyRequest( 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&TopSitesImplTest::QuitCallback, base::Unretained(this)), 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &cancelable_task_tracker_); 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TopSitesImpl* top_sites() { 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return static_cast<TopSitesImpl*>(profile_->GetTopSites()); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CancelableRequestConsumer* consumer() { return &consumer_; } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile() {return profile_.get();} 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history_service() { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return HistoryServiceFactory::GetForProfile(profile_.get(), 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList GetPrepopulatePages() { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return top_sites()->GetPrepopulatePages(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the TopSitesQuerier contains the prepopulate data starting 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // at |start_index|. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ContainsPrepopulatePages(const TopSitesQuerier& querier, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t start_index) { 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList prepopulate_urls = GetPrepopulatePages(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_LE(start_index + prepopulate_urls.size(), querier.urls().size()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < prepopulate_urls.size(); ++i) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(prepopulate_urls[i].url.spec(), 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.urls()[start_index + i].url.spec()) << " @ index " << 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used for callbacks from history. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EmptyCallback() { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Quit the current message loop when invoked. Useful when running a nested 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // message loop. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QuitCallback() { 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Quit(); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a page to history. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddPageToHistory(const GURL& url) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RedirectList redirects; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirects.push_back(url); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->AddPage( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, base::Time::Now(), static_cast<void*>(this), 0, GURL(), 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirects, content::PAGE_TRANSITION_TYPED, history::SOURCE_BROWSED, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a page to history. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddPageToHistory(const GURL& url, const string16& title) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RedirectList redirects; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirects.push_back(url); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->AddPage( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, base::Time::Now(), static_cast<void*>(this), 0, GURL(), 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirects, content::PAGE_TRANSITION_TYPED, history::SOURCE_BROWSED, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->SetPageTitle(url, title); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a page to history. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddPageToHistory(const GURL& url, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& title, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const history::RedirectList& redirects, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->AddPage( 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, time, static_cast<void*>(this), 0, GURL(), 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) redirects, content::PAGE_TRANSITION_TYPED, history::SOURCE_BROWSED, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->SetPageTitle(url, title); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delets a url. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteURL(const GURL& url) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_service()->DeleteURL(url); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the thumbnail equals the specified bytes. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ThumbnailEqualsBytes(const gfx::Image& image, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RefCountedMemory* bytes) { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedBytes> encoded_image; 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TopSitesImpl::EncodeBitmap(image, &encoded_image); 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ThumbnailsAreEqual(encoded_image.get(), bytes); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreates top sites. This forces top sites to reread from the db. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecreateTopSitesAndBlock() { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate TopSites and wait for it to load. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->CreateTopSites(); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As history already loaded we have to fake this call. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->BlockUntilTopSitesLoaded(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wrappers that allow private TopSites functions to be called from the 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // individual tests without making them all be friends. 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetCanonicalURL(const GURL& url) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return top_sites()->cache_->GetCanonicalURL(url); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetTopSites(const MostVisitedURLList& new_top_sites) { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->SetTopSites(new_top_sites); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartQueryForMostVisited() { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->StartQueryForMostVisited(); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLastNumUrlsChanged(size_t value) { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->last_num_urls_changed_ = value; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t last_num_urls_changed() { return top_sites()->last_num_urls_changed_; } 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta GetUpdateDelay() { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return top_sites()->GetUpdateDelay(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsTopSitesLoaded() { return top_sites()->loaded_; } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool AddPrepopulatedPages(MostVisitedURLList* urls) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return top_sites()->AddPrepopulatedPages(urls); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI message_loop_; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread db_thread_; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To cancel HistoryService tasks. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CancelableRequestConsumer consumer_; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To cancel TopSitesBackend tasks. 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CancelableTaskTracker cancelable_task_tracker_; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TopSitesImplTest); 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; // Class TopSitesImplTest 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper function for appending a URL to a vector of "most visited" URLs, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// using the default values for everything but the URL. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void AppendMostVisitedURL(std::vector<MostVisitedURL>* list, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL mv; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.url = url; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(url); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->push_back(mv); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Same as AppendMostVisitedURL except that it adds a redirect from the first 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// URL to the second. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void AppendMostVisitedURLWithRedirect( 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL>* list, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& redirect_source, const GURL& redirect_dest) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL mv; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.url = redirect_dest; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(redirect_source); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(redirect_dest); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list->push_back(mv); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests GetCanonicalURL. 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, GetCanonicalURL) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have two chains: 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // google.com -> www.google.com 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // news.google.com (no redirects) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL news("http://news.google.com/"); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL source("http://google.com/"); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL dest("http://www.google.com/"); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL> most_visited; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURLWithRedirect(&most_visited, source, dest); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&most_visited, news); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(most_visited); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Random URLs not in the database are returned unchanged. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL result = GetCanonicalURL(GURL("http://fark.com/")); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL("http://fark.com/"), result); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Easy case, there are no redirects and the exact URL is stored. 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = GetCanonicalURL(news); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(news, result); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL in question is the source URL in a redirect list. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = GetCanonicalURL(source); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(dest, result); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL in question is the destination of a redirect. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = GetCanonicalURL(dest); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(dest, result); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests DiffMostVisited. 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, DiffMostVisited) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL stays_the_same("http://staysthesame/"); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gets_added_1("http://getsadded1/"); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gets_added_2("http://getsadded2/"); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gets_deleted_1("http://getsdeleted2/"); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL gets_moved_1("http://getsmoved1/"); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL> old_list; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&old_list, stays_the_same); // 0 (unchanged) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&old_list, gets_deleted_1); // 1 (deleted) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&old_list, gets_moved_1); // 2 (moved to 3) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL> new_list; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&new_list, stays_the_same); // 0 (unchanged) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&new_list, gets_added_1); // 1 (added) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&new_list, gets_added_2); // 2 (added) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&new_list, gets_moved_1); // 3 (moved from 2) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::TopSitesDelta delta; 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) history::TopSitesImpl::DiffMostVisited(old_list, new_list, &delta); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, delta.added.size()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gets_added_1 == delta.added[0].url.url); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, delta.added[0].rank); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gets_added_2 == delta.added[1].url.url); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, delta.added[1].rank); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, delta.deleted.size()); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gets_deleted_1 == delta.deleted[0].url); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, delta.moved.size()); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(gets_moved_1 == delta.moved[0].url.url); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3, delta.moved[0].rank); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests SetPageThumbnail. 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, SetPageThumbnail) { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url1a("http://google.com/"); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url1b("http://www.google.com/"); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url2("http://images.google.com/"); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL invalid_url("chrome://favicon/http://google.com/"); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL> list; 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&list, url2); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL mv; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.url = url1b; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(url1a); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(url1b); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list.push_back(mv); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save our most visited data containing that one site. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(list); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a dummy thumbnail. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image thumbnail(CreateBitmap(SK_ColorWHITE)); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time now = base::Time::Now(); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore low_score(1.0, true, true, now); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore medium_score(0.5, true, true, now); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore high_score(0.0, true, true, now); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setting the thumbnail for invalid pages should fail. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->SetPageThumbnail(invalid_url, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thumbnail, medium_score)); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setting the thumbnail for url2 should succeed, lower scores shouldn't 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replace it, higher scores should. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(url2, thumbnail, medium_score)); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->SetPageThumbnail(url2, thumbnail, low_score)); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(url2, thumbnail, high_score)); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set on the redirect source should succeed. It should be replacable by 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the same score on the redirect destination, which in turn should not 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be replaced by the source again. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(url1a, thumbnail, medium_score)); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(url1b, thumbnail, medium_score)); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->SetPageThumbnail(url1a, thumbnail, medium_score)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure a thumbnail is correctly removed when the page is removed. 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, ThumbnailRemoved) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url("http://google.com/"); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Configure top sites with 'google.com'. 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL> list; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendMostVisitedURL(&list, url); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(list); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a dummy thumbnail. 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image thumbnail(CreateBitmap(SK_ColorRED)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time now = base::Time::Now(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore low_score(1.0, true, true, now); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore medium_score(0.5, true, true, now); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore high_score(0.0, true, true, now); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the thumbnail. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(url, thumbnail, medium_score)); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the thumbnail was actually set. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> result; 481d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(url, false, &result)); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(thumbnail, result.get())); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the thumbnails and make sure we don't get it back. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(MostVisitedURLList()); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 487d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_FALSE(top_sites()->GetPageThumbnail(url, false, &result)); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests GetPageThumbnail. 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, GetPageThumbnail) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList url_list; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url1; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url1.url = GURL("http://asdf.com"); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url1.redirects.push_back(url1.url); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list.push_back(url1); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url2; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.url = GURL("http://gmail.com"); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.redirects.push_back(url2.url); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.redirects.push_back(GURL("http://mail.google.com")); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list.push_back(url2); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(url_list); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a dummy thumbnail. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image thumbnail(CreateBitmap(SK_ColorWHITE)); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore score(0.5, true, true, base::Time::Now()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> result; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(url1.url, thumbnail, score)); 512d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(url1.url, false, &result)); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(GURL("http://gmail.com"), 5151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) thumbnail, score)); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(GURL("http://gmail.com"), 517d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) false, 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result)); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get a thumbnail via a redirect. 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(GURL("http://mail.google.com"), 521d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) false, 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result)); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(GURL("http://mail.google.com"), 5251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) thumbnail, score)); 526d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(url2.url, false, &result)); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(thumbnail, result.get())); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests GetMostVisitedURLs. 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, GetMostVisited) { 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL news("http://news.google.com/"); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google("http://google.com/"); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(news); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(google); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartQueryForMostVisited(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForHistory(); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1, querier.number_of_callbacks()); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 extra prepopulated URLs. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(news, querier.urls()[0].url); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google, querier.urls()[1].url); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure changes done to top sites get mirrored to the db. 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, SaveToDB) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL asdf_url("http://asdf.com"); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 asdf_title(ASCIIToUTF16("ASDF")); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google_url("http://google.com"); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 google_title(ASCIIToUTF16("Google")); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL news_url("http://news.google.com"); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 news_title(ASCIIToUTF16("Google News")); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add asdf_url to history. 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(asdf_url, asdf_title); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make TopSites reread from the db. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartQueryForMostVisited(); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForHistory(); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a thumbnail. 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image tmp_bitmap(CreateBitmap(SK_ColorBLUE)); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(top_sites()->SetPageThumbnail(asdf_url, tmp_bitmap, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore())); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateTopSitesAndBlock(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_url, querier.urls()[0].url); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_title, querier.urls()[0].title); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> read_data; 587d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(asdf_url, false, &read_data)); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(tmp_bitmap, read_data.get())); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url2; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.url = google_url; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.title = google_title; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.redirects.push_back(url2.url); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(url2.url, url2.title); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add new thumbnail at rank 0 and shift the other result to 1. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(top_sites()->SetPageThumbnail(google_url, 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp_bitmap, 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore())); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make TopSites reread from the db. 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_url, querier.urls()[0].url); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_title, querier.urls()[0].title); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google_url, querier.urls()[1].url); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google_title, querier.urls()[1].title); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// More permutations of saving to db. 619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, RealDatabase) { 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL asdf_url("http://asdf.com"); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 asdf_title(ASCIIToUTF16("ASDF")); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google1_url("http://google.com"); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google2_url("http://google.com/redirect"); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google3_url("http://www.google.com"); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 google_title(ASCIIToUTF16("Google")); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL news_url("http://news.google.com"); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 news_title(ASCIIToUTF16("Google News")); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.url = asdf_url; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.title = asdf_title; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.redirects.push_back(url.url); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image asdf_thumbnail(CreateBitmap(SK_ColorRED)); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(top_sites()->SetPageThumbnail( 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) asdf_url, asdf_thumbnail, ThumbnailScore())); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time add_time(base::Time::Now()); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(url.url, url.title, url.redirects, add_time); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_url, querier.urls()[0].url); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_title, querier.urls()[0].title); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> read_data; 652d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(asdf_url, false, &read_data)); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(asdf_thumbnail, read_data.get())); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url2; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.url = google3_url; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.title = google_title; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.redirects.push_back(google1_url); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.redirects.push_back(google2_url); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.redirects.push_back(google3_url); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(google3_url, url2.title, url2.redirects, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_time - base::TimeDelta::FromMinutes(1)); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add google twice so that it becomes the first visited site. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(google3_url, url2.title, url2.redirects, 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_time - base::TimeDelta::FromMinutes(2)); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image google_thumbnail(CreateBitmap(SK_ColorBLUE)); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(top_sites()->SetPageThumbnail( 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2.url, google_thumbnail, ThumbnailScore())); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> read_data; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u + GetPrepopulatePages().size(), querier.urls().size()); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google1_url, querier.urls()[0].url); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google_title, querier.urls()[0].title); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u, querier.urls()[0].redirects.size()); 684d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(google3_url, false, &read_data)); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(google_thumbnail, read_data.get())); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_url, querier.urls()[1].url); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(asdf_title, querier.urls()[1].title); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 2)); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image weewar_bitmap(CreateBitmap(SK_ColorYELLOW)); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time thumbnail_time(base::Time::Now()); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore low_score(1.0, true, true, thumbnail_time); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore medium_score(0.5, true, true, thumbnail_time); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore high_score(0.0, true, true, thumbnail_time); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. Set to weewar. (Writes the thumbnail to the DB.) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(google3_url, 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weewar_bitmap, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) medium_score)); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> read_data; 706d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(google3_url, false, &read_data)); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(weewar_bitmap, read_data.get())); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image green_bitmap(CreateBitmap(SK_ColorGREEN)); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. Set to google - low score. 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->SetPageThumbnail(google3_url, 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) green_bitmap, 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) low_score)); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3. Set to google - high score. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(google1_url, 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) green_bitmap, 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) high_score)); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the thumbnail was updated. 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> read_data; 726d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(top_sites()->GetPageThumbnail(google3_url, false, &read_data)); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ThumbnailEqualsBytes(weewar_bitmap, read_data.get())); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(green_bitmap, read_data.get())); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 732c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, DeleteNotifications) { 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google1_url("http://google.com"); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google2_url("http://google.com/redirect"); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL google3_url("http://www.google.com"); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 google_title(ASCIIToUTF16("Google")); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL news_url("http://news.google.com"); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 news_title(ASCIIToUTF16("Google News")); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(google1_url, google_title); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddPageToHistory(news_url, news_title); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(GetPrepopulatePages().size() + 2, querier.urls().size()); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteURL(news_url); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for history to process the deletion. 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForHistory(); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google_title, querier.urls()[0].title); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now reload. This verifies topsites actually wrote the deletion to disk. 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size(), querier.urls().size()); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(google_title, querier.urls()[0].title); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 1)); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteURL(google1_url); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for history to process the deletion. 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WaitForHistory(); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(GetPrepopulatePages().size(), querier.urls().size()); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 0)); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now reload. This verifies topsites actually wrote the deletion to disk. 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshTopSitesAndRecreate(); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier.QueryTopSites(top_sites(), false); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(GetPrepopulatePages().size(), querier.urls().size()); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier, 0)); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure GetUpdateDelay is updated appropriately. 804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, GetUpdateDelay) { 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLastNumUrlsChanged(0); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(30, GetUpdateDelay().InSeconds()); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList url_list; 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list.resize(20); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL tmp_url(GURL("http://x")); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < url_list.size(); ++i) { 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list[i].url = tmp_url; 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_list[i].redirects.push_back(tmp_url); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(url_list); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(20u, last_num_urls_changed()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLastNumUrlsChanged(0); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(60, GetUpdateDelay().InMinutes()); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLastNumUrlsChanged(3); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(52, GetUpdateDelay().InMinutes()); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetLastNumUrlsChanged(20); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, GetUpdateDelay().InMinutes()); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that callbacks are notified correctly if requested before top sites 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// has loaded. 829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, NotifyCallbacksWhenLoaded) { 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate top sites. It won't be loaded now. 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->CreateTopSites(); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(IsTopSitesLoaded()); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier1; 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier2; 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier3; 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts the queries. 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier1.QueryTopSites(top_sites(), false); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier2.QueryTopSites(top_sites(), false); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier3.QueryTopSites(top_sites(), false); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We shouldn't have gotten a callback. 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier1.number_of_callbacks()); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier2.number_of_callbacks()); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier3.number_of_callbacks()); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for loading to complete. 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->BlockUntilTopSitesLoaded(); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now we should have gotten the callbacks. 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, querier1.number_of_callbacks()); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetPrepopulatePages().size(), querier1.urls().size()); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, querier2.number_of_callbacks()); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetPrepopulatePages().size(), querier2.urls().size()); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, querier3.number_of_callbacks()); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetPrepopulatePages().size(), querier3.urls().size()); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the top sites. 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList pages; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url; 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.url = GURL("http://1.com/"); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.redirects.push_back(url.url); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pages.push_back(url); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.url = GURL("http://2.com/"); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.redirects.push_back(url.url); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pages.push_back(url); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(pages); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate top sites. It won't be loaded now. 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->CreateTopSites(); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(IsTopSitesLoaded()); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier4; 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Query again. 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier4.QueryTopSites(top_sites(), false); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We shouldn't have gotten a callback. 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier4.number_of_callbacks()); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for loading to complete. 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->BlockUntilTopSitesLoaded(); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now we should have gotten the callbacks. 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, querier4.number_of_callbacks()); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u + GetPrepopulatePages().size(), querier4.urls().size()); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://1.com/", querier4.urls()[0].url.spec()); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://2.com/", querier4.urls()[1].url.spec()); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier4, 2)); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the top sites again, this time don't reload. 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.url = GURL("http://3.com/"); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.redirects.push_back(url.url); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pages.push_back(url); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(pages); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Query again. 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier5; 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier5.QueryTopSites(top_sites(), true); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, querier5.number_of_callbacks()); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(3u + GetPrepopulatePages().size(), querier5.urls().size()); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://1.com/", querier5.urls()[0].url.spec()); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://2.com/", querier5.urls()[1].url.spec()); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://3.com/", querier5.urls()[2].url.spec()); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(querier5, 3)); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure canceled requests are not notified. 915c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, CancelingRequestsForTopSites) { 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate top sites. It won't be loaded now. 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->CreateTopSites(); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(IsTopSitesLoaded()); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier1; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier querier2; 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts the queries. 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier1.QueryTopSites(top_sites(), false); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier2.QueryTopSites(top_sites(), false); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We shouldn't have gotten a callback. 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier1.number_of_callbacks()); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier2.number_of_callbacks()); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) querier2.CancelRequest(); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for loading to complete. 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->BlockUntilTopSitesLoaded(); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The first callback should succeed. 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, querier1.number_of_callbacks()); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetPrepopulatePages().size(), querier1.urls().size()); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the canceled callback should not be notified. 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, querier2.number_of_callbacks()); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure temporary thumbnails are copied over correctly. 946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, AddTemporaryThumbnail) { 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL unknown_url("http://news.google.com/"); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL invalid_url("chrome://thumb/http://google.com/"); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url1a("http://google.com/"); 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url1b("http://www.google.com/"); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a dummy thumbnail. 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image thumbnail(CreateBitmap(SK_ColorRED)); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore medium_score(0.5, true, true, base::Time::Now()); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't store thumbnails for Javascript URLs. 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->SetPageThumbnail(invalid_url, 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thumbnail, 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) medium_score)); 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Store thumbnails for unknown (but valid) URLs temporarily - calls 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AddTemporaryThumbnail. 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->SetPageThumbnail(unknown_url, 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) thumbnail, 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) medium_score)); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We shouldn't get the thumnail back though (the url isn't in to sites yet). 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<base::RefCountedMemory> out; 969d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_FALSE(top_sites()->GetPageThumbnail(unknown_url, false, &out)); 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But we should be able to get the temporary page thumbnail score. 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ThumbnailScore out_score; 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->GetTemporaryPageThumbnailScore(unknown_url, 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &out_score)); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(medium_score.Equals(out_score)); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<MostVisitedURL> list; 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL mv; 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.url = unknown_url; 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(mv.url); 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(url1a); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mv.redirects.push_back(url1b); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) list.push_back(mv); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update URLs. This should result in using thumbnail. 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(list); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 988d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(top_sites()->GetPageThumbnail(unknown_url, false, &out)); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ThumbnailEqualsBytes(thumbnail, out.get())); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests variations of blacklisting. 993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, Blacklisting) { 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList pages; 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURL url, url1; 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.url = GURL("http://bbc.com/"); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url.redirects.push_back(url.url); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pages.push_back(url); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url1.url = GURL("http://google.com/"); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url1.redirects.push_back(url1.url); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pages.push_back(url1); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTopSites(pages); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->IsBlacklisted(GURL("http://bbc.com/"))); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Blacklist google.com. 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->AddBlacklistedURL(GURL("http://google.com/")); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL prepopulate_url = GetPrepopulatePages()[0].url; 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->HasBlacklistedItems()); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->IsBlacklisted(GURL("http://google.com/"))); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->IsBlacklisted(GURL("http://bbc.com/"))); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->IsBlacklisted(prepopulate_url)); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the blacklisted site isn't returned in the results. 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier q; 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.QueryTopSites(top_sites(), true); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size(), q.urls().size()); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 1)); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Recreate top sites and make sure blacklisted url was correctly read. 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecreateTopSitesAndBlock(); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier q; 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.QueryTopSites(top_sites(), true); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size(), q.urls().size()); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 1)); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Blacklist one of the prepopulate urls. 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->AddBlacklistedURL(prepopulate_url); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->HasBlacklistedItems()); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the blacklisted prepopulate url isn't returned. 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier q; 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.QueryTopSites(top_sites(), true); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u + GetPrepopulatePages().size() - 1, q.urls().size()); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 1; i < q.urls().size(); ++i) 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(prepopulate_url.spec(), q.urls()[i].url.spec()); 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mark google as no longer blacklisted. 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->RemoveBlacklistedURL(GURL("http://google.com/")); 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(top_sites()->HasBlacklistedItems()); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->IsBlacklisted(GURL("http://google.com/"))); 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure google is returned now. 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier q; 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.QueryTopSites(top_sites(), true); 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u + GetPrepopulatePages().size() - 1, q.urls().size()); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://google.com/", q.urls()[1].url.spec()); 10612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Android has only one prepopulated page which has been blacklisted, so 10622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // only 2 urls are returned. 10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (q.urls().size() > 2) 10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(prepopulate_url.spec(), q.urls()[2].url.spec()); 10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, GetPrepopulatePages().size()); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove all blacklisted sites. 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) top_sites()->ClearBlacklistedURLs(); 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(top_sites()->HasBlacklistedItems()); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier q; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.QueryTopSites(top_sites(), true); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u + GetPrepopulatePages().size(), q.urls().size()); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://bbc.com/", q.urls()[0].url.spec()); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://google.com/", q.urls()[1].url.spec()); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 2)); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure prepopulated pages exist. 1084c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TopSitesImplTest, AddPrepopulatedPages) { 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TopSitesQuerier q; 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.QueryTopSites(top_sites(), true); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetPrepopulatePages().size(), q.urls().size()); 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 0)); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MostVisitedURLList pages = q.urls(); 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(AddPrepopulatedPages(&pages)); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetPrepopulatePages().size(), pages.size()); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) q.set_urls(pages); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(ContainsPrepopulatePages(q, 0)); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace history 1099