Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: chrome/browser/history/history_backend_unittest.cc

Issue 11099011: Prevent bookmarks from going out of sync part 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/history/history_backend.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/history/history_backend.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698