Chromium Code Reviews| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/files/file_enumerator.h" | 10 #include "base/files/file_enumerator.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 69 EXPECT_EQ(3u, sql::test::CountTableColumns(db, "favicons")); | 69 EXPECT_EQ(3u, sql::test::CountTableColumns(db, "favicons")); |
| 70 | 70 |
| 71 // [id], [icon_id], [last_updated], [image_data], [width], [height] and | 71 // [id], [icon_id], [last_updated], [image_data], [width], [height] and |
| 72 // [last_requested]. | 72 // [last_requested]. |
| 73 EXPECT_EQ(7u, sql::test::CountTableColumns(db, "favicon_bitmaps")); | 73 EXPECT_EQ(7u, sql::test::CountTableColumns(db, "favicon_bitmaps")); |
| 74 | 74 |
| 75 // [id], [page_url], and [icon_id]. | 75 // [id], [page_url], and [icon_id]. |
| 76 EXPECT_EQ(3u, sql::test::CountTableColumns(db, "icon_mapping")); | 76 EXPECT_EQ(3u, sql::test::CountTableColumns(db, "icon_mapping")); |
| 77 } | 77 } |
| 78 | 78 |
| 79 // Adds a favicon at |icon_url| with |icon_type| with default bitmap data and | |
| 80 // maps |page_url| to |icon_url|. | |
| 81 void AddAndMapFaviconSimple(ThumbnailDatabase* db, | |
| 82 const GURL& page_url, | |
| 83 const GURL& icon_url, | |
| 84 favicon_base::IconType icon_type) { | |
| 85 scoped_refptr<base::RefCountedStaticMemory> data( | |
| 86 new base::RefCountedStaticMemory(kBlob1, sizeof(kBlob1))); | |
| 87 favicon_base::FaviconID favicon_id = | |
| 88 db->AddFavicon(icon_url, icon_type, data, base::Time::Now(), gfx::Size()); | |
| 89 db->AddIconMapping(page_url, favicon_id); | |
| 90 } | |
| 91 | |
| 79 void VerifyDatabaseEmpty(sql::Connection* db) { | 92 void VerifyDatabaseEmpty(sql::Connection* db) { |
| 80 size_t rows = 0; | 93 size_t rows = 0; |
| 81 EXPECT_TRUE(sql::test::CountTableRows(db, "favicons", &rows)); | 94 EXPECT_TRUE(sql::test::CountTableRows(db, "favicons", &rows)); |
| 82 EXPECT_EQ(0u, rows); | 95 EXPECT_EQ(0u, rows); |
| 83 EXPECT_TRUE(sql::test::CountTableRows(db, "favicon_bitmaps", &rows)); | 96 EXPECT_TRUE(sql::test::CountTableRows(db, "favicon_bitmaps", &rows)); |
| 84 EXPECT_EQ(0u, rows); | 97 EXPECT_EQ(0u, rows); |
| 85 EXPECT_TRUE(sql::test::CountTableRows(db, "icon_mapping", &rows)); | 98 EXPECT_TRUE(sql::test::CountTableRows(db, "icon_mapping", &rows)); |
| 86 EXPECT_EQ(0u, rows); | 99 EXPECT_EQ(0u, rows); |
| 87 } | 100 } |
| 88 | 101 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 140 } | 153 } |
| 141 | 154 |
| 142 if (memcmp(favicon_bitmaps[0].bitmap_data->front(), | 155 if (memcmp(favicon_bitmaps[0].bitmap_data->front(), |
| 143 expected_icon_contents, expected_icon_contents_size)) { | 156 expected_icon_contents, expected_icon_contents_size)) { |
| 144 ADD_FAILURE() << "failed to match |expected_icon_contents|"; | 157 ADD_FAILURE() << "failed to match |expected_icon_contents|"; |
| 145 return false; | 158 return false; |
| 146 } | 159 } |
| 147 return true; | 160 return true; |
| 148 } | 161 } |
| 149 | 162 |
| 163 bool CompareIconMappingIconUrl(const IconMapping& a, const IconMapping& b) { | |
| 164 return a.icon_url < b.icon_url; | |
| 165 } | |
| 166 | |
| 167 void SortMappingsByIconUrl(std::vector<IconMapping>* mappings) { | |
| 168 std::sort(mappings->begin(), mappings->end(), &CompareIconMappingIconUrl); | |
| 169 } | |
| 170 | |
| 150 } // namespace | 171 } // namespace |
| 151 | 172 |
| 152 class ThumbnailDatabaseTest : public testing::Test { | 173 class ThumbnailDatabaseTest : public testing::Test { |
| 153 public: | 174 public: |
| 154 ThumbnailDatabaseTest() {} | 175 ThumbnailDatabaseTest() {} |
| 155 ~ThumbnailDatabaseTest() override {} | 176 ~ThumbnailDatabaseTest() override {} |
| 156 | 177 |
| 157 // Initialize a thumbnail database instance from the SQL file at | 178 // Initialize a thumbnail database instance from the SQL file at |
| 158 // |golden_path| in the "History/" subdirectory of test data. | 179 // |golden_path| in the "History/" subdirectory of test data. |
| 159 std::unique_ptr<ThumbnailDatabase> LoadFromGolden(const char* golden_path) { | 180 std::unique_ptr<ThumbnailDatabase> LoadFromGolden(const char* golden_path) { |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 483 icon_mappings.clear(); | 504 icon_mappings.clear(); |
| 484 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings)); | 505 EXPECT_TRUE(db.GetIconMappingsForPageURL(page_url, &icon_mappings)); |
| 485 | 506 |
| 486 EXPECT_EQ(page_url, icon_mappings.front().page_url); | 507 EXPECT_EQ(page_url, icon_mappings.front().page_url); |
| 487 EXPECT_EQ(id3, icon_mappings.front().icon_id); | 508 EXPECT_EQ(id3, icon_mappings.front().icon_id); |
| 488 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, | 509 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, |
| 489 icon_mappings.front().icon_type); | 510 icon_mappings.front().icon_type); |
| 490 EXPECT_EQ(icon_url, icon_mappings.front().icon_url); | 511 EXPECT_EQ(icon_url, icon_mappings.front().icon_url); |
| 491 } | 512 } |
| 492 | 513 |
| 493 // Test result of GetIconMappingsForPageURL when an icon type is passed in. | 514 // Test that when multiple icon types are passed to GetIconMappingsForPageURL() |
| 494 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLWithIconType) { | 515 // that the results are filtered according to the passed in types. |
| 516 TEST_F(ThumbnailDatabaseTest, GetIconMappingsForPageURLWithIconTypes) { | |
| 495 ThumbnailDatabase db(NULL); | 517 ThumbnailDatabase db(NULL); |
| 496 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); | 518 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); |
| 497 db.BeginTransaction(); | 519 db.BeginTransaction(); |
| 498 | 520 |
| 499 GURL url("http://google.com"); | 521 const GURL kPageUrl("http://www.google.com"); |
| 500 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); | 522 AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl1, favicon_base::FAVICON); |
| 501 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 523 AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl2, favicon_base::TOUCH_ICON); |
| 502 base::Time time = base::Time::Now(); | 524 AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl3, favicon_base::TOUCH_ICON); |
| 525 AddAndMapFaviconSimple(&db, kPageUrl, kIconUrl5, | |
| 526 favicon_base::TOUCH_PRECOMPOSED_ICON); | |
| 503 | 527 |
| 504 favicon_base::FaviconID id1 = | 528 // Only the mappings for FAVICON and TOUCH_ICON should be returned. |
| 505 db.AddFavicon(url, favicon_base::FAVICON, favicon, time, gfx::Size()); | |
| 506 EXPECT_NE(0, db.AddIconMapping(url, id1)); | |
| 507 | |
| 508 favicon_base::FaviconID id2 = | |
| 509 db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size()); | |
| 510 EXPECT_NE(0, db.AddIconMapping(url, id2)); | |
| 511 | |
| 512 favicon_base::FaviconID id3 = | |
| 513 db.AddFavicon(url, favicon_base::TOUCH_ICON, favicon, time, gfx::Size()); | |
| 514 EXPECT_NE(0, db.AddIconMapping(url, id3)); | |
| 515 | |
| 516 // Only the mappings for favicons of type TOUCH_ICON should be returned as | |
| 517 // TOUCH_ICON is a larger icon type than FAVICON. | |
| 518 std::vector<IconMapping> icon_mappings; | 529 std::vector<IconMapping> icon_mappings; |
| 519 EXPECT_TRUE(db.GetIconMappingsForPageURL( | 530 EXPECT_TRUE(db.GetIconMappingsForPageURL( |
| 520 url, | 531 kPageUrl, favicon_base::FAVICON | favicon_base::TOUCH_ICON, |
| 521 favicon_base::FAVICON | favicon_base::TOUCH_ICON | | |
| 522 favicon_base::TOUCH_PRECOMPOSED_ICON, | |
| 523 &icon_mappings)); | 532 &icon_mappings)); |
| 533 SortMappingsByIconUrl(&icon_mappings); | |
| 524 | 534 |
| 525 EXPECT_EQ(2u, icon_mappings.size()); | 535 EXPECT_EQ(3u, icon_mappings.size()); |
|
sky
2017/05/12 13:23:03
ASSERT
| |
| 526 if (id2 == icon_mappings[0].icon_id) { | 536 EXPECT_EQ(kIconUrl1, icon_mappings[0].icon_url); |
| 527 EXPECT_EQ(id3, icon_mappings[1].icon_id); | 537 EXPECT_EQ(kIconUrl3, icon_mappings[1].icon_url); |
| 528 } else { | 538 EXPECT_EQ(kIconUrl2, icon_mappings[2].icon_url); |
| 529 EXPECT_EQ(id3, icon_mappings[0].icon_id); | |
| 530 EXPECT_EQ(id2, icon_mappings[1].icon_id); | |
| 531 } | |
| 532 | |
| 533 icon_mappings.clear(); | |
| 534 EXPECT_TRUE(db.GetIconMappingsForPageURL( | |
| 535 url, favicon_base::TOUCH_ICON, &icon_mappings)); | |
| 536 if (id2 == icon_mappings[0].icon_id) { | |
| 537 EXPECT_EQ(id3, icon_mappings[1].icon_id); | |
| 538 } else { | |
| 539 EXPECT_EQ(id3, icon_mappings[0].icon_id); | |
| 540 EXPECT_EQ(id2, icon_mappings[1].icon_id); | |
| 541 } | |
| 542 | |
| 543 icon_mappings.clear(); | |
| 544 EXPECT_TRUE( | |
| 545 db.GetIconMappingsForPageURL(url, favicon_base::FAVICON, &icon_mappings)); | |
| 546 EXPECT_EQ(1u, icon_mappings.size()); | |
| 547 EXPECT_EQ(id1, icon_mappings[0].icon_id); | |
| 548 } | 539 } |
| 549 | 540 |
| 550 TEST_F(ThumbnailDatabaseTest, HasMappingFor) { | 541 TEST_F(ThumbnailDatabaseTest, HasMappingFor) { |
| 551 ThumbnailDatabase db(NULL); | 542 ThumbnailDatabase db(NULL); |
| 552 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); | 543 ASSERT_EQ(sql::INIT_OK, db.Init(file_name_)); |
| 553 db.BeginTransaction(); | 544 db.BeginTransaction(); |
| 554 | 545 |
| 555 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); | 546 std::vector<unsigned char> data(kBlob1, kBlob1 + sizeof(kBlob1)); |
| 556 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); | 547 scoped_refptr<base::RefCountedBytes> favicon(new base::RefCountedBytes(data)); |
| 557 | 548 |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1080 ThumbnailDatabase db(NULL); | 1071 ThumbnailDatabase db(NULL); |
| 1081 ASSERT_EQ(sql::INIT_OK, db.Init(db_path)); | 1072 ASSERT_EQ(sql::INIT_OK, db.Init(db_path)); |
| 1082 | 1073 |
| 1083 // Verify that the resulting schema is correct, whether it | 1074 // Verify that the resulting schema is correct, whether it |
| 1084 // involved razing the file or fixing things in place. | 1075 // involved razing the file or fixing things in place. |
| 1085 VerifyTablesAndColumns(&db.db_); | 1076 VerifyTablesAndColumns(&db.db_); |
| 1086 } | 1077 } |
| 1087 } | 1078 } |
| 1088 | 1079 |
| 1089 } // namespace history | 1080 } // namespace history |
| OLD | NEW |