| Index: components/search_provider_logos/logo_tracker_unittest.cc
|
| diff --git a/components/search_provider_logos/logo_tracker_unittest.cc b/components/search_provider_logos/logo_tracker_unittest.cc
|
| index 4ae77346b961499d95bef4f92d28dd1412fccbe0..cc7c0c4c00b6d0c8c3f5c04a9e47b1e6de0a2794 100644
|
| --- a/components/search_provider_logos/logo_tracker_unittest.cc
|
| +++ b/components/search_provider_logos/logo_tracker_unittest.cc
|
| @@ -111,7 +111,7 @@ Logo GetSampleLogo2(const GURL& logo_url, base::Time response_time) {
|
| logo.metadata.source_url = logo_url.spec();
|
| logo.metadata.on_click_url = "http://example.com/page25";
|
| logo.metadata.alt_text = "The logo for example.com";
|
| - logo.metadata.mime_type = "image/png";
|
| + logo.metadata.mime_type = "image/jpeg";
|
| return logo;
|
| }
|
|
|
| @@ -124,16 +124,15 @@ std::string MakeServerResponse(
|
| const std::string& fingerprint,
|
| base::TimeDelta time_to_live) {
|
| base::DictionaryValue dict;
|
| - if (!image.isNull()) {
|
| + if (!image.isNull())
|
| dict.SetString("update.logo.data", EncodeBitmapAsPNGBase64(image));
|
| - }
|
|
|
| dict.SetString("update.logo.target", on_click_url);
|
| dict.SetString("update.logo.alt", alt_text);
|
| - if (!animated_url.empty()) {
|
| + if (!animated_url.empty())
|
| dict.SetString("update.logo.url", animated_url);
|
| - }
|
| - dict.SetString("update.logo.mime_type", mime_type);
|
| + if (!mime_type.empty())
|
| + dict.SetString("update.logo.mime_type", mime_type);
|
| dict.SetString("update.logo.fingerprint", fingerprint);
|
| if (time_to_live.ToInternalValue() != 0)
|
| dict.SetInteger("update.logo.time_to_live",
|
| @@ -222,7 +221,11 @@ class MockLogoCache : public LogoCache {
|
| }
|
|
|
| void UpdateCachedLogoMetadataInternal(const LogoMetadata& metadata) {
|
| + ASSERT_TRUE(logo_.get());
|
| + ASSERT_TRUE(metadata_.get());
|
| + EXPECT_EQ(metadata_->fingerprint, metadata.fingerprint);
|
| metadata_.reset(new LogoMetadata(metadata));
|
| + logo_->metadata = metadata;
|
| }
|
|
|
| virtual const LogoMetadata* GetCachedLogoMetadataInternal() {
|
| @@ -474,12 +477,14 @@ TEST_F(LogoTrackerTest, ReturnCachedLogo) {
|
| GetLogo();
|
| }
|
|
|
| -TEST_F(LogoTrackerTest, ValidateCachedLogoFingerprint) {
|
| +TEST_F(LogoTrackerTest, ValidateCachedLogo) {
|
| Logo cached_logo = GetSampleLogo(logo_url_, test_clock_->Now());
|
| logo_cache_->EncodeAndSetCachedLogo(cached_logo);
|
|
|
| + // During revalidation, the image data and mime_type are absent.
|
| Logo fresh_logo = cached_logo;
|
| fresh_logo.image.reset();
|
| + fresh_logo.metadata.mime_type.clear();
|
| fresh_logo.metadata.expiration_time =
|
| test_clock_->Now() + base::TimeDelta::FromDays(8);
|
| SetServerResponseWhenFingerprint(fresh_logo.metadata.fingerprint,
|
| @@ -489,12 +494,47 @@ TEST_F(LogoTrackerTest, ValidateCachedLogoFingerprint) {
|
| EXPECT_CALL(*logo_cache_, SetCachedLogo(_)).Times(0);
|
| EXPECT_CALL(*logo_cache_, OnGetCachedLogo()).Times(AtMost(1));
|
| observer_.ExpectCachedLogo(&cached_logo);
|
| -
|
| GetLogo();
|
|
|
| EXPECT_TRUE(logo_cache_->GetCachedLogoMetadata() != NULL);
|
| - EXPECT_EQ(logo_cache_->GetCachedLogoMetadata()->expiration_time,
|
| - fresh_logo.metadata.expiration_time);
|
| + EXPECT_EQ(fresh_logo.metadata.expiration_time,
|
| + logo_cache_->GetCachedLogoMetadata()->expiration_time);
|
| +
|
| + // Ensure that cached logo is still returned correctly on subsequent requests.
|
| + // In particular, the metadata should stay valid. http://crbug.com/480090
|
| + EXPECT_CALL(*logo_cache_, UpdateCachedLogoMetadata(_)).Times(1);
|
| + EXPECT_CALL(*logo_cache_, SetCachedLogo(_)).Times(0);
|
| + EXPECT_CALL(*logo_cache_, OnGetCachedLogo()).Times(AtMost(1));
|
| + observer_.ExpectCachedLogo(&cached_logo);
|
| + GetLogo();
|
| +}
|
| +
|
| +TEST_F(LogoTrackerTest, UpdateCachedLogoMetadata) {
|
| + Logo cached_logo = GetSampleLogo(logo_url_, test_clock_->Now());
|
| + logo_cache_->EncodeAndSetCachedLogo(cached_logo);
|
| +
|
| + Logo fresh_logo = cached_logo;
|
| + fresh_logo.image.reset();
|
| + fresh_logo.metadata.mime_type.clear();
|
| + fresh_logo.metadata.on_click_url = "http://new.onclick.url";
|
| + fresh_logo.metadata.alt_text = "new alt text";
|
| + fresh_logo.metadata.animated_url = "http://new.animated.url";
|
| + fresh_logo.metadata.expiration_time =
|
| + test_clock_->Now() + base::TimeDelta::FromDays(8);
|
| + SetServerResponseWhenFingerprint(fresh_logo.metadata.fingerprint,
|
| + ServerResponse(fresh_logo));
|
| +
|
| + // On the first request, the cached logo should be used.
|
| + observer_.ExpectCachedLogo(&cached_logo);
|
| + GetLogo();
|
| +
|
| + // Subsequently, the cached image should be returned along with the updated
|
| + // metadata.
|
| + Logo expected_logo = fresh_logo;
|
| + expected_logo.image = cached_logo.image;
|
| + expected_logo.metadata.mime_type = cached_logo.metadata.mime_type;
|
| + observer_.ExpectCachedLogo(&expected_logo);
|
| + GetLogo();
|
| }
|
|
|
| TEST_F(LogoTrackerTest, UpdateCachedLogo) {
|
|
|