Index: chrome/browser/history/thumbnail_database_unittest.cc |
diff --git a/chrome/browser/history/thumbnail_database_unittest.cc b/chrome/browser/history/thumbnail_database_unittest.cc |
index 369486eb5946b3d7c5d053d817f7615eff0e7b4d..8347badaf919678ab46ca8d69b7759da3bb0effe 100644 |
--- a/chrome/browser/history/thumbnail_database_unittest.cc |
+++ b/chrome/browser/history/thumbnail_database_unittest.cc |
@@ -14,7 +14,6 @@ |
#include "base/scoped_temp_dir.h" |
#include "chrome/browser/history/thumbnail_database.h" |
#include "chrome/common/chrome_paths.h" |
-#include "chrome/browser/history/top_sites.h" |
#include "chrome/common/thumbnail_score.h" |
#include "chrome/tools/profiles/thumbnail-inl.h" |
#include "gfx/codec/jpeg_codec.h" |
@@ -71,297 +70,6 @@ class ThumbnailDatabaseTest : public testing::Test { |
FilePath new_file_name_; |
}; |
-TEST_F(ThumbnailDatabaseTest, AddDelete) { |
- if (history::TopSites::IsEnabled()) |
- return; // TopSitesTest replaces this. |
- |
- ThumbnailDatabase db; |
- ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |
- |
- // Add one page & verify it got added. |
- ThumbnailScore boring(kBoringness, true, true); |
- Time time; |
- GURL gurl; |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, boring, time); |
- ThumbnailScore score_output; |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_output)); |
- ASSERT_TRUE(boring.Equals(score_output)); |
- |
- // Verify a random page is not found. |
- int64 page2 = 5678; |
- std::vector<unsigned char> jpeg_data; |
- EXPECT_FALSE(db.GetPageThumbnail(page2, &jpeg_data)); |
- EXPECT_FALSE(db.ThumbnailScoreForId(page2, &score_output)); |
- |
- // Add another page with a better boringness & verify it got added. |
- ThumbnailScore better_boringness(kBetterBoringness, true, true); |
- |
- db.SetPageThumbnail(gurl, page2, *google_bitmap_, better_boringness, time); |
- ASSERT_TRUE(db.ThumbnailScoreForId(page2, &score_output)); |
- ASSERT_TRUE(better_boringness.Equals(score_output)); |
- |
- // Delete the thumbnail for the second page. |
- ThumbnailScore worse_boringness(kWorseBoringness, true, true); |
- db.SetPageThumbnail(gurl, page2, SkBitmap(), worse_boringness, time); |
- ASSERT_FALSE(db.GetPageThumbnail(page2, &jpeg_data)); |
- ASSERT_FALSE(db.ThumbnailScoreForId(page2, &score_output)); |
- |
- // Delete the first thumbnail using the explicit delete API. |
- ASSERT_TRUE(db.DeleteThumbnail(kPage1)); |
- |
- // Make sure it is gone |
- ASSERT_FALSE(db.ThumbnailScoreForId(kPage1, &score_output)); |
- ASSERT_FALSE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_FALSE(db.ThumbnailScoreForId(page2, &score_output)); |
- ASSERT_FALSE(db.GetPageThumbnail(page2, &jpeg_data)); |
-} |
- |
-TEST_F(ThumbnailDatabaseTest, UseLessBoringThumbnails) { |
- if (history::TopSites::IsEnabled()) |
- return; // TopSitesTest replaces this. |
- |
- ThumbnailDatabase db; |
- Time now = Time::Now(); |
- ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |
- |
- // Add one page & verify it got added. |
- ThumbnailScore boring(kBoringness, true, true); |
- |
- Time time; |
- GURL gurl; |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, boring, time); |
- std::vector<unsigned char> jpeg_data; |
- ThumbnailScore score_out; |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring.Equals(score_out)); |
- |
- // Attempt to update the first page entry with a thumbnail that |
- // is more boring and verify that it doesn't change. |
- ThumbnailScore more_boring(kWorseBoringness, true, true); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, more_boring, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring.Equals(score_out)); |
- |
- // Attempt to update the first page entry with a thumbnail that |
- // is less boring and verify that we update it. |
- ThumbnailScore less_boring(kBetterBoringness, true, true); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, less_boring, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(less_boring.Equals(score_out)); |
-} |
- |
-TEST_F(ThumbnailDatabaseTest, UseAtTopThumbnails) { |
- if (history::TopSites::IsEnabled()) |
- return; // TopSitesTest replaces this. |
- |
- ThumbnailDatabase db; |
- Time now = Time::Now(); |
- ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |
- |
- // Add one page & verify it got added. Note that it doesn't have |
- // |good_clipping| and isn't |at_top|. |
- ThumbnailScore boring_and_bad(kBoringness, false, false); |
- |
- Time time; |
- GURL gurl; |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, boring_and_bad, time); |
- std::vector<unsigned char> jpeg_data; |
- ThumbnailScore score_out; |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring_and_bad.Equals(score_out)); |
- |
- // A thumbnail that's at the top of the page should replace |
- // thumbnails that are in the middle, for the same boringness. |
- ThumbnailScore boring_but_better(kBoringness, false, true); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, boring_but_better, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring_but_better.Equals(score_out)); |
- |
- // The only case where we should replace a thumbnail at the top with |
- // a thumbnail in the middle/bottom is when the current thumbnail is |
- // weirdly stretched and the incoming thumbnail isn't. |
- ThumbnailScore better_boring_bad_framing(kBetterBoringness, false, false); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, better_boring_bad_framing, |
- time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring_but_better.Equals(score_out)); |
- |
- ThumbnailScore boring_good_clipping(kBoringness, true, false); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, boring_good_clipping, |
- time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring_good_clipping.Equals(score_out)); |
- |
- // Now that we have a non-stretched, middle of the page thumbnail, |
- // we shouldn't be able to replace it with: |
- |
- // 1) A stretched thumbnail in the middle of the page |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, |
- ThumbnailScore(kBetterBoringness, false, false, now), |
- time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring_good_clipping.Equals(score_out)); |
- |
- // 2) A stretched thumbnail at the top of the page |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, |
- ThumbnailScore(kBetterBoringness, false, true, now), |
- time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(boring_good_clipping.Equals(score_out)); |
- |
- // But it should be replaced by a thumbnail that's clipped properly |
- // and is at the top |
- ThumbnailScore best_score(kBetterBoringness, true, true); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, best_score, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(best_score.Equals(score_out)); |
-} |
- |
-TEST_F(ThumbnailDatabaseTest, ThumbnailTimeDegradation) { |
- if (history::TopSites::IsEnabled()) |
- return; // TopSitesTest replaces this. |
- |
- ThumbnailDatabase db; |
- const Time kNow = Time::Now(); |
- const Time kThreeHoursAgo = kNow - TimeDelta::FromHours(4); |
- const Time kFiveHoursAgo = kNow - TimeDelta::FromHours(6); |
- const double kBaseBoringness = 0.305; |
- const double kWorseBoringness = 0.345; |
- |
- ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |
- |
- // add one page & verify it got added. |
- ThumbnailScore base_boringness(kBaseBoringness, true, true, kFiveHoursAgo); |
- |
- Time time; |
- GURL gurl; |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, base_boringness, time); |
- std::vector<unsigned char> jpeg_data; |
- ThumbnailScore score_out; |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(base_boringness.Equals(score_out)); |
- |
- // Try to add a different thumbnail with a worse score an hour later |
- // (but not enough to trip the boringness degradation threshold). |
- ThumbnailScore hour_later(kWorseBoringness, true, true, kThreeHoursAgo); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, hour_later, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(base_boringness.Equals(score_out)); |
- |
- // After a full five hours, things should have degraded enough |
- // that we'll allow the same thumbnail with the same (worse) |
- // boringness that we previous rejected. |
- ThumbnailScore five_hours_later(kWorseBoringness, true, true, kNow); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, five_hours_later, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(five_hours_later.Equals(score_out)); |
-} |
- |
-TEST_F(ThumbnailDatabaseTest, NeverAcceptTotallyBoringThumbnail) { |
- // We enforce a maximum boringness score: even in cases where we |
- // should replace a thumbnail with another because of reasons other |
- // than straight up boringness score, still reject because the |
- // thumbnail is totally boring. |
- if (history::TopSites::IsEnabled()) |
- return; // TopSitesTest replaces this. |
- |
- ThumbnailDatabase db; |
- Time now = Time::Now(); |
- ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |
- |
- std::vector<unsigned char> jpeg_data; |
- ThumbnailScore score_out; |
- const double kBaseBoringness = 0.50; |
- const Time kNow = Time::Now(); |
- const int kSizeOfTable = 4; |
- struct { |
- bool good_scaling; |
- bool at_top; |
- } const heiarchy_table[] = { |
- {false, false}, |
- {false, true}, |
- {true, false}, |
- {true, true} |
- }; |
- |
- Time time; |
- GURL gurl; |
- |
- // Test that for each entry type, all entry types that are better |
- // than it still will reject thumbnails which are totally boring. |
- for (int i = 0; i < kSizeOfTable; ++i) { |
- ThumbnailScore base(kBaseBoringness, |
- heiarchy_table[i].good_scaling, |
- heiarchy_table[i].at_top, |
- kNow); |
- |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, base, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(base.Equals(score_out)); |
- |
- for (int j = i; j < kSizeOfTable; ++j) { |
- ThumbnailScore shouldnt_replace( |
- kTotallyBoring, heiarchy_table[j].good_scaling, |
- heiarchy_table[j].at_top, kNow); |
- |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, shouldnt_replace, |
- time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(base.Equals(score_out)); |
- } |
- |
- // Clean up for the next iteration |
- ASSERT_TRUE(db.DeleteThumbnail(kPage1)); |
- ASSERT_FALSE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_FALSE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- } |
- |
- // We should never accept a totally boring thumbnail no matter how |
- // much old the current thumbnail is. |
- ThumbnailScore base_boring(kBaseBoringness, true, true, kNow); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, base_boring, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(base_boring.Equals(score_out)); |
- |
- ThumbnailScore totally_boring_in_the_future( |
- kTotallyBoring, true, true, kNow + TimeDelta::FromDays(365)); |
- db.SetPageThumbnail(gurl, kPage1, *google_bitmap_, |
- totally_boring_in_the_future, time); |
- ASSERT_TRUE(db.GetPageThumbnail(kPage1, &jpeg_data)); |
- ASSERT_TRUE(db.ThumbnailScoreForId(kPage1, &score_out)); |
- ASSERT_TRUE(base_boring.Equals(score_out)); |
-} |
- |
-TEST_F(ThumbnailDatabaseTest, NeedsMigrationToTopSites) { |
- if (history::TopSites::IsEnabled()) |
- return; // TopSitesTest replaces this. |
- |
- ThumbnailDatabase db; |
- ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |
- db.BeginTransaction(); |
- EXPECT_TRUE(db.NeedsMigrationToTopSites()); |
- EXPECT_TRUE(db.RenameAndDropThumbnails(file_name_, new_file_name_)); |
- EXPECT_FALSE(db.NeedsMigrationToTopSites()); |
- EXPECT_FALSE(file_util::PathExists(file_name_)); |
- EXPECT_TRUE(file_util::PathExists(new_file_name_)); |
-} |
- |
TEST_F(ThumbnailDatabaseTest, GetFaviconAfterMigrationToTopSites) { |
ThumbnailDatabase db; |
ASSERT_EQ(sql::INIT_OK, db.Init(file_name_, NULL)); |