OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/files/file_path.h" | 5 #include "base/files/file_path.h" |
6 #include "base/files/scoped_temp_dir.h" | 6 #include "base/files/scoped_temp_dir.h" |
7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/strings/utf_string_conversions.h" |
8 #include "chrome/browser/history/top_sites_database.h" | 9 #include "chrome/browser/history/top_sites_database.h" |
9 #include "chrome/common/chrome_paths.h" | 10 #include "chrome/common/chrome_paths.h" |
10 #include "chrome/tools/profiles/thumbnail-inl.h" | 11 #include "chrome/tools/profiles/thumbnail-inl.h" |
11 #include "sql/connection.h" | 12 #include "sql/connection.h" |
12 #include "sql/statement.h" | 13 #include "sql/statement.h" |
13 #include "sql/test/test_helpers.h" | 14 #include "sql/test/test_helpers.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
(...skipping 21 matching lines...) Expand all Loading... |
39 EXPECT_EQ(2u, sql::test::CountSQLTables(db)); | 40 EXPECT_EQ(2u, sql::test::CountSQLTables(db)); |
40 | 41 |
41 // Implicit index on [meta], index on [thumbnails]. | 42 // Implicit index on [meta], index on [thumbnails]. |
42 EXPECT_EQ(2u, sql::test::CountSQLIndices(db)); | 43 EXPECT_EQ(2u, sql::test::CountSQLIndices(db)); |
43 | 44 |
44 // [key] and [value]. | 45 // [key] and [value]. |
45 EXPECT_EQ(2u, sql::test::CountTableColumns(db, "meta")); | 46 EXPECT_EQ(2u, sql::test::CountTableColumns(db, "meta")); |
46 | 47 |
47 // [url], [url_rank], [title], [thumbnail], [redirects], | 48 // [url], [url_rank], [title], [thumbnail], [redirects], |
48 // [boring_score], [good_clipping], [at_top], [last_updated], and | 49 // [boring_score], [good_clipping], [at_top], [last_updated], and |
49 // [load_completed]. | 50 // [load_completed], [last_forced] |
50 EXPECT_EQ(10u, sql::test::CountTableColumns(db, "thumbnails")); | 51 EXPECT_EQ(11u, sql::test::CountTableColumns(db, "thumbnails")); |
51 } | 52 } |
52 | 53 |
53 } // namespace | 54 } // namespace |
54 | 55 |
55 namespace history { | 56 namespace history { |
56 | 57 |
57 class TopSitesDatabaseTest : public testing::Test { | 58 class TopSitesDatabaseTest : public testing::Test { |
58 protected: | 59 protected: |
59 virtual void SetUp() { | 60 virtual void SetUp() { |
60 // Get a temporary directory for the test DB files. | 61 // Get a temporary directory for the test DB files. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 thumbnails[urls[0].url].thumbnail->size()); | 114 thumbnails[urls[0].url].thumbnail->size()); |
114 EXPECT_TRUE(!memcmp(thumbnails[urls[0].url].thumbnail->front(), | 115 EXPECT_TRUE(!memcmp(thumbnails[urls[0].url].thumbnail->front(), |
115 kGoogleThumbnail, sizeof(kGoogleThumbnail) - 1)); | 116 kGoogleThumbnail, sizeof(kGoogleThumbnail) - 1)); |
116 | 117 |
117 ASSERT_TRUE(db.RemoveURL(urls[1])); | 118 ASSERT_TRUE(db.RemoveURL(urls[1])); |
118 db.GetPageThumbnails(&urls, &thumbnails); | 119 db.GetPageThumbnails(&urls, &thumbnails); |
119 ASSERT_EQ(2u, urls.size()); | 120 ASSERT_EQ(2u, urls.size()); |
120 ASSERT_EQ(2u, thumbnails.size()); | 121 ASSERT_EQ(2u, thumbnails.size()); |
121 } | 122 } |
122 | 123 |
| 124 TEST_F(TopSitesDatabaseTest, Version3) { |
| 125 ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v3.sql")); |
| 126 |
| 127 TopSitesDatabase db; |
| 128 ASSERT_TRUE(db.Init(file_name_)); |
| 129 |
| 130 VerifyTablesAndColumns(db.db_.get()); |
| 131 |
| 132 // Basic operational check. |
| 133 MostVisitedURLList urls; |
| 134 std::map<GURL, Images> thumbnails; |
| 135 db.GetPageThumbnails(&urls, &thumbnails); |
| 136 ASSERT_EQ(3u, urls.size()); |
| 137 ASSERT_EQ(3u, thumbnails.size()); |
| 138 EXPECT_EQ(kUrl, urls[0].url); // [0] because of url_rank. |
| 139 // kGoogleThumbnail includes nul terminator. |
| 140 ASSERT_EQ(sizeof(kGoogleThumbnail) - 1, |
| 141 thumbnails[urls[0].url].thumbnail->size()); |
| 142 EXPECT_TRUE(!memcmp(thumbnails[urls[0].url].thumbnail->front(), |
| 143 kGoogleThumbnail, sizeof(kGoogleThumbnail) - 1)); |
| 144 |
| 145 ASSERT_TRUE(db.RemoveURL(urls[1])); |
| 146 db.GetPageThumbnails(&urls, &thumbnails); |
| 147 ASSERT_EQ(2u, urls.size()); |
| 148 ASSERT_EQ(2u, thumbnails.size()); |
| 149 } |
| 150 |
| 151 TEST_F(TopSitesDatabaseTest, AddRemoveEditThumbnails) { |
| 152 ASSERT_TRUE(CreateDatabaseFromSQL(file_name_, "TopSites.v3.sql")); |
| 153 |
| 154 TopSitesDatabase db; |
| 155 ASSERT_TRUE(db.Init(file_name_)); |
| 156 |
| 157 // Add a new URL, not forced, rank = 1. |
| 158 GURL mapsUrl = GURL("http://maps.google.com/"); |
| 159 MostVisitedURL url1(mapsUrl, ASCIIToUTF16("Google Maps")); |
| 160 db.SetPageThumbnail(url1, 1, Images()); |
| 161 |
| 162 MostVisitedURLList urls; |
| 163 std::map<GURL, Images> thumbnails; |
| 164 db.GetPageThumbnails(&urls, &thumbnails); |
| 165 ASSERT_EQ(4u, urls.size()); |
| 166 ASSERT_EQ(4u, thumbnails.size()); |
| 167 EXPECT_EQ(kUrl, urls[0].url); |
| 168 EXPECT_EQ(mapsUrl, urls[1].url); |
| 169 |
| 170 // Add a new URL, forced. |
| 171 GURL driveUrl = GURL("http://drive.google.com/"); |
| 172 MostVisitedURL url2(driveUrl, ASCIIToUTF16("Google Drive")); |
| 173 url2.last_forced_time = base::Time::FromJsTime(789714000000); // 10/1/1995 |
| 174 db.SetPageThumbnail(url2, TopSitesDatabase::kRankOfForcedURL, Images()); |
| 175 |
| 176 db.GetPageThumbnails(&urls, &thumbnails); |
| 177 ASSERT_EQ(5u, urls.size()); |
| 178 ASSERT_EQ(5u, thumbnails.size()); |
| 179 EXPECT_EQ(driveUrl, urls[0].url); // Forced URLs always appear first. |
| 180 EXPECT_EQ(kUrl, urls[1].url); |
| 181 EXPECT_EQ(mapsUrl, urls[2].url); |
| 182 |
| 183 // Add a new URL, forced (earlier). |
| 184 GURL plusUrl = GURL("http://plus.google.com/"); |
| 185 MostVisitedURL url3(plusUrl, ASCIIToUTF16("Google Plus")); |
| 186 url3.last_forced_time = base::Time::FromJsTime(787035600000); // 10/12/1994 |
| 187 db.SetPageThumbnail(url3, TopSitesDatabase::kRankOfForcedURL, Images()); |
| 188 |
| 189 db.GetPageThumbnails(&urls, &thumbnails); |
| 190 ASSERT_EQ(6u, urls.size()); |
| 191 ASSERT_EQ(6u, thumbnails.size()); |
| 192 EXPECT_EQ(plusUrl, urls[0].url); // New forced URL should appear first. |
| 193 EXPECT_EQ(driveUrl, urls[1].url); |
| 194 EXPECT_EQ(kUrl, urls[2].url); |
| 195 EXPECT_EQ(mapsUrl, urls[3].url); |
| 196 |
| 197 // Change the last_forced_time of a forced URL. |
| 198 url3.last_forced_time = base::Time::FromJsTime(792392400000); // 10/2/1995 |
| 199 db.SetPageThumbnail(url3, TopSitesDatabase::kRankOfForcedURL, Images()); |
| 200 |
| 201 db.GetPageThumbnails(&urls, &thumbnails); |
| 202 ASSERT_EQ(6u, urls.size()); |
| 203 ASSERT_EQ(6u, thumbnails.size()); |
| 204 EXPECT_EQ(driveUrl, urls[0].url); |
| 205 EXPECT_EQ(plusUrl, urls[1].url); // Forced URL should have moved second. |
| 206 EXPECT_EQ(kUrl, urls[2].url); |
| 207 EXPECT_EQ(mapsUrl, urls[3].url); |
| 208 |
| 209 // Change a non-forced URL to forced using UpdatePageRank. |
| 210 url1.last_forced_time = base::Time::FromJsTime(792219600000); // 8/2/1995 |
| 211 db.UpdatePageRank(url1, TopSitesDatabase::kRankOfForcedURL); |
| 212 |
| 213 db.GetPageThumbnails(&urls, &thumbnails); |
| 214 ASSERT_EQ(6u, urls.size()); |
| 215 ASSERT_EQ(6u, thumbnails.size()); |
| 216 EXPECT_EQ(driveUrl, urls[0].url); |
| 217 EXPECT_EQ(mapsUrl, urls[1].url); // Maps moves to second forced URL. |
| 218 EXPECT_EQ(plusUrl, urls[2].url); |
| 219 EXPECT_EQ(kUrl, urls[3].url); |
| 220 |
| 221 // Change a forced URL to non-forced using SetPageThumbnail. |
| 222 db.SetPageThumbnail(url3, 1, Images()); |
| 223 |
| 224 db.GetPageThumbnails(&urls, &thumbnails); |
| 225 ASSERT_EQ(6u, urls.size()); |
| 226 ASSERT_EQ(6u, thumbnails.size()); |
| 227 EXPECT_EQ(driveUrl, urls[0].url); |
| 228 EXPECT_EQ(mapsUrl, urls[1].url); |
| 229 EXPECT_EQ(kUrl, urls[2].url); |
| 230 EXPECT_EQ(plusUrl, urls[3].url); // Plus moves to second non-forced URL. |
| 231 |
| 232 // Change a non-forced URL to earlier non-forced using UpdatePageRank. |
| 233 url3.last_forced_time = base::Time(); |
| 234 db.UpdatePageRank(url3, 0); |
| 235 |
| 236 db.GetPageThumbnails(&urls, &thumbnails); |
| 237 ASSERT_EQ(6u, urls.size()); |
| 238 ASSERT_EQ(6u, thumbnails.size()); |
| 239 EXPECT_EQ(driveUrl, urls[0].url); |
| 240 EXPECT_EQ(mapsUrl, urls[1].url); |
| 241 EXPECT_EQ(plusUrl, urls[2].url); // Plus moves to first non-forced URL. |
| 242 EXPECT_EQ(kUrl, urls[3].url); |
| 243 |
| 244 // Change a non-forced URL to later non-forced using SetPageThumbnail. |
| 245 db.SetPageThumbnail(url3, 2, Images()); |
| 246 |
| 247 db.GetPageThumbnails(&urls, &thumbnails); |
| 248 ASSERT_EQ(6u, urls.size()); |
| 249 ASSERT_EQ(6u, thumbnails.size()); |
| 250 EXPECT_EQ(driveUrl, urls[0].url); |
| 251 EXPECT_EQ(mapsUrl, urls[1].url); |
| 252 EXPECT_EQ(kUrl, urls[2].url); |
| 253 EXPECT_EQ(plusUrl, urls[4].url); // Plus moves to third non-forced URL. |
| 254 |
| 255 // Remove a non-forced URL. |
| 256 db.RemoveURL(url3); |
| 257 |
| 258 db.GetPageThumbnails(&urls, &thumbnails); |
| 259 ASSERT_EQ(5u, urls.size()); |
| 260 ASSERT_EQ(5u, thumbnails.size()); |
| 261 EXPECT_EQ(driveUrl, urls[0].url); |
| 262 EXPECT_EQ(mapsUrl, urls[1].url); |
| 263 EXPECT_EQ(kUrl, urls[2].url); |
| 264 |
| 265 // Remove a forced URL. |
| 266 db.RemoveURL(url2); |
| 267 |
| 268 db.GetPageThumbnails(&urls, &thumbnails); |
| 269 ASSERT_EQ(4u, urls.size()); |
| 270 ASSERT_EQ(4u, thumbnails.size()); |
| 271 EXPECT_EQ(mapsUrl, urls[0].url); |
| 272 EXPECT_EQ(kUrl, urls[1].url); |
| 273 } |
| 274 |
123 } // namespace history | 275 } // namespace history |
OLD | NEW |