// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ios/chrome/browser/favicon/large_icon_cache.h" #include "components/favicon_base/fallback_icon_style.h" #include "components/favicon_base/favicon_types.h" #include "url/gurl.h" namespace { const int kMaxCacheSize = 12; } // namespace struct LargeIconCacheEntry { LargeIconCacheEntry() {} ~LargeIconCacheEntry() {} scoped_ptr result; }; LargeIconCache::LargeIconCache() : cache_(kMaxCacheSize) {} LargeIconCache::~LargeIconCache() {} void LargeIconCache::SetCachedResult( const GURL& url, const favicon_base::LargeIconResult& result) { scoped_ptr entry(new LargeIconCacheEntry); entry->result = CloneLargeIconResult(result); cache_.Put(url, std::move(entry)); } scoped_ptr LargeIconCache::GetCachedResult( const GURL& url) { auto iter = cache_.Get(url); if (iter != cache_.end()) { DCHECK(iter->second->result); return CloneLargeIconResult(*iter->second->result.get()); } return scoped_ptr(); } scoped_ptr LargeIconCache::CloneLargeIconResult( const favicon_base::LargeIconResult& large_icon_result) { scoped_ptr clone; if (large_icon_result.bitmap.is_valid()) { clone.reset(new favicon_base::LargeIconResult(large_icon_result.bitmap)); } else { clone.reset( new favicon_base::LargeIconResult(new favicon_base::FallbackIconStyle( *large_icon_result.fallback_icon_style.get()))); } return clone; }