Index: chrome/browser/favicon/favicon_handler_unittest.cc |
diff --git a/chrome/browser/favicon/favicon_handler_unittest.cc b/chrome/browser/favicon/favicon_handler_unittest.cc |
index f0e2f24b109b7f69a149520a911013a75629ea50..266d1a8ed7e60f3737c722aefbaeb6363315e163 100644 |
--- a/chrome/browser/favicon/favicon_handler_unittest.cc |
+++ b/chrome/browser/favicon/favicon_handler_unittest.cc |
@@ -189,7 +189,10 @@ class TestFaviconClient : public FaviconClient { |
class TestFaviconDriver : public FaviconDriver { |
public: |
- TestFaviconDriver() : favicon_validity_(false) {} |
+ TestFaviconDriver() |
+ : favicon_validity_(false), |
+ num_favicon_available_(0), |
+ update_active_favicon_(false) {} |
virtual ~TestFaviconDriver() { |
} |
@@ -204,13 +207,11 @@ class TestFaviconDriver : public FaviconDriver { |
const GURL GetActiveURL() override { return url_; } |
- void SetActiveFaviconImage(gfx::Image image) override { image_ = image; } |
+ void SetActiveFaviconImage(gfx::Image image) { image_ = image; } |
- void SetActiveFaviconURL(GURL favicon_url) override { |
- favicon_url_ = favicon_url; |
- } |
+ void SetActiveFaviconURL(GURL favicon_url) { favicon_url_ = favicon_url; } |
- void SetActiveFaviconValidity(bool favicon_validity) override { |
+ void SetActiveFaviconValidity(bool favicon_validity) { |
favicon_validity_ = favicon_validity; |
} |
@@ -220,18 +221,45 @@ class TestFaviconDriver : public FaviconDriver { |
return -1; |
} |
- void NotifyFaviconUpdated(bool icon_url_changed) override { |
- ADD_FAILURE() << "TestFaviconDriver::NotifyFaviconUpdated() " |
- << "should never be called in tests."; |
+ void OnFaviconAvailable(const gfx::Image& image, |
+ const GURL& icon_url, |
+ bool update_active_favicon) override { |
+ available_image_ = image; |
+ available_icon_url_ = icon_url; |
+ update_active_favicon_ = update_active_favicon; |
+ if (!update_active_favicon) |
+ return; |
+ |
+ ++num_favicon_available_; |
+ SetActiveFaviconURL(icon_url); |
+ SetActiveFaviconValidity(true); |
+ SetActiveFaviconImage(image); |
} |
+ size_t num_favicon_available() const { return num_favicon_available_; } |
+ |
+ void ResetNumFaviconAvailable() { num_favicon_available_ = 0; } |
+ |
void SetActiveURL(GURL url) { url_ = url; } |
+ const gfx::Image available_favicon() { return available_image_; } |
+ |
+ const GURL available_icon_url() { return available_icon_url_; } |
+ |
+ bool update_active_favicon() { return update_active_favicon_; } |
+ |
private: |
GURL favicon_url_; |
GURL url_; |
gfx::Image image_; |
bool favicon_validity_; |
+ |
+ // The number of times that NotifyFaviconAvailable() has been called. |
+ size_t num_favicon_available_; |
+ gfx::Image available_image_; |
+ GURL available_icon_url_; |
+ bool update_active_favicon_; |
+ |
DISALLOW_COPY_AND_ASSIGN(TestFaviconDriver); |
}; |
@@ -250,8 +278,7 @@ class TestFaviconHandler : public FaviconHandler { |
Type type, |
bool download_largest_icon) |
: FaviconHandler(client, driver, type, download_largest_icon), |
- download_id_(0), |
- num_favicon_updates_(0) { |
+ download_id_(0) { |
driver->SetActiveURL(page_url); |
download_handler_.reset(new DownloadHandler(this)); |
} |
@@ -271,14 +298,6 @@ class TestFaviconHandler : public FaviconHandler { |
return download_handler_.get(); |
} |
- size_t num_favicon_update_notifications() const { |
- return num_favicon_updates_; |
- } |
- |
- void ResetNumFaviconUpdateNotifications() { |
- num_favicon_updates_ = 0; |
- } |
- |
// Methods to access favicon internals. |
const std::vector<FaviconURL>& urls() { |
return image_urls_; |
@@ -343,10 +362,6 @@ class TestFaviconHandler : public FaviconHandler { |
bool ShouldSaveFavicon(const GURL& url) override { return true; } |
- void NotifyFaviconUpdated(bool icon_url_changed) override { |
- ++num_favicon_updates_; |
- } |
- |
GURL page_url_; |
private: |
@@ -358,9 +373,6 @@ class TestFaviconHandler : public FaviconHandler { |
scoped_ptr<DownloadHandler> download_handler_; |
scoped_ptr<HistoryRequestHandler> history_handler_; |
- // The number of times that NotifyFaviconUpdated() has been called. |
- size_t num_favicon_updates_; |
- |
DISALLOW_COPY_AND_ASSIGN(TestFaviconHandler); |
}; |
@@ -410,11 +422,13 @@ class FaviconHandlerTest : public ChromeRenderViewHostTestHarness { |
// - The favicons at |candidate_icons| have edge pixel sizes of |
// |candidate_icon_sizes|. |
void DownloadTillDoneIgnoringHistory( |
+ TestFaviconDriver* favicon_driver, |
TestFaviconHandler* favicon_handler, |
const GURL& page_url, |
const std::vector<FaviconURL>& candidate_icons, |
const int* candidate_icon_sizes) { |
- UpdateFaviconURL(favicon_handler, page_url, candidate_icons); |
+ UpdateFaviconURL( |
+ favicon_driver, favicon_handler, page_url, candidate_icons); |
EXPECT_EQ(candidate_icons.size(), favicon_handler->image_urls().size()); |
DownloadHandler* download_handler = favicon_handler->download_handler(); |
@@ -429,16 +443,16 @@ class FaviconHandlerTest : public ChromeRenderViewHostTestHarness { |
download_handler->SetImageSizes(sizes); |
download_handler->InvokeCallback(); |
- if (favicon_handler->num_favicon_update_notifications()) |
+ if (favicon_driver->num_favicon_available()) |
return; |
} |
} |
- void UpdateFaviconURL( |
- TestFaviconHandler* favicon_handler, |
- const GURL& page_url, |
- const std::vector<FaviconURL>& candidate_icons) { |
- favicon_handler->ResetNumFaviconUpdateNotifications(); |
+ void UpdateFaviconURL(TestFaviconDriver* favicon_driver, |
+ TestFaviconHandler* favicon_handler, |
+ const GURL& page_url, |
+ const std::vector<FaviconURL>& candidate_icons) { |
+ favicon_driver->ResetNumFaviconAvailable(); |
favicon_handler->FetchFavicon(page_url); |
favicon_handler->history_handler()->InvokeCallback(); |
@@ -1070,7 +1084,8 @@ TEST_F(FaviconHandlerTest, MultipleFavicons) { |
const int kSizes1[] = { 16, 24, 32, 48, 256 }; |
std::vector<FaviconURL> urls1(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSizes1)); |
- DownloadTillDoneIgnoringHistory(&handler1, kPageURL, urls1, kSizes1); |
+ DownloadTillDoneIgnoringHistory( |
+ &driver1, &handler1, kPageURL, urls1, kSizes1); |
EXPECT_EQ(0u, handler1.image_urls().size()); |
EXPECT_TRUE(driver1.GetActiveFaviconValidity()); |
@@ -1091,7 +1106,8 @@ TEST_F(FaviconHandlerTest, MultipleFavicons) { |
const int kSizes2[] = { 16, 24, 48, 256 }; |
std::vector<FaviconURL> urls2(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSizes2)); |
- DownloadTillDoneIgnoringHistory(&handler2, kPageURL, urls2, kSizes2); |
+ DownloadTillDoneIgnoringHistory( |
+ &driver2, &handler2, kPageURL, urls2, kSizes2); |
EXPECT_TRUE(driver2.GetActiveFaviconValidity()); |
expected_index = 0u; |
EXPECT_EQ(16, kSizes2[expected_index]); |
@@ -1107,7 +1123,8 @@ TEST_F(FaviconHandlerTest, MultipleFavicons) { |
const int kSizes3[] = { 256, 48 }; |
std::vector<FaviconURL> urls3(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSizes3)); |
- DownloadTillDoneIgnoringHistory(&handler3, kPageURL, urls3, kSizes3); |
+ DownloadTillDoneIgnoringHistory( |
+ &driver3, &handler3, kPageURL, urls3, kSizes3); |
EXPECT_TRUE(driver3.GetActiveFaviconValidity()); |
expected_index = 1u; |
EXPECT_EQ(48, kSizes3[expected_index]); |
@@ -1121,7 +1138,8 @@ TEST_F(FaviconHandlerTest, MultipleFavicons) { |
const int kSizes4[] = { 17, 256 }; |
std::vector<FaviconURL> urls4(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSizes4)); |
- DownloadTillDoneIgnoringHistory(&handler4, kPageURL, urls4, kSizes4); |
+ DownloadTillDoneIgnoringHistory( |
+ &driver4, &handler4, kPageURL, urls4, kSizes4); |
EXPECT_TRUE(driver4.GetActiveFaviconValidity()); |
expected_index = 0u; |
EXPECT_EQ(17, kSizes4[expected_index]); |
@@ -1162,7 +1180,7 @@ TEST_F(FaviconHandlerTest, TestSortFavicon) { |
kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); |
std::vector<FaviconURL> urls1(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSourceIconURLs)); |
- UpdateFaviconURL(&handler1, kPageURL, urls1); |
+ UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
struct ExpectedResult { |
// The favicon's index in kSourceIconURLs. |
@@ -1226,7 +1244,7 @@ TEST_F(FaviconHandlerTest, TestDownloadLargestFavicon) { |
kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); |
std::vector<FaviconURL> urls1(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSourceIconURLs)); |
- UpdateFaviconURL(&handler1, kPageURL, urls1); |
+ UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
// Simulate the download failed, to check whether the icons were requested |
// to download according their size. |
@@ -1292,7 +1310,7 @@ TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) { |
kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); |
std::vector<FaviconURL> urls1(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSourceIconURLs)); |
- UpdateFaviconURL(&handler1, kPageURL, urls1); |
+ UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
ASSERT_EQ(2u, handler1.urls().size()); |
@@ -1330,6 +1348,11 @@ TEST_F(FaviconHandlerTest, TestSelectLargestFavicon) { |
EXPECT_EQ(kSourceIconURLs[i].icon_url, handler1.history_handler()->icon_url_); |
EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], |
handler1.history_handler()->size_); |
+ // Verify NotifyFaviconAvailable(). |
+ EXPECT_FALSE(driver1.update_active_favicon()); |
+ EXPECT_EQ(kSourceIconURLs[i].icon_url, driver1.available_icon_url()); |
+ EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], |
+ driver1.available_favicon().Size()); |
} |
TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { |
@@ -1355,7 +1378,7 @@ TEST_F(FaviconHandlerTest, TestFaviconWasScaledAfterDownload) { |
kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); |
std::vector<FaviconURL> urls1(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSourceIconURLs)); |
- UpdateFaviconURL(&handler1, kPageURL, urls1); |
+ UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
ASSERT_EQ(2u, handler1.urls().size()); |
@@ -1417,7 +1440,7 @@ TEST_F(FaviconHandlerTest, TestKeepDownloadedLargestFavicon) { |
kPageURL, &client, &driver1, FaviconHandler::FAVICON, true); |
std::vector<FaviconURL> urls1(kSourceIconURLs, |
kSourceIconURLs + arraysize(kSourceIconURLs)); |
- UpdateFaviconURL(&handler1, kPageURL, urls1); |
+ UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
ASSERT_EQ(3u, handler1.urls().size()); |
// Simulate no favicon from history. |