Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Side by Side Diff: chrome/browser/history/top_sites_impl.cc

Issue 14585015: Recommit the generate profile patch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Load the browser dll manually on Windows. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/history/top_sites_impl.h ('k') | chrome/browser/history/top_sites_likely_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/history/top_sites_impl.h" 5 #include "chrome/browser/history/top_sites_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 // Always remove the existing entry and then add it back. That way if we end 226 // Always remove the existing entry and then add it back. That way if we end
227 // up with too many temp thumbnails we'll prune the oldest first. 227 // up with too many temp thumbnails we'll prune the oldest first.
228 RemoveTemporaryThumbnailByURL(url); 228 RemoveTemporaryThumbnailByURL(url);
229 AddTemporaryThumbnail(url, thumbnail_data, score); 229 AddTemporaryThumbnail(url, thumbnail_data, score);
230 return true; 230 return true;
231 } 231 }
232 232
233 return SetPageThumbnailEncoded(url, thumbnail_data, score); 233 return SetPageThumbnailEncoded(url, thumbnail_data, score);
234 } 234 }
235 235
236 bool TopSitesImpl::SetPageThumbnailToJPEGBytes(
237 const GURL& url,
238 const base::RefCountedMemory* memory,
239 const ThumbnailScore& score) {
240 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
241
242 if (!loaded_) {
243 // TODO(sky): I need to cache these and apply them after the load
244 // completes.
245 return false;
246 }
247
248 bool add_temp_thumbnail = false;
249 if (!IsKnownURL(url)) {
250 if (!IsFull()) {
251 add_temp_thumbnail = true;
252 } else {
253 return false; // This URL is not known to us.
254 }
255 }
256
257 if (!HistoryService::CanAddURL(url))
258 return false; // It's not a real webpage.
259
260 if (add_temp_thumbnail) {
261 // Always remove the existing entry and then add it back. That way if we end
262 // up with too many temp thumbnails we'll prune the oldest first.
263 RemoveTemporaryThumbnailByURL(url);
264 AddTemporaryThumbnail(url, memory, score);
265 return true;
266 }
267
268 return SetPageThumbnailEncoded(url, memory, score);
269 }
270
236 // WARNING: this function may be invoked on any thread. 271 // WARNING: this function may be invoked on any thread.
237 void TopSitesImpl::GetMostVisitedURLs( 272 void TopSitesImpl::GetMostVisitedURLs(
238 const GetMostVisitedURLsCallback& callback) { 273 const GetMostVisitedURLsCallback& callback) {
239 MostVisitedURLList filtered_urls; 274 MostVisitedURLList filtered_urls;
240 { 275 {
241 base::AutoLock lock(lock_); 276 base::AutoLock lock(lock_);
242 if (!loaded_) { 277 if (!loaded_) {
243 // A request came in before we finished loading. Store the callback and 278 // A request came in before we finished loading. Store the callback and
244 // we'll run it on current thread when we finish loading. 279 // we'll run it on current thread when we finish loading.
245 pending_callbacks_.push_back( 280 pending_callbacks_.push_back(
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 547
513 bool TopSitesImpl::IsFull() { 548 bool TopSitesImpl::IsFull() {
514 return loaded_ && cache_->top_sites().size() >= kTopSitesNumber; 549 return loaded_ && cache_->top_sites().size() >= kTopSitesNumber;
515 } 550 }
516 551
517 TopSitesImpl::~TopSitesImpl() { 552 TopSitesImpl::~TopSitesImpl() {
518 } 553 }
519 554
520 bool TopSitesImpl::SetPageThumbnailNoDB( 555 bool TopSitesImpl::SetPageThumbnailNoDB(
521 const GURL& url, 556 const GURL& url,
522 const base::RefCountedBytes* thumbnail_data, 557 const base::RefCountedMemory* thumbnail_data,
523 const ThumbnailScore& score) { 558 const ThumbnailScore& score) {
524 // This should only be invoked when we know about the url. 559 // This should only be invoked when we know about the url.
525 DCHECK(cache_->IsKnownURL(url)); 560 DCHECK(cache_->IsKnownURL(url));
526 561
527 const MostVisitedURL& most_visited = 562 const MostVisitedURL& most_visited =
528 cache_->top_sites()[cache_->GetURLIndex(url)]; 563 cache_->top_sites()[cache_->GetURLIndex(url)];
529 Images* image = cache_->GetImage(url); 564 Images* image = cache_->GetImage(url);
530 565
531 // When comparing the thumbnail scores, we need to take into account the 566 // When comparing the thumbnail scores, we need to take into account the
532 // redirect hops, which are not generated when the thumbnail is because the 567 // redirect hops, which are not generated when the thumbnail is because the
533 // redirects weren't known. We fill that in here since we know the redirects. 568 // redirects weren't known. We fill that in here since we know the redirects.
534 ThumbnailScore new_score_with_redirects(score); 569 ThumbnailScore new_score_with_redirects(score);
535 new_score_with_redirects.redirect_hops_from_dest = 570 new_score_with_redirects.redirect_hops_from_dest =
536 GetRedirectDistanceForURL(most_visited, url); 571 GetRedirectDistanceForURL(most_visited, url);
537 572
538 if (!ShouldReplaceThumbnailWith(image->thumbnail_score, 573 if (!ShouldReplaceThumbnailWith(image->thumbnail_score,
539 new_score_with_redirects) && 574 new_score_with_redirects) &&
540 image->thumbnail.get()) 575 image->thumbnail.get())
541 return false; // The one we already have is better. 576 return false; // The one we already have is better.
542 577
543 image->thumbnail = const_cast<base::RefCountedBytes*>(thumbnail_data); 578 image->thumbnail = const_cast<base::RefCountedMemory*>(thumbnail_data);
544 image->thumbnail_score = new_score_with_redirects; 579 image->thumbnail_score = new_score_with_redirects;
545 580
546 ResetThreadSafeImageCache(); 581 ResetThreadSafeImageCache();
547 return true; 582 return true;
548 } 583 }
549 584
550 bool TopSitesImpl::SetPageThumbnailEncoded( 585 bool TopSitesImpl::SetPageThumbnailEncoded(
551 const GURL& url, 586 const GURL& url,
552 const base::RefCountedBytes* thumbnail, 587 const base::RefCountedMemory* thumbnail,
553 const ThumbnailScore& score) { 588 const ThumbnailScore& score) {
554 if (!SetPageThumbnailNoDB(url, thumbnail, score)) 589 if (!SetPageThumbnailNoDB(url, thumbnail, score))
555 return false; 590 return false;
556 591
557 // Update the database. 592 // Update the database.
558 if (!cache_->IsKnownURL(url)) 593 if (!cache_->IsKnownURL(url))
559 return false; 594 return false;
560 595
561 size_t index = cache_->GetURLIndex(url); 596 size_t index = cache_->GetURLIndex(url);
562 const MostVisitedURL& most_visited = cache_->top_sites()[index]; 597 const MostVisitedURL& most_visited = cache_->top_sites()[index];
(...skipping 23 matching lines...) Expand all
586 void TopSitesImpl::RemoveTemporaryThumbnailByURL(const GURL& url) { 621 void TopSitesImpl::RemoveTemporaryThumbnailByURL(const GURL& url) {
587 for (TempImages::iterator i = temp_images_.begin(); i != temp_images_.end(); 622 for (TempImages::iterator i = temp_images_.begin(); i != temp_images_.end();
588 ++i) { 623 ++i) {
589 if (i->first == url) { 624 if (i->first == url) {
590 temp_images_.erase(i); 625 temp_images_.erase(i);
591 return; 626 return;
592 } 627 }
593 } 628 }
594 } 629 }
595 630
596 void TopSitesImpl::AddTemporaryThumbnail(const GURL& url, 631 void TopSitesImpl::AddTemporaryThumbnail(
597 const base::RefCountedBytes* thumbnail, 632 const GURL& url,
598 const ThumbnailScore& score) { 633 const base::RefCountedMemory* thumbnail,
634 const ThumbnailScore& score) {
599 if (temp_images_.size() == kMaxTempTopImages) 635 if (temp_images_.size() == kMaxTempTopImages)
600 temp_images_.erase(temp_images_.begin()); 636 temp_images_.erase(temp_images_.begin());
601 637
602 TempImage image; 638 TempImage image;
603 image.first = url; 639 image.first = url;
604 image.second.thumbnail = const_cast<base::RefCountedBytes*>(thumbnail); 640 image.second.thumbnail = const_cast<base::RefCountedMemory*>(thumbnail);
605 image.second.thumbnail_score = score; 641 image.second.thumbnail_score = score;
606 temp_images_.push_back(image); 642 temp_images_.push_back(image);
607 } 643 }
608 644
609 void TopSitesImpl::TimerFired() { 645 void TopSitesImpl::TimerFired() {
610 StartQueryForMostVisited(); 646 StartQueryForMostVisited();
611 } 647 }
612 648
613 // static 649 // static
614 int TopSitesImpl::GetRedirectDistanceForURL(const MostVisitedURL& most_visited, 650 int TopSitesImpl::GetRedirectDistanceForURL(const MostVisitedURL& most_visited,
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 SetTopSites(pages); 938 SetTopSites(pages);
903 939
904 // Used only in testing. 940 // Used only in testing.
905 content::NotificationService::current()->Notify( 941 content::NotificationService::current()->Notify(
906 chrome::NOTIFICATION_TOP_SITES_UPDATED, 942 chrome::NOTIFICATION_TOP_SITES_UPDATED,
907 content::Source<TopSitesImpl>(this), 943 content::Source<TopSitesImpl>(this),
908 content::Details<CancelableRequestProvider::Handle>(&handle)); 944 content::Details<CancelableRequestProvider::Handle>(&handle));
909 } 945 }
910 946
911 } // namespace history 947 } // namespace history
OLDNEW
« no previous file with comments | « chrome/browser/history/top_sites_impl.h ('k') | chrome/browser/history/top_sites_likely_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698