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 <set> | 6 #include <set> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1344 one_icon_url_sizes); | 1344 one_icon_url_sizes); |
1345 EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, TOUCH_ICON)); | 1345 EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, TOUCH_ICON)); |
1346 EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, FAVICON)); | 1346 EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, FAVICON)); |
1347 EXPECT_EQ(1u, NumIconMappingsForPageURL(url2, FAVICON)); | 1347 EXPECT_EQ(1u, NumIconMappingsForPageURL(url2, FAVICON)); |
1348 | 1348 |
1349 // Add two favicons. | 1349 // Add two favicons. |
1350 backend_->SetFavicons(url1, FAVICON, favicon_bitmap_data, | 1350 backend_->SetFavicons(url1, FAVICON, favicon_bitmap_data, |
1351 two_icon_url_sizes); | 1351 two_icon_url_sizes); |
1352 EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, TOUCH_ICON)); | 1352 EXPECT_EQ(1u, NumIconMappingsForPageURL(url1, TOUCH_ICON)); |
1353 EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, FAVICON)); | 1353 EXPECT_EQ(2u, NumIconMappingsForPageURL(url1, FAVICON)); |
1354 | |
1355 // A notification should have been broadcasted for each call to SetFavicons(). | |
1356 EXPECT_EQ(6, num_broadcasted_notifications()); | |
1357 } | 1354 } |
1358 | 1355 |
1359 // Test that there is no churn in icon mappings from calling | 1356 // Test that there is no churn in icon mappings from calling |
1360 // SetFavicons() twice with the same |icon_url_sizes| parameter. | 1357 // SetFavicons() twice with the same |icon_url_sizes| parameter. |
1361 TEST_F(HistoryBackendTest, SetFaviconMappingsForPageDuplicates) { | 1358 TEST_F(HistoryBackendTest, SetFaviconMappingsForPageDuplicates) { |
1362 const GURL url("http://www.google.com/"); | 1359 const GURL url("http://www.google.com/"); |
1363 const GURL icon_url("http://www.google.com/icon"); | 1360 const GURL icon_url("http://www.google.com/icon"); |
1364 std::vector<FaviconBitmapData> favicon_bitmap_data; | 1361 std::vector<FaviconBitmapData> favicon_bitmap_data; |
1365 | 1362 |
1366 IconURLSizesMap icon_url_sizes; | 1363 IconURLSizesMap icon_url_sizes; |
1367 icon_url_sizes[icon_url] = GetSizesSmallAndLarge(); | 1364 icon_url_sizes[icon_url] = GetSizesSmallAndLarge(); |
1368 | 1365 |
1369 backend_->SetFavicons(url, FAVICON, favicon_bitmap_data, icon_url_sizes); | 1366 backend_->SetFavicons(url, FAVICON, favicon_bitmap_data, icon_url_sizes); |
1370 | 1367 |
1371 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1372 | |
1373 std::vector<IconMapping> icon_mappings; | 1368 std::vector<IconMapping> icon_mappings; |
1374 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL( | 1369 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL( |
1375 url, FAVICON, &icon_mappings)); | 1370 url, FAVICON, &icon_mappings)); |
1376 EXPECT_EQ(1u, icon_mappings.size()); | 1371 EXPECT_EQ(1u, icon_mappings.size()); |
1377 IconMappingID mapping_id = icon_mappings[0].mapping_id; | 1372 IconMappingID mapping_id = icon_mappings[0].mapping_id; |
1378 | 1373 |
1379 backend_->SetFavicons(url, FAVICON, favicon_bitmap_data, icon_url_sizes); | 1374 backend_->SetFavicons(url, FAVICON, favicon_bitmap_data, icon_url_sizes); |
1380 | 1375 |
1381 icon_mappings.clear(); | 1376 icon_mappings.clear(); |
1382 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL( | 1377 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL( |
1383 url, FAVICON, &icon_mappings)); | 1378 url, FAVICON, &icon_mappings)); |
1384 EXPECT_EQ(1u, icon_mappings.size()); | 1379 EXPECT_EQ(1u, icon_mappings.size()); |
1385 | 1380 |
1386 // The same row in the icon_mapping table should be used for the mapping as | 1381 // The same row in the icon_mapping table should be used for the mapping as |
1387 // before. | 1382 // before. |
1388 EXPECT_EQ(mapping_id, icon_mappings[0].mapping_id); | 1383 EXPECT_EQ(mapping_id, icon_mappings[0].mapping_id); |
1389 | |
1390 // No notification should have been broadcasted as none of the icon mappings, | |
1391 // favicons or favicon bitmaps were added or removed. | |
1392 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1393 } | 1384 } |
1394 | 1385 |
1395 // Test that setting favicons for a page which already has data does the | 1386 // Test that setting favicons for a page which already has data does the |
1396 // right thing. | 1387 // right thing. |
1397 TEST_F(HistoryBackendTest, SetFavicons) { | 1388 TEST_F(HistoryBackendTest, SetFavicons) { |
1398 const GURL page_url("http://www.google.com/"); | 1389 const GURL page_url("http://www.google.com/"); |
1399 std::vector<FaviconBitmapData> favicon_bitmap_data; | 1390 std::vector<FaviconBitmapData> favicon_bitmap_data; |
1400 IconURLSizesMap icon_url_sizes; | 1391 IconURLSizesMap icon_url_sizes; |
1401 | 1392 |
1402 // Set |page_url| as having two favicons each available from the web at two | 1393 // Set |page_url| as having two favicons each available from the web at two |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1460 favicon_bitmaps.clear(); | 1451 favicon_bitmaps.clear(); |
1461 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[1].icon_id, | 1452 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[1].icon_id, |
1462 &favicon_bitmaps)); | 1453 &favicon_bitmaps)); |
1463 | 1454 |
1464 EXPECT_EQ(2u, favicon_bitmaps.size()); | 1455 EXPECT_EQ(2u, favicon_bitmaps.size()); |
1465 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[0].bitmap_data)); | 1456 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[0].bitmap_data)); |
1466 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); | 1457 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); |
1467 EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[1].bitmap_data)); | 1458 EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[1].bitmap_data)); |
1468 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); | 1459 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); |
1469 | 1460 |
1470 // A notification should have been broadcasted for both calls to | |
1471 // SetFavicons(). | |
1472 EXPECT_EQ(2, num_broadcasted_notifications()); | |
1473 | |
1474 // Change the sizes for which the favicon at icon_url1 is available at from | 1461 // Change the sizes for which the favicon at icon_url1 is available at from |
1475 // the web. Verify that all the data remains valid. | 1462 // the web. Verify that all the data remains valid. |
1476 icon_url_sizes[icon_url1] = GetSizesTinySmallAndLarge(); | 1463 icon_url_sizes[icon_url1] = GetSizesTinySmallAndLarge(); |
1477 favicon_bitmap_data.clear(); | 1464 favicon_bitmap_data.clear(); |
1478 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, | 1465 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, |
1479 icon_url_sizes); | 1466 icon_url_sizes); |
1480 | 1467 |
1481 icon_mappings.clear(); | 1468 icon_mappings.clear(); |
1482 EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url, &icon_mappings)); | 1469 EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url, &icon_mappings)); |
1483 EXPECT_EQ(2u, icon_mappings.size()); | 1470 EXPECT_EQ(2u, icon_mappings.size()); |
(...skipping 15 matching lines...) Expand all Loading... |
1499 icon_mappings[1].icon_id, &icon_url, &icon_type, &favicon_sizes)); | 1486 icon_mappings[1].icon_id, &icon_url, &icon_type, &favicon_sizes)); |
1500 EXPECT_EQ(icon_url2, icon_url); | 1487 EXPECT_EQ(icon_url2, icon_url); |
1501 EXPECT_EQ(FAVICON, icon_type); | 1488 EXPECT_EQ(FAVICON, icon_type); |
1502 EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes); | 1489 EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes); |
1503 | 1490 |
1504 favicon_bitmaps.clear(); | 1491 favicon_bitmaps.clear(); |
1505 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconBitmaps( | 1492 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconBitmaps( |
1506 icon_mappings[1].icon_id, &favicon_bitmaps)); | 1493 icon_mappings[1].icon_id, &favicon_bitmaps)); |
1507 EXPECT_EQ(2u, favicon_bitmaps.size()); | 1494 EXPECT_EQ(2u, favicon_bitmaps.size()); |
1508 | 1495 |
1509 // No new notification should have been broadcasted as only the favicon sizes | 1496 // Notifications should have been broadcast for each call to SetFavicons(). |
1510 // changed as a result of the last call to SetFavicons(). | 1497 EXPECT_EQ(3, num_broadcasted_notifications()); |
1511 EXPECT_EQ(2, num_broadcasted_notifications()); | |
1512 } | 1498 } |
1513 | 1499 |
1514 // Test that changing the sizes that a favicon is available at from the web | 1500 // Test that changing the sizes that a favicon is available at from the web |
1515 // deletes stale favicons and favicon bitmaps. | 1501 // deletes stale favicons and favicon bitmaps. |
1516 TEST_F(HistoryBackendTest, SetFaviconsDeleteBitmaps) { | 1502 TEST_F(HistoryBackendTest, SetFaviconsDeleteBitmaps) { |
1517 const GURL page_url("http://www.google.com/"); | 1503 const GURL page_url("http://www.google.com/"); |
1518 const GURL icon_url("http://www.google.com/icon"); | 1504 const GURL icon_url("http://www.google.com/icon"); |
1519 | 1505 |
1520 // Set |page_url| as having one favicon with two different sizes. | 1506 // Set |page_url| as having one favicon with two different sizes. |
1521 IconURLSizesMap icon_url_sizes; | 1507 IconURLSizesMap icon_url_sizes; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1554 EXPECT_EQ(1u, favicon_bitmaps.size()); | 1540 EXPECT_EQ(1u, favicon_bitmaps.size()); |
1555 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); | 1541 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); |
1556 | 1542 |
1557 // Clear |icon_url_sizes|. SetFavicons() should delete the remaining favicon | 1543 // Clear |icon_url_sizes|. SetFavicons() should delete the remaining favicon |
1558 // and its favicon bitmap. | 1544 // and its favicon bitmap. |
1559 icon_url_sizes.clear(); | 1545 icon_url_sizes.clear(); |
1560 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, icon_url_sizes); | 1546 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, icon_url_sizes); |
1561 EXPECT_EQ(0, backend_->thumbnail_db_->GetFaviconIDForFaviconURL( | 1547 EXPECT_EQ(0, backend_->thumbnail_db_->GetFaviconIDForFaviconURL( |
1562 icon_url, FAVICON, NULL)); | 1548 icon_url, FAVICON, NULL)); |
1563 EXPECT_FALSE(backend_->thumbnail_db_->GetFaviconBitmaps(favicon_id, NULL)); | 1549 EXPECT_FALSE(backend_->thumbnail_db_->GetFaviconBitmaps(favicon_id, NULL)); |
1564 | |
1565 // A notification should have been broadcasted for each call to SetFavicons(). | |
1566 EXPECT_EQ(3, num_broadcasted_notifications()); | |
1567 } | 1550 } |
1568 | 1551 |
1569 // Test updating a single favicon bitmap's data via SetFavicons. | 1552 // Test updating a single favicon bitmap's data via SetFavicons. |
1570 TEST_F(HistoryBackendTest, SetFaviconsReplaceBitmapData) { | 1553 TEST_F(HistoryBackendTest, SetFaviconsReplaceBitmapData) { |
1571 | 1554 |
1572 const GURL page_url("http://www.google.com/"); | 1555 const GURL page_url("http://www.google.com/"); |
1573 const GURL icon_url("http://www.google.com/icon"); | 1556 const GURL icon_url("http://www.google.com/icon"); |
1574 IconURLSizesMap icon_url_sizes; | 1557 IconURLSizesMap icon_url_sizes; |
1575 icon_url_sizes[icon_url] = GetSizesSmall(); | 1558 icon_url_sizes[icon_url] = GetSizesSmall(); |
1576 | 1559 |
(...skipping 14 matching lines...) Expand all Loading... |
1591 | 1574 |
1592 FaviconID original_favicon_id = | 1575 FaviconID original_favicon_id = |
1593 backend_->thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, FAVICON, | 1576 backend_->thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, FAVICON, |
1594 NULL); | 1577 NULL); |
1595 EXPECT_NE(0, original_favicon_id); | 1578 EXPECT_NE(0, original_favicon_id); |
1596 FaviconBitmap original_favicon_bitmap; | 1579 FaviconBitmap original_favicon_bitmap; |
1597 EXPECT_TRUE( | 1580 EXPECT_TRUE( |
1598 GetOnlyFaviconBitmap(original_favicon_id, &original_favicon_bitmap)); | 1581 GetOnlyFaviconBitmap(original_favicon_id, &original_favicon_bitmap)); |
1599 EXPECT_TRUE(BitmapDataEqual('a', original_favicon_bitmap.bitmap_data)); | 1582 EXPECT_TRUE(BitmapDataEqual('a', original_favicon_bitmap.bitmap_data)); |
1600 | 1583 |
1601 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1602 | |
1603 // SetFavicons with identical data but a different bitmap. | 1584 // SetFavicons with identical data but a different bitmap. |
1604 std::vector<unsigned char> updated_data; | 1585 std::vector<unsigned char> updated_data; |
1605 updated_data.push_back('b'); | 1586 updated_data.push_back('b'); |
1606 favicon_bitmap_data[0].bitmap_data = | 1587 favicon_bitmap_data[0].bitmap_data = |
1607 base::RefCountedBytes::TakeVector(&updated_data); | 1588 base::RefCountedBytes::TakeVector(&updated_data); |
1608 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, | 1589 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, |
1609 icon_url_sizes); | 1590 icon_url_sizes); |
1610 | 1591 |
1611 FaviconID updated_favicon_id = | 1592 FaviconID updated_favicon_id = |
1612 backend_->thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, FAVICON, | 1593 backend_->thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, FAVICON, |
1613 NULL); | 1594 NULL); |
1614 EXPECT_NE(0, updated_favicon_id); | 1595 EXPECT_NE(0, updated_favicon_id); |
1615 FaviconBitmap updated_favicon_bitmap; | 1596 FaviconBitmap updated_favicon_bitmap; |
1616 EXPECT_TRUE( | 1597 EXPECT_TRUE( |
1617 GetOnlyFaviconBitmap(updated_favicon_id, &updated_favicon_bitmap)); | 1598 GetOnlyFaviconBitmap(updated_favicon_id, &updated_favicon_bitmap)); |
1618 EXPECT_TRUE(BitmapDataEqual('b', updated_favicon_bitmap.bitmap_data)); | 1599 EXPECT_TRUE(BitmapDataEqual('b', updated_favicon_bitmap.bitmap_data)); |
1619 | 1600 |
1620 // There should be no churn in FaviconIDs or FaviconBitmapIds. | 1601 // There should be no churn in FaviconIDs or FaviconBitmapIds. |
1621 EXPECT_EQ(original_favicon_bitmap.icon_id, updated_favicon_bitmap.icon_id); | 1602 EXPECT_EQ(original_favicon_bitmap.icon_id, updated_favicon_bitmap.icon_id); |
1622 EXPECT_EQ(original_favicon_bitmap.bitmap_id, | 1603 EXPECT_EQ(original_favicon_bitmap.bitmap_id, |
1623 updated_favicon_bitmap.bitmap_id); | 1604 updated_favicon_bitmap.bitmap_id); |
1624 | |
1625 // No new notification should have been broadcasted as only the favicon | |
1626 // bitmap data changed. No favicon bitmap was added or removed. | |
1627 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1628 } | 1605 } |
1629 | 1606 |
1630 // Test that if two pages share the same FaviconID, changing the favicon for | 1607 // Test that if two pages share the same FaviconID, changing the favicon for |
1631 // one page does not affect the other. | 1608 // one page does not affect the other. |
1632 TEST_F(HistoryBackendTest, SetFaviconsSameFaviconURLForTwoPages) { | 1609 TEST_F(HistoryBackendTest, SetFaviconsSameFaviconURLForTwoPages) { |
1633 GURL icon_url("http://www.google.com/favicon.ico"); | 1610 GURL icon_url("http://www.google.com/favicon.ico"); |
1634 GURL icon_url_new("http://www.google.com/favicon2.ico"); | 1611 GURL icon_url_new("http://www.google.com/favicon2.ico"); |
1635 GURL page_url1("http://www.google.com"); | 1612 GURL page_url1("http://www.google.com"); |
1636 GURL page_url2("http://www.google.ca"); | 1613 GURL page_url2("http://www.google.ca"); |
1637 | 1614 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1698 page_url2, &icon_mappings)); | 1675 page_url2, &icon_mappings)); |
1699 EXPECT_EQ(1u, icon_mappings.size()); | 1676 EXPECT_EQ(1u, icon_mappings.size()); |
1700 EXPECT_EQ(favicon_id, icon_mappings[0].icon_id); | 1677 EXPECT_EQ(favicon_id, icon_mappings[0].icon_id); |
1701 | 1678 |
1702 favicon_bitmaps.clear(); | 1679 favicon_bitmaps.clear(); |
1703 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconBitmaps(favicon_id, | 1680 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconBitmaps(favicon_id, |
1704 &favicon_bitmaps)); | 1681 &favicon_bitmaps)); |
1705 EXPECT_EQ(2u, favicon_bitmaps.size()); | 1682 EXPECT_EQ(2u, favicon_bitmaps.size()); |
1706 | 1683 |
1707 // A notification should have been broadcast for each call to SetFavicons() | 1684 // A notification should have been broadcast for each call to SetFavicons() |
1708 // and UpdateFaviconMappingsAndFetch(). | 1685 // and each call to UpdateFaviconMappingsAndFetch(). |
1709 EXPECT_EQ(3, num_broadcasted_notifications()); | 1686 EXPECT_EQ(3, num_broadcasted_notifications()); |
1710 } | 1687 } |
1711 | 1688 |
| 1689 // Test that there is no churn from calling UpdateFaviconMappingsAndFetch() |
| 1690 // for an icon URL which is already mapped to the passed in page URL. |
| 1691 TEST_F(HistoryBackendTest, UpdateFaviconMappingsAndFetchNoChange) { |
| 1692 GURL page_url("http://www.google.com"); |
| 1693 GURL icon_url("http://www.google.com/favicon.ico"); |
| 1694 std::vector<FaviconBitmapData> favicon_bitmap_data; |
| 1695 |
| 1696 IconURLSizesMap icon_url_sizes; |
| 1697 icon_url_sizes[icon_url] = GetSizesSmall(); |
| 1698 |
| 1699 backend_->SetFavicons(page_url, FAVICON, favicon_bitmap_data, |
| 1700 icon_url_sizes); |
| 1701 |
| 1702 FaviconID icon_id = backend_->thumbnail_db_->GetFaviconIDForFaviconURL( |
| 1703 icon_url, FAVICON, NULL); |
| 1704 EXPECT_NE(0, icon_id); |
| 1705 EXPECT_EQ(1, num_broadcasted_notifications()); |
| 1706 |
| 1707 std::vector<GURL> icon_urls; |
| 1708 icon_urls.push_back(icon_url); |
| 1709 scoped_refptr<GetFaviconRequest> request(new GetFaviconRequest( |
| 1710 base::Bind(&HistoryBackendTest::OnFaviconResults, |
| 1711 base::Unretained(this)))); |
| 1712 HistoryBackendCancelableRequest cancellable_request; |
| 1713 cancellable_request.MockScheduleOfRequest<GetFaviconRequest>(request); |
| 1714 backend_->UpdateFaviconMappingsAndFetch(request, page_url, icon_urls, |
| 1715 FAVICON, kSmallSize.width(), GetScaleFactors1x2x()); |
| 1716 |
| 1717 EXPECT_EQ(icon_id, backend_->thumbnail_db_->GetFaviconIDForFaviconURL( |
| 1718 icon_url, FAVICON, NULL)); |
| 1719 |
| 1720 // No notification should have been broadcast as no icon mapping, favicon, |
| 1721 // or favicon bitmap was updated, added or removed. |
| 1722 EXPECT_EQ(1, num_broadcasted_notifications()); |
| 1723 } |
| 1724 |
1712 // Test repeatedly calling MergeFavicon(). |page_url| is initially not known | 1725 // Test repeatedly calling MergeFavicon(). |page_url| is initially not known |
1713 // to the database. | 1726 // to the database. |
1714 TEST_F(HistoryBackendTest, MergeFaviconPageURLNotInDB) { | 1727 TEST_F(HistoryBackendTest, MergeFaviconPageURLNotInDB) { |
1715 GURL page_url("http://www.google.com"); | 1728 GURL page_url("http://www.google.com"); |
1716 GURL fake_icon_url = page_url; | 1729 GURL fake_icon_url = page_url; |
1717 | 1730 |
1718 std::vector<unsigned char> data; | 1731 std::vector<unsigned char> data; |
1719 data.push_back('a'); | 1732 data.push_back('a'); |
1720 scoped_refptr<base::RefCountedBytes> bitmap_data( | 1733 scoped_refptr<base::RefCountedBytes> bitmap_data( |
1721 new base::RefCountedBytes(data)); | 1734 new base::RefCountedBytes(data)); |
(...skipping 11 matching lines...) Expand all Loading... |
1733 FaviconSizes favicon_sizes; | 1746 FaviconSizes favicon_sizes; |
1734 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( | 1747 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( |
1735 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); | 1748 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); |
1736 EXPECT_EQ(GetDefaultFaviconSizes(), favicon_sizes); | 1749 EXPECT_EQ(GetDefaultFaviconSizes(), favicon_sizes); |
1737 | 1750 |
1738 FaviconBitmap favicon_bitmap; | 1751 FaviconBitmap favicon_bitmap; |
1739 EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap)); | 1752 EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap)); |
1740 EXPECT_TRUE(BitmapDataEqual('a', favicon_bitmap.bitmap_data)); | 1753 EXPECT_TRUE(BitmapDataEqual('a', favicon_bitmap.bitmap_data)); |
1741 EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size); | 1754 EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size); |
1742 | 1755 |
1743 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1744 | |
1745 data[0] = 'b'; | 1756 data[0] = 'b'; |
1746 bitmap_data = new base::RefCountedBytes(data); | 1757 bitmap_data = new base::RefCountedBytes(data); |
1747 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kSmallSize); | 1758 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kSmallSize); |
1748 | 1759 |
1749 // |page_url| should still have a single favicon bitmap. The bitmap data | 1760 // |page_url| should still have a single favicon bitmap. The bitmap data |
1750 // should be updated. | 1761 // should be updated. |
1751 icon_mappings.clear(); | 1762 icon_mappings.clear(); |
1752 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, | 1763 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, |
1753 &icon_mappings)); | 1764 &icon_mappings)); |
1754 EXPECT_EQ(1u, icon_mappings.size()); | 1765 EXPECT_EQ(1u, icon_mappings.size()); |
1755 EXPECT_EQ(fake_icon_url, icon_mappings[0].icon_url); | 1766 EXPECT_EQ(fake_icon_url, icon_mappings[0].icon_url); |
1756 | 1767 |
1757 favicon_sizes.clear(); | 1768 favicon_sizes.clear(); |
1758 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( | 1769 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( |
1759 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); | 1770 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); |
1760 EXPECT_EQ(GetDefaultFaviconSizes(), favicon_sizes); | 1771 EXPECT_EQ(GetDefaultFaviconSizes(), favicon_sizes); |
1761 | 1772 |
1762 EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap)); | 1773 EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap)); |
1763 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmap.bitmap_data)); | 1774 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmap.bitmap_data)); |
1764 EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size); | 1775 EXPECT_EQ(kSmallSize, favicon_bitmap.pixel_size); |
1765 | 1776 |
1766 // No new notification should have been broadcasted as only the favicon | |
1767 // bitmap data changed. No favicon bitmap was added or removed. | |
1768 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1769 | |
1770 // Merge a large favicon bitmap. | 1777 // Merge a large favicon bitmap. |
1771 data[0] = 'c'; | 1778 data[0] = 'c'; |
1772 bitmap_data = new base::RefCountedBytes(data); | 1779 bitmap_data = new base::RefCountedBytes(data); |
1773 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kLargeSize); | 1780 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kLargeSize); |
1774 | 1781 |
1775 // There should be a second favicon bitmap at |fake_icon_url|. | 1782 // There should be a second favicon bitmap at |fake_icon_url|. |
1776 icon_mappings.clear(); | 1783 icon_mappings.clear(); |
1777 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, | 1784 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, |
1778 &icon_mappings)); | 1785 &icon_mappings)); |
1779 EXPECT_EQ(1u, icon_mappings.size()); | 1786 EXPECT_EQ(1u, icon_mappings.size()); |
1780 EXPECT_EQ(fake_icon_url, icon_mappings[0].icon_url); | 1787 EXPECT_EQ(fake_icon_url, icon_mappings[0].icon_url); |
1781 | 1788 |
1782 favicon_sizes.clear(); | 1789 favicon_sizes.clear(); |
1783 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( | 1790 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( |
1784 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); | 1791 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); |
1785 EXPECT_EQ(GetDefaultFaviconSizes(), favicon_sizes); | 1792 EXPECT_EQ(GetDefaultFaviconSizes(), favicon_sizes); |
1786 | 1793 |
1787 std::vector<FaviconBitmap> favicon_bitmaps; | 1794 std::vector<FaviconBitmap> favicon_bitmaps; |
1788 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[0].icon_id, | 1795 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[0].icon_id, |
1789 &favicon_bitmaps)); | 1796 &favicon_bitmaps)); |
1790 | 1797 |
1791 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[0].bitmap_data)); | 1798 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[0].bitmap_data)); |
1792 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); | 1799 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); |
1793 EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[1].bitmap_data)); | 1800 EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[1].bitmap_data)); |
1794 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); | 1801 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); |
1795 | 1802 |
1796 EXPECT_EQ(2, num_broadcasted_notifications()); | 1803 // A notification should have been broadcast for each call to MergeFavicon(). |
| 1804 EXPECT_EQ(3, num_broadcasted_notifications()); |
1797 } | 1805 } |
1798 | 1806 |
1799 // Test calling MergeFavicon() when |page_url| is known to the database. | 1807 // Test calling MergeFavicon() when |page_url| is known to the database. |
1800 TEST_F(HistoryBackendTest, MergeFaviconPageURLInDB) { | 1808 TEST_F(HistoryBackendTest, MergeFaviconPageURLInDB) { |
1801 GURL page_url("http://www.google.com"); | 1809 GURL page_url("http://www.google.com"); |
1802 GURL fake_icon_url = page_url; | 1810 GURL fake_icon_url = page_url; |
1803 GURL icon_url("http://www.google.com/favicon.ico"); | 1811 GURL icon_url("http://www.google.com/favicon.ico"); |
1804 | 1812 |
1805 IconURLSizesMap icon_url_sizes; | 1813 IconURLSizesMap icon_url_sizes; |
1806 icon_url_sizes[icon_url] = GetSizesSmallAndLarge(); | 1814 icon_url_sizes[icon_url] = GetSizesSmallAndLarge(); |
(...skipping 18 matching lines...) Expand all Loading... |
1825 EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes); | 1833 EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes); |
1826 | 1834 |
1827 std::vector<FaviconBitmap> favicon_bitmaps; | 1835 std::vector<FaviconBitmap> favicon_bitmaps; |
1828 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[0].icon_id, | 1836 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[0].icon_id, |
1829 &favicon_bitmaps)); | 1837 &favicon_bitmaps)); |
1830 EXPECT_TRUE(BitmapDataEqual('a', favicon_bitmaps[0].bitmap_data)); | 1838 EXPECT_TRUE(BitmapDataEqual('a', favicon_bitmaps[0].bitmap_data)); |
1831 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); | 1839 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); |
1832 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[1].bitmap_data)); | 1840 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[1].bitmap_data)); |
1833 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); | 1841 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); |
1834 | 1842 |
1835 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1836 | |
1837 // Merge small favicon. | 1843 // Merge small favicon. |
1838 std::vector<unsigned char> data; | 1844 std::vector<unsigned char> data; |
1839 data.push_back('c'); | 1845 data.push_back('c'); |
1840 scoped_refptr<base::RefCountedBytes> bitmap_data( | 1846 scoped_refptr<base::RefCountedBytes> bitmap_data( |
1841 new base::RefCountedBytes(data)); | 1847 new base::RefCountedBytes(data)); |
1842 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kSmallSize); | 1848 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kSmallSize); |
1843 | 1849 |
1844 // The small favicon bitmap at |icon_url| should have been overwritten. | 1850 // The small favicon bitmap at |icon_url| should have been overwritten. |
1845 icon_mappings.clear(); | 1851 icon_mappings.clear(); |
1846 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, | 1852 EXPECT_TRUE(backend_->thumbnail_db_->GetIconMappingsForPageURL(page_url, |
1847 &icon_mappings)); | 1853 &icon_mappings)); |
1848 EXPECT_EQ(1u, icon_mappings.size()); | 1854 EXPECT_EQ(1u, icon_mappings.size()); |
1849 EXPECT_EQ(icon_url, icon_mappings[0].icon_url); | 1855 EXPECT_EQ(icon_url, icon_mappings[0].icon_url); |
1850 | 1856 |
1851 favicon_sizes.clear(); | 1857 favicon_sizes.clear(); |
1852 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( | 1858 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconHeader( |
1853 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); | 1859 icon_mappings[0].icon_id, NULL, NULL, &favicon_sizes)); |
1854 EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes); | 1860 EXPECT_EQ(GetSizesSmallAndLarge(), favicon_sizes); |
1855 | 1861 |
1856 favicon_bitmaps.clear(); | 1862 favicon_bitmaps.clear(); |
1857 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[0].icon_id, | 1863 EXPECT_TRUE(GetSortedFaviconBitmaps(icon_mappings[0].icon_id, |
1858 &favicon_bitmaps)); | 1864 &favicon_bitmaps)); |
1859 EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[0].bitmap_data)); | 1865 EXPECT_TRUE(BitmapDataEqual('c', favicon_bitmaps[0].bitmap_data)); |
1860 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); | 1866 EXPECT_EQ(kSmallSize, favicon_bitmaps[0].pixel_size); |
1861 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[1].bitmap_data)); | 1867 EXPECT_TRUE(BitmapDataEqual('b', favicon_bitmaps[1].bitmap_data)); |
1862 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); | 1868 EXPECT_EQ(kLargeSize, favicon_bitmaps[1].pixel_size); |
1863 | 1869 |
1864 // No new notification should have been broadcasted as only the favicon | |
1865 // bitmap data changed. No favicon bitmap was added or removed. | |
1866 EXPECT_EQ(1, num_broadcasted_notifications()); | |
1867 | |
1868 // Merge favicon with pixel size for which there is no favicon bitmap. | 1870 // Merge favicon with pixel size for which there is no favicon bitmap. |
1869 data[0] = 'd'; | 1871 data[0] = 'd'; |
1870 bitmap_data = new base::RefCountedBytes(data); | 1872 bitmap_data = new base::RefCountedBytes(data); |
1871 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kTinySize); | 1873 backend_->MergeFavicon(page_url, FAVICON, bitmap_data, kTinySize); |
1872 | 1874 |
1873 // A favicon with |fake_icon_url| should have been created with the tiny | 1875 // A favicon with |fake_icon_url| should have been created with the tiny |
1874 // favicon bitmap. | 1876 // favicon bitmap. |
1875 icon_mappings.clear(); | 1877 icon_mappings.clear(); |
1876 EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url, &icon_mappings)); | 1878 EXPECT_TRUE(GetSortedIconMappingsForPageURL(page_url, &icon_mappings)); |
1877 EXPECT_EQ(2u, icon_mappings.size()); | 1879 EXPECT_EQ(2u, icon_mappings.size()); |
(...skipping 14 matching lines...) Expand all Loading... |
1892 EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap)); | 1894 EXPECT_TRUE(GetOnlyFaviconBitmap(icon_mappings[0].icon_id, &favicon_bitmap)); |
1893 EXPECT_TRUE(BitmapDataEqual('d', favicon_bitmap.bitmap_data)); | 1895 EXPECT_TRUE(BitmapDataEqual('d', favicon_bitmap.bitmap_data)); |
1894 EXPECT_EQ(kTinySize, favicon_bitmap.pixel_size); | 1896 EXPECT_EQ(kTinySize, favicon_bitmap.pixel_size); |
1895 | 1897 |
1896 // The favicon at |icon_url| should still have two favicon bitmaps. | 1898 // The favicon at |icon_url| should still have two favicon bitmaps. |
1897 favicon_bitmaps.clear(); | 1899 favicon_bitmaps.clear(); |
1898 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconBitmaps( | 1900 EXPECT_TRUE(backend_->thumbnail_db_->GetFaviconBitmaps( |
1899 icon_mappings[1].icon_id, &favicon_bitmaps)); | 1901 icon_mappings[1].icon_id, &favicon_bitmaps)); |
1900 EXPECT_EQ(2u, favicon_bitmaps.size()); | 1902 EXPECT_EQ(2u, favicon_bitmaps.size()); |
1901 | 1903 |
1902 // A favicon was added, expect a notification to have been broadcasted. | 1904 // A notification should have been broadcast for each call to SetFavicons() |
1903 EXPECT_EQ(2, num_broadcasted_notifications()); | 1905 // and MergeFavicon(). |
| 1906 EXPECT_EQ(3, num_broadcasted_notifications()); |
1904 } | 1907 } |
1905 | 1908 |
1906 // Test that MergeFavicon() does not map more than |kMaxFaviconsPerPage| to a | 1909 // Test that MergeFavicon() does not map more than |kMaxFaviconsPerPage| to a |
1907 // page URL. | 1910 // page URL. |
1908 TEST_F(HistoryBackendTest, MergeFaviconMaxFaviconsPerPage) { | 1911 TEST_F(HistoryBackendTest, MergeFaviconMaxFaviconsPerPage) { |
1909 GURL page_url("http://www.google.com"); | 1912 GURL page_url("http://www.google.com"); |
1910 std::string icon_url_string("http://www.google.com/favicon?"); | 1913 std::string icon_url_string("http://www.google.com/favicon?"); |
1911 size_t replace_index = icon_url_string.size() - 1; | 1914 size_t replace_index = icon_url_string.size() - 1; |
1912 | 1915 |
1913 std::vector<unsigned char> data; | 1916 std::vector<unsigned char> data; |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2657 | 2660 |
2658 backend_->DeleteURL(url); | 2661 backend_->DeleteURL(url); |
2659 backend_->AddPageNoVisitForBookmark(url, string16()); | 2662 backend_->AddPageNoVisitForBookmark(url, string16()); |
2660 backend_->GetURL(url, &row); | 2663 backend_->GetURL(url, &row); |
2661 EXPECT_EQ(url, row.url()); | 2664 EXPECT_EQ(url, row.url()); |
2662 EXPECT_EQ(UTF8ToUTF16(url.spec()), row.title()); | 2665 EXPECT_EQ(UTF8ToUTF16(url.spec()), row.title()); |
2663 EXPECT_EQ(0, row.visit_count()); | 2666 EXPECT_EQ(0, row.visit_count()); |
2664 } | 2667 } |
2665 | 2668 |
2666 } // namespace history | 2669 } // namespace history |
OLD | NEW |