15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "components/search_provider_logos/logo_cache.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string> 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/callback.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/files/scoped_temp_dir.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/run_loop.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/time/time.h" 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "testing/gtest/include/gtest/gtest.h" 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace search_provider_logos { 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuLogoMetadata GetExampleMetadata() { 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoMetadata metadata; 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.source_url = "http://google.com/mylogo"; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.fingerprint = "LC4JVIZ5HVITQFKH0V70"; 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(base::Time::FromString("98-05-05 05:05:06 GMT", 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &metadata.expiration_time)); 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.can_show_after_expiration = true; 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.on_click_url = "https://www.google.com/search?q=chicken"; 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.alt_text = "A logo about chickens"; 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.mime_type = "image/jpeg"; 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return metadata; 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuLogoMetadata GetExampleMetadata2() { 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoMetadata metadata; 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.source_url = "https://www.example.com/thebestlogo?size=large"; 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.fingerprint = "bh4PLHdnEaQAPxNGRyMao1rOmVFTXuOdVhdrMmPV"; 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(base::Time::FromString("17-04-04 07:10:58 GMT", 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &metadata.expiration_time)); 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.can_show_after_expiration = false; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.on_click_url = "http://www.example.co.uk/welcome.php#top"; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.alt_text = "This is a logo"; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.mime_type = "image/png"; 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return metadata; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubase::RefCountedString* CreateExampleImage(size_t num_bytes) { 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::RefCountedString* encoded_image_str = new base::RefCountedString(); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string& str = encoded_image_str->data(); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu str.resize(num_bytes); 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu for (size_t i = 0; i < num_bytes; ++i) 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu str[i] = static_cast<char>(i); 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return encoded_image_str; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuEncodedLogo GetExampleLogo() { 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EncodedLogo logo; 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu logo.encoded_image = CreateExampleImage(837); 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu logo.metadata = GetExampleMetadata(); 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return logo; 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuEncodedLogo GetExampleLogo2() { 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EncodedLogo logo; 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu logo.encoded_image = CreateExampleImage(345); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu logo.metadata = GetExampleMetadata2(); 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return logo; 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid ExpectMetadataEqual(const LogoMetadata& expected_metadata, 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const LogoMetadata& actual_metadata) { 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.source_url, actual_metadata.source_url); 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.fingerprint, actual_metadata.fingerprint); 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.can_show_after_expiration, 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu actual_metadata.can_show_after_expiration); 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.expiration_time, actual_metadata.expiration_time); 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.on_click_url, actual_metadata.on_click_url); 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.alt_text, actual_metadata.alt_text); 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_metadata.mime_type, actual_metadata.mime_type); 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid ExpectLogosEqual(const EncodedLogo& expected_logo, 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const EncodedLogo& actual_logo) { 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(expected_logo.encoded_image.get()); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(actual_logo.encoded_image.get()); 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_TRUE(expected_logo.encoded_image->Equals(actual_logo.encoded_image)); 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadataEqual(expected_logo.metadata, actual_logo.metadata); 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Removes 1 byte from the end of the file at |path|. 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid ShortenFile(base::FilePath path) { 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_WRITE); 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int64 file_length = file.GetLength(); 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_NE(file_length, 0); 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu file.SetLength(file_length - 1); 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass LogoCacheTest : public ::testing::Test { 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected: 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void SetUp() OVERRIDE { 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(cache_parent_dir_.CreateUniqueTempDir()); 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InitCache(); 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void InitCache() { 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_.reset(new LogoCache( 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_parent_dir_.path().Append(FILE_PATH_LITERAL("cache")))); 1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ExpectMetadata(const LogoMetadata* expected_metadata) { 1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const LogoMetadata* retrieved_metadata = cache_->GetCachedLogoMetadata(); 1105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (expected_metadata) { 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(retrieved_metadata != NULL); 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadataEqual(*expected_metadata, *retrieved_metadata); 1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else { 1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(retrieved_metadata == NULL); 1155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ExpectLogo(const EncodedLogo* expected_logo) { 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<EncodedLogo> retrieved_logo(cache_->GetCachedLogo()); 1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (expected_logo) { 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(retrieved_logo.get() != NULL); 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogosEqual(*expected_logo, *retrieved_logo); 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else { 1245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(retrieved_logo.get() == NULL); 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Deletes the existing LogoCache and creates a new one. This clears any 1295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // logo or metadata cached in memory to simulate restarting Chrome. 1305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void SimulateRestart() { 1315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu InitCache(); 1325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<LogoCache> cache_; 1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::ScopedTempDir cache_parent_dir_; 1365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 1375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Tests ----------------------------------------------------------------------- 1395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST(LogoCacheSerializationTest, SerializeMetadata) { 1415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoMetadata metadata = GetExampleMetadata(); 1425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string metadata_str; 1435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int logo_num_bytes = 33; 1445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoCache::LogoMetadataToString(metadata, logo_num_bytes, &metadata_str); 1455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<LogoMetadata> metadata2 = 1465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoCache::LogoMetadataFromString(metadata_str, &logo_num_bytes); 1475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(metadata2); 1485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadataEqual(metadata, *metadata2); 1495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST(LogoCacheSerializationTest, DeserializeCorruptMetadata) { 1525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int logo_num_bytes = 33; 1535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<LogoMetadata> metadata = 1545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoCache::LogoMetadataFromString("", &logo_num_bytes); 1555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(metadata.get() == NULL); 1565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoMetadata example_metadata = GetExampleMetadata2(); 1585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string corrupt_str; 1595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoCache::LogoMetadataToString( 1605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu example_metadata, logo_num_bytes, &corrupt_str); 1615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu corrupt_str.append("@"); 1625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata = LogoCache::LogoMetadataFromString(corrupt_str, &logo_num_bytes); 1635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(metadata.get() == NULL); 1645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(LogoCacheTest, StoreAndRetrieveMetadata) { 1675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Expect no metadata at first. 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(NULL); 1695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Set initial metadata. 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EncodedLogo logo = GetExampleLogo(); 1725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu LogoMetadata& metadata = logo.metadata; 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->SetCachedLogo(&logo); 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(&metadata); 1755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Update metadata. 1775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu metadata.on_click_url = "http://anotherwebsite.com"; 1785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->UpdateCachedLogoMetadata(metadata); 1795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(&metadata); 1805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Read metadata back from disk. 1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SimulateRestart(); 1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(&metadata); 1845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Ensure metadata is cached in memory. 1865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::DeleteFile(cache_->GetMetadataPath(), false); 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(&metadata); 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 1895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(LogoCacheTest, StoreAndRetrieveLogo) { 1915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Expect no metadata at first. 1925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(NULL); 1935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Set initial logo. 1955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EncodedLogo logo = GetExampleLogo(); 1965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->SetCachedLogo(&logo); 1975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(&logo); 1985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Update logo to NULL. 2005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->SetCachedLogo(NULL); 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(NULL); 2025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Read logo back from disk. 2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SimulateRestart(); 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(NULL); 2065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Update logo. 2085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu logo = GetExampleLogo2(); 2095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->SetCachedLogo(&logo); 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(&logo); 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Read logo back from disk. 2135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SimulateRestart(); 2145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(&logo); 2155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(LogoCacheTest, RetrieveCorruptMetadata) { 2185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Set initial logo. 2195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EncodedLogo logo = GetExampleLogo2(); 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->SetCachedLogo(&logo); 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(&logo); 2225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Corrupt metadata and expect NULL for both logo and metadata. 2245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SimulateRestart(); 2255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ShortenFile(cache_->GetMetadataPath()); 2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(NULL); 2275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(NULL); 2285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Ensure corrupt cache files are deleted. 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::PathExists(cache_->GetMetadataPath())); 2315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::PathExists(cache_->GetLogoPath())); 2325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuTEST_F(LogoCacheTest, RetrieveCorruptLogo) { 2355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Set initial logo. 2365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EncodedLogo logo = GetExampleLogo(); 2375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu cache_->SetCachedLogo(&logo); 2385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(&logo); 2395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Corrupt logo and expect NULL. 2415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SimulateRestart(); 2425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ShortenFile(cache_->GetLogoPath()); 2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectLogo(NULL); 2445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Once the logo is noticed to be NULL, the metadata should also be cleared. 2455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExpectMetadata(NULL); 2465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Ensure corrupt cache files are deleted. 2485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::PathExists(cache_->GetMetadataPath())); 2495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_FALSE(base::PathExists(cache_->GetLogoPath())); 2505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace search_provider_logos 253