| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/thumbnails/thumbnail_tab_helper.h" | 5 #include "chrome/browser/thumbnails/thumbnail_tab_helper.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/history/top_sites.h" | 9 #include "chrome/browser/history/top_sites.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 gfx::Rect copy_rect = gfx::Rect(view->GetViewBounds().size()); | 397 gfx::Rect copy_rect = gfx::Rect(view->GetViewBounds().size()); |
| 398 // Clip the pixels that will commonly hold a scrollbar, which looks bad in | 398 // Clip the pixels that will commonly hold a scrollbar, which looks bad in |
| 399 // thumbnails. | 399 // thumbnails. |
| 400 int scrollbar_size = gfx::scrollbar_size(); | 400 int scrollbar_size = gfx::scrollbar_size(); |
| 401 copy_rect.Inset(0, 0, scrollbar_size, scrollbar_size); | 401 copy_rect.Inset(0, 0, scrollbar_size, scrollbar_size); |
| 402 ClipResult clip_result = ThumbnailTabHelper::kUnprocessed; | 402 ClipResult clip_result = ThumbnailTabHelper::kUnprocessed; |
| 403 copy_rect = GetClippingRect(copy_rect.size(), | 403 copy_rect = GetClippingRect(copy_rect.size(), |
| 404 gfx::Size(kThumbnailWidth, kThumbnailHeight), | 404 gfx::Size(kThumbnailWidth, kThumbnailHeight), |
| 405 &clip_result); | 405 &clip_result); |
| 406 gfx::Size copy_size = GetCopySizeForThumbnail(view); | 406 gfx::Size copy_size = GetCopySizeForThumbnail(view); |
| 407 skia::PlatformCanvas* temp_canvas = new skia::PlatformCanvas; | 407 skia::PlatformBitmap* temp_bitmap = new skia::PlatformBitmap; |
| 408 render_widget_host->CopyFromBackingStore( | 408 render_widget_host->CopyFromBackingStore( |
| 409 copy_rect, | 409 copy_rect, |
| 410 copy_size, | 410 copy_size, |
| 411 base::Bind(&ThumbnailTabHelper::UpdateThumbnailWithCanvas, | 411 base::Bind(&ThumbnailTabHelper::UpdateThumbnailWithCanvas, |
| 412 weak_factory_.GetWeakPtr(), | 412 weak_factory_.GetWeakPtr(), |
| 413 web_contents, | 413 web_contents, |
| 414 clip_result, | 414 clip_result, |
| 415 base::Owned(temp_canvas)), | 415 base::Owned(temp_bitmap)), |
| 416 temp_canvas); | 416 temp_bitmap); |
| 417 } | 417 } |
| 418 | 418 |
| 419 void ThumbnailTabHelper::UpdateThumbnailWithBitmap( | 419 void ThumbnailTabHelper::UpdateThumbnailWithBitmap( |
| 420 WebContents* web_contents, | 420 WebContents* web_contents, |
| 421 ClipResult clip_result, | 421 ClipResult clip_result, |
| 422 const SkBitmap& bitmap) { | 422 const SkBitmap& bitmap) { |
| 423 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 423 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 424 if (bitmap.isNull() || bitmap.empty()) | 424 if (bitmap.isNull() || bitmap.empty()) |
| 425 return; | 425 return; |
| 426 | 426 |
| 427 SkBitmap thumbnail = CreateThumbnail(bitmap, | 427 SkBitmap thumbnail = CreateThumbnail(bitmap, |
| 428 GetThumbnailSizeInPixel(), | 428 GetThumbnailSizeInPixel(), |
| 429 &clip_result); | 429 &clip_result); |
| 430 UpdateThumbnail(web_contents, thumbnail, clip_result); | 430 UpdateThumbnail(web_contents, thumbnail, clip_result); |
| 431 } | 431 } |
| 432 | 432 |
| 433 void ThumbnailTabHelper::UpdateThumbnailWithCanvas( | 433 void ThumbnailTabHelper::UpdateThumbnailWithCanvas( |
| 434 WebContents* web_contents, | 434 WebContents* web_contents, |
| 435 ClipResult clip_result, | 435 ClipResult clip_result, |
| 436 skia::PlatformCanvas* temp_canvas, | 436 skia::PlatformBitmap* temp_bitmap, |
| 437 bool succeeded) { | 437 bool succeeded) { |
| 438 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 438 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 439 if (!succeeded) | 439 if (!succeeded) |
| 440 return; | 440 return; |
| 441 | 441 |
| 442 SkBitmap bitmap = skia::GetTopDevice(*temp_canvas)->accessBitmap(false); | 442 SkBitmap bitmap = temp_bitmap->GetBitmap(); |
| 443 UpdateThumbnailWithBitmap(web_contents, clip_result, bitmap); | 443 UpdateThumbnailWithBitmap(web_contents, clip_result, bitmap); |
| 444 } | 444 } |
| 445 | 445 |
| 446 bool ThumbnailTabHelper::ShouldUpdateThumbnail(Profile* profile, | 446 bool ThumbnailTabHelper::ShouldUpdateThumbnail(Profile* profile, |
| 447 history::TopSites* top_sites, | 447 history::TopSites* top_sites, |
| 448 const GURL& url) { | 448 const GURL& url) { |
| 449 if (!profile || !top_sites) | 449 if (!profile || !top_sites) |
| 450 return false; | 450 return false; |
| 451 // Skip if it's in the incognito mode. | 451 // Skip if it's in the incognito mode. |
| 452 if (profile->IsOffTheRecord()) | 452 if (profile->IsOffTheRecord()) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 475 void ThumbnailTabHelper::DidStartLoading( | 475 void ThumbnailTabHelper::DidStartLoading( |
| 476 content::RenderViewHost* render_view_host) { | 476 content::RenderViewHost* render_view_host) { |
| 477 load_interrupted_ = false; | 477 load_interrupted_ = false; |
| 478 } | 478 } |
| 479 | 479 |
| 480 void ThumbnailTabHelper::StopNavigation() { | 480 void ThumbnailTabHelper::StopNavigation() { |
| 481 // This function gets called when the page loading is interrupted by the | 481 // This function gets called when the page loading is interrupted by the |
| 482 // stop button. | 482 // stop button. |
| 483 load_interrupted_ = true; | 483 load_interrupted_ = true; |
| 484 } | 484 } |
| OLD | NEW |