| Index: chrome/browser/history/top_sites.cc
 | 
| diff --git a/chrome/browser/history/top_sites.cc b/chrome/browser/history/top_sites.cc
 | 
| index e1e40670f3c9fde4a12d3794f869840e2c6ea734..1c01459a6123a1c84b91c142ef8f94c8a604739d 100644
 | 
| --- a/chrome/browser/history/top_sites.cc
 | 
| +++ b/chrome/browser/history/top_sites.cc
 | 
| @@ -253,6 +253,41 @@ bool TopSites::SetPageThumbnail(const GURL& url,
 | 
|    return SetPageThumbnailEncoded(url, thumbnail_data, score);
 | 
|  }
 | 
|  
 | 
| +bool TopSites::SetPageThumbnailToJPEGBytes(
 | 
| +    const GURL& url,
 | 
| +    const base::RefCountedMemory* memory,
 | 
| +    const ThumbnailScore& score) {
 | 
| +  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| +
 | 
| +  if (!loaded_) {
 | 
| +    // TODO(sky): I need to cache these and apply them after the load
 | 
| +    // completes.
 | 
| +    return false;
 | 
| +  }
 | 
| +
 | 
| +  bool add_temp_thumbnail = false;
 | 
| +  if (!IsKnownURL(url)) {
 | 
| +    if (!IsFull()) {
 | 
| +      add_temp_thumbnail = true;
 | 
| +    } else {
 | 
| +      return false;  // This URL is not known to us.
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
| +  if (!HistoryService::CanAddURL(url))
 | 
| +    return false;  // It's not a real webpage.
 | 
| +
 | 
| +  if (add_temp_thumbnail) {
 | 
| +    // Always remove the existing entry and then add it back. That way if we end
 | 
| +    // up with too many temp thumbnails we'll prune the oldest first.
 | 
| +    RemoveTemporaryThumbnailByURL(url);
 | 
| +    AddTemporaryThumbnail(url, memory, score);
 | 
| +    return true;
 | 
| +  }
 | 
| +
 | 
| +  return SetPageThumbnailEncoded(url, memory, score);
 | 
| +}
 | 
| +
 | 
|  // WARNING: this function may be invoked on any thread.
 | 
|  void TopSites::GetMostVisitedURLs(const GetMostVisitedURLsCallback& callback) {
 | 
|    MostVisitedURLList filtered_urls;
 | 
| @@ -536,9 +571,10 @@ bool TopSites::IsFull() {
 | 
|  TopSites::~TopSites() {
 | 
|  }
 | 
|  
 | 
| -bool TopSites::SetPageThumbnailNoDB(const GURL& url,
 | 
| -                                    const base::RefCountedBytes* thumbnail_data,
 | 
| -                                    const ThumbnailScore& score) {
 | 
| +bool TopSites::SetPageThumbnailNoDB(
 | 
| +    const GURL& url,
 | 
| +    const base::RefCountedMemory* thumbnail_data,
 | 
| +    const ThumbnailScore& score) {
 | 
|    // This should only be invoked when we know about the url.
 | 
|    DCHECK(cache_->IsKnownURL(url));
 | 
|  
 | 
| @@ -558,7 +594,7 @@ bool TopSites::SetPageThumbnailNoDB(const GURL& url,
 | 
|        image->thumbnail.get())
 | 
|      return false;  // The one we already have is better.
 | 
|  
 | 
| -  image->thumbnail = const_cast<base::RefCountedBytes*>(thumbnail_data);
 | 
| +  image->thumbnail = const_cast<base::RefCountedMemory*>(thumbnail_data);
 | 
|    image->thumbnail_score = new_score_with_redirects;
 | 
|  
 | 
|    ResetThreadSafeImageCache();
 | 
| @@ -566,7 +602,7 @@ bool TopSites::SetPageThumbnailNoDB(const GURL& url,
 | 
|  }
 | 
|  
 | 
|  bool TopSites::SetPageThumbnailEncoded(const GURL& url,
 | 
| -                                       const base::RefCountedBytes* thumbnail,
 | 
| +                                       const base::RefCountedMemory* thumbnail,
 | 
|                                         const ThumbnailScore& score) {
 | 
|    if (!SetPageThumbnailNoDB(url, thumbnail, score))
 | 
|      return false;
 | 
| @@ -611,14 +647,14 @@ void TopSites::RemoveTemporaryThumbnailByURL(const GURL& url) {
 | 
|  }
 | 
|  
 | 
|  void TopSites::AddTemporaryThumbnail(const GURL& url,
 | 
| -                                     const base::RefCountedBytes* thumbnail,
 | 
| +                                     const base::RefCountedMemory* thumbnail,
 | 
|                                       const ThumbnailScore& score) {
 | 
|    if (temp_images_.size() == kMaxTempTopImages)
 | 
|      temp_images_.erase(temp_images_.begin());
 | 
|  
 | 
|    TempImage image;
 | 
|    image.first = url;
 | 
| -  image.second.thumbnail = const_cast<base::RefCountedBytes*>(thumbnail);
 | 
| +  image.second.thumbnail = const_cast<base::RefCountedMemory*>(thumbnail);
 | 
|    image.second.thumbnail_score = score;
 | 
|    temp_images_.push_back(image);
 | 
|  }
 | 
| 
 |