OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
6 #include <string> | 6 #include <string> |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "chrome/browser/history/thumbnail_database.h" | 25 #include "chrome/browser/history/thumbnail_database.h" |
26 #include "chrome/browser/history/top_sites.h" | 26 #include "chrome/browser/history/top_sites.h" |
27 #include "chrome/common/chrome_notification_types.h" | 27 #include "chrome/common/chrome_notification_types.h" |
28 #include "chrome/common/thumbnail_score.h" | 28 #include "chrome/common/thumbnail_score.h" |
29 #include "chrome/test/base/testing_profile.h" | 29 #include "chrome/test/base/testing_profile.h" |
30 #include "chrome/tools/profiles/thumbnail-inl.h" | 30 #include "chrome/tools/profiles/thumbnail-inl.h" |
31 #include "content/public/test/test_browser_thread.h" | 31 #include "content/public/test/test_browser_thread.h" |
32 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
33 #include "third_party/skia/include/core/SkBitmap.h" | 33 #include "third_party/skia/include/core/SkBitmap.h" |
34 #include "ui/gfx/codec/jpeg_codec.h" | 34 #include "ui/gfx/codec/jpeg_codec.h" |
| 35 #include "ui/gfx/favicon_size.h" |
35 | 36 |
36 using base::Time; | 37 using base::Time; |
37 using base::TimeDelta; | 38 using base::TimeDelta; |
38 using base::TimeTicks; | 39 using base::TimeTicks; |
39 using content::BrowserThread; | 40 using content::BrowserThread; |
40 | 41 |
41 // Filename constants. | 42 // Filename constants. |
42 static const FilePath::CharType kHistoryFile[] = FILE_PATH_LITERAL("History"); | 43 static const FilePath::CharType kHistoryFile[] = FILE_PATH_LITERAL("History"); |
43 static const FilePath::CharType kArchivedHistoryFile[] = | 44 static const FilePath::CharType kArchivedHistoryFile[] = |
44 FILE_PATH_LITERAL("Archived History"); | 45 FILE_PATH_LITERAL("Archived History"); |
45 static const FilePath::CharType kThumbnailFile[] = | 46 static const FilePath::CharType kThumbnailFile[] = |
46 FILE_PATH_LITERAL("Thumbnails"); | 47 FILE_PATH_LITERAL("Thumbnails"); |
47 | 48 |
| 49 static const gfx::Size kFaviconRegularSize = |
| 50 gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize); |
| 51 |
48 // The test must be in the history namespace for the gtest forward declarations | 52 // The test must be in the history namespace for the gtest forward declarations |
49 // to work. It also eliminates a bunch of ugly "history::". | 53 // to work. It also eliminates a bunch of ugly "history::". |
50 namespace history { | 54 namespace history { |
51 | 55 |
52 // ExpireHistoryTest ----------------------------------------------------------- | 56 // ExpireHistoryTest ----------------------------------------------------------- |
53 | 57 |
54 class ExpireHistoryTest : public testing::Test, | 58 class ExpireHistoryTest : public testing::Test, |
55 public BroadcastNotificationDelegate { | 59 public BroadcastNotificationDelegate { |
56 public: | 60 public: |
57 ExpireHistoryTest() | 61 ExpireHistoryTest() |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 | 202 |
199 // Four times for each visit. | 203 // Four times for each visit. |
200 visit_times[3] = Time::Now(); | 204 visit_times[3] = Time::Now(); |
201 visit_times[2] = visit_times[3] - TimeDelta::FromDays(1); | 205 visit_times[2] = visit_times[3] - TimeDelta::FromDays(1); |
202 visit_times[1] = visit_times[3] - TimeDelta::FromDays(2); | 206 visit_times[1] = visit_times[3] - TimeDelta::FromDays(2); |
203 visit_times[0] = visit_times[3] - TimeDelta::FromDays(3); | 207 visit_times[0] = visit_times[3] - TimeDelta::FromDays(3); |
204 | 208 |
205 // Two favicons. The first two URLs will share the same one, while the last | 209 // Two favicons. The first two URLs will share the same one, while the last |
206 // one will have a unique favicon. | 210 // one will have a unique favicon. |
207 FaviconID favicon1 = thumb_db_->AddFavicon(GURL("http://favicon/url1"), | 211 FaviconID favicon1 = thumb_db_->AddFavicon(GURL("http://favicon/url1"), |
208 FAVICON); | 212 kFaviconRegularSize, FAVICON); |
209 FaviconID favicon2 = thumb_db_->AddFavicon(GURL("http://favicon/url2"), | 213 FaviconID favicon2 = thumb_db_->AddFavicon(GURL("http://favicon/url2"), |
210 FAVICON); | 214 kFaviconRegularSize, FAVICON); |
211 | 215 |
212 // Three URLs. | 216 // Three URLs. |
213 URLRow url_row1(GURL("http://www.google.com/1")); | 217 URLRow url_row1(GURL("http://www.google.com/1")); |
214 url_row1.set_last_visit(visit_times[0]); | 218 url_row1.set_last_visit(visit_times[0]); |
215 url_row1.set_visit_count(1); | 219 url_row1.set_visit_count(1); |
216 url_ids[0] = main_db_->AddURL(url_row1); | 220 url_ids[0] = main_db_->AddURL(url_row1); |
217 thumb_db_->AddIconMapping(url_row1.url(), favicon1); | 221 thumb_db_->AddIconMapping(url_row1.url(), favicon1); |
218 | 222 |
219 URLRow url_row2(GURL("http://www.google.com/2")); | 223 URLRow url_row2(GURL("http://www.google.com/2")); |
220 url_row2.set_last_visit(visit_times[2]); | 224 url_row2.set_last_visit(visit_times[2]); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 main_db_->AddVisit(&visit_row4, SOURCE_FIREFOX_IMPORTED); | 320 main_db_->AddVisit(&visit_row4, SOURCE_FIREFOX_IMPORTED); |
317 } | 321 } |
318 | 322 |
319 bool ExpireHistoryTest::HasFavicon(FaviconID favicon_id) { | 323 bool ExpireHistoryTest::HasFavicon(FaviconID favicon_id) { |
320 if (!thumb_db_.get() || favicon_id == 0) | 324 if (!thumb_db_.get() || favicon_id == 0) |
321 return false; | 325 return false; |
322 Time last_updated; | 326 Time last_updated; |
323 std::vector<unsigned char> icon_data_unused; | 327 std::vector<unsigned char> icon_data_unused; |
324 GURL icon_url; | 328 GURL icon_url; |
325 return thumb_db_->GetFavicon(favicon_id, &last_updated, &icon_data_unused, | 329 return thumb_db_->GetFavicon(favicon_id, &last_updated, &icon_data_unused, |
326 &icon_url, NULL); | 330 &icon_url, NULL, NULL); |
327 } | 331 } |
328 | 332 |
329 FaviconID ExpireHistoryTest::GetFavicon(const GURL& page_url, | 333 FaviconID ExpireHistoryTest::GetFavicon(const GURL& page_url, |
330 IconType icon_type) { | 334 IconType icon_type) { |
331 IconMapping icon_mapping; | 335 std::vector<IconMapping> icon_mappings; |
332 thumb_db_->GetIconMappingForPageURL(page_url, icon_type, &icon_mapping); | 336 thumb_db_->GetIconMappingsForPageURL(page_url, icon_type, &icon_mappings); |
333 return icon_mapping.icon_id; | 337 |
| 338 if (icon_mappings.empty()) |
| 339 return 0; |
| 340 |
| 341 return icon_mappings[0].icon_id; |
334 } | 342 } |
335 | 343 |
336 bool ExpireHistoryTest::HasThumbnail(URLID url_id) { | 344 bool ExpireHistoryTest::HasThumbnail(URLID url_id) { |
337 // TODO(sky): fix this. This test isn't really valid for TopSites. For | 345 // TODO(sky): fix this. This test isn't really valid for TopSites. For |
338 // TopSites we should be checking URL always, not the id. | 346 // TopSites we should be checking URL always, not the id. |
339 URLRow info; | 347 URLRow info; |
340 if (!main_db_->GetURLRow(url_id, &info)) | 348 if (!main_db_->GetURLRow(url_id, &info)) |
341 return false; | 349 return false; |
342 GURL url = info.url(); | 350 GURL url = info.url(); |
343 scoped_refptr<base::RefCountedMemory> data; | 351 scoped_refptr<base::RefCountedMemory> data; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 EXPECT_NE(notifications_[i].first, | 405 EXPECT_NE(notifications_[i].first, |
398 chrome::NOTIFICATION_HISTORY_URLS_MODIFIED); | 406 chrome::NOTIFICATION_HISTORY_URLS_MODIFIED); |
399 } | 407 } |
400 } | 408 } |
401 EXPECT_TRUE(found_delete_notification); | 409 EXPECT_TRUE(found_delete_notification); |
402 } | 410 } |
403 | 411 |
404 TEST_F(ExpireHistoryTest, DeleteFaviconsIfPossible) { | 412 TEST_F(ExpireHistoryTest, DeleteFaviconsIfPossible) { |
405 // Add a favicon record. | 413 // Add a favicon record. |
406 const GURL favicon_url("http://www.google.com/favicon.ico"); | 414 const GURL favicon_url("http://www.google.com/favicon.ico"); |
407 FaviconID icon_id = thumb_db_->AddFavicon(favicon_url, FAVICON); | 415 FaviconID icon_id = thumb_db_->AddFavicon(favicon_url, kFaviconRegularSize, |
| 416 FAVICON); |
408 EXPECT_TRUE(icon_id); | 417 EXPECT_TRUE(icon_id); |
409 EXPECT_TRUE(HasFavicon(icon_id)); | 418 EXPECT_TRUE(HasFavicon(icon_id)); |
410 | 419 |
411 // The favicon should be deletable with no users. | 420 // The favicon should be deletable with no users. |
412 std::set<FaviconID> favicon_set; | 421 std::set<FaviconID> favicon_set; |
413 favicon_set.insert(icon_id); | 422 favicon_set.insert(icon_id); |
414 expirer_.DeleteFaviconsIfPossible(favicon_set); | 423 expirer_.DeleteFaviconsIfPossible(favicon_set); |
415 EXPECT_FALSE(HasFavicon(icon_id)); | 424 EXPECT_FALSE(HasFavicon(icon_id)); |
416 | 425 |
417 // Add back the favicon. | 426 // Add back the favicon. |
418 icon_id = thumb_db_->AddFavicon(favicon_url, TOUCH_ICON); | 427 icon_id = thumb_db_->AddFavicon(favicon_url, kFaviconRegularSize, |
| 428 TOUCH_ICON); |
419 EXPECT_TRUE(icon_id); | 429 EXPECT_TRUE(icon_id); |
420 EXPECT_TRUE(HasFavicon(icon_id)); | 430 EXPECT_TRUE(HasFavicon(icon_id)); |
421 | 431 |
422 // Add a page that references the favicon. | 432 // Add a page that references the favicon. |
423 URLRow row(GURL("http://www.google.com/2")); | 433 URLRow row(GURL("http://www.google.com/2")); |
424 row.set_visit_count(1); | 434 row.set_visit_count(1); |
425 EXPECT_TRUE(main_db_->AddURL(row)); | 435 EXPECT_TRUE(main_db_->AddURL(row)); |
426 thumb_db_->AddIconMapping(row.url(), icon_id); | 436 thumb_db_->AddIconMapping(row.url(), icon_id); |
427 | 437 |
428 // Favicon should not be deletable. | 438 // Favicon should not be deletable. |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 main_db_->GetVisitsForURL(url_id, &archived_visits); | 966 main_db_->GetVisitsForURL(url_id, &archived_visits); |
957 EXPECT_EQ(0U, archived_visits.size()); | 967 EXPECT_EQ(0U, archived_visits.size()); |
958 } | 968 } |
959 | 969 |
960 // TODO(brettw) add some visits with no URL to make sure everything is updated | 970 // TODO(brettw) add some visits with no URL to make sure everything is updated |
961 // properly. Have the visits also refer to nonexistent FTS rows. | 971 // properly. Have the visits also refer to nonexistent FTS rows. |
962 // | 972 // |
963 // Maybe also refer to invalid favicons. | 973 // Maybe also refer to invalid favicons. |
964 | 974 |
965 } // namespace history | 975 } // namespace history |
OLD | NEW |