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

Side by Side Diff: chrome/browser/tab_contents/tab_contents.cc

Issue 6246007: Generate thumbnails in the browser process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move scroll offset into ViewHostMsg_UpdateRect_Params Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/tab_contents/tab_contents.h" 5 #include "chrome/browser/tab_contents/tab_contents.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 #include "chrome/browser/search_engines/template_url_fetcher_ui_callbacks.h" 68 #include "chrome/browser/search_engines/template_url_fetcher_ui_callbacks.h"
69 #include "chrome/browser/search_engines/template_url_model.h" 69 #include "chrome/browser/search_engines/template_url_model.h"
70 #include "chrome/browser/sessions/session_types.h" 70 #include "chrome/browser/sessions/session_types.h"
71 #include "chrome/browser/tab_contents/infobar_delegate.h" 71 #include "chrome/browser/tab_contents/infobar_delegate.h"
72 #include "chrome/browser/tab_contents/interstitial_page.h" 72 #include "chrome/browser/tab_contents/interstitial_page.h"
73 #include "chrome/browser/tab_contents/navigation_entry.h" 73 #include "chrome/browser/tab_contents/navigation_entry.h"
74 #include "chrome/browser/tab_contents/provisional_load_details.h" 74 #include "chrome/browser/tab_contents/provisional_load_details.h"
75 #include "chrome/browser/tab_contents/tab_contents_delegate.h" 75 #include "chrome/browser/tab_contents/tab_contents_delegate.h"
76 #include "chrome/browser/tab_contents/tab_contents_ssl_helper.h" 76 #include "chrome/browser/tab_contents/tab_contents_ssl_helper.h"
77 #include "chrome/browser/tab_contents/tab_contents_view.h" 77 #include "chrome/browser/tab_contents/tab_contents_view.h"
78 #include "chrome/browser/tab_contents/thumbnail_generator.h"
78 #include "chrome/browser/tab_contents/web_navigation_observer.h" 79 #include "chrome/browser/tab_contents/web_navigation_observer.h"
79 #include "chrome/browser/translate/page_translated_details.h" 80 #include "chrome/browser/translate/page_translated_details.h"
80 #include "chrome/browser/ui/app_modal_dialogs/message_box_handler.h" 81 #include "chrome/browser/ui/app_modal_dialogs/message_box_handler.h"
81 #include "chrome/browser/ui/find_bar/find_bar_state.h" 82 #include "chrome/browser/ui/find_bar/find_bar_state.h"
82 #include "chrome/common/bindings_policy.h" 83 #include "chrome/common/bindings_policy.h"
83 #include "chrome/common/chrome_switches.h" 84 #include "chrome/common/chrome_switches.h"
84 #include "chrome/common/content_restriction.h" 85 #include "chrome/common/content_restriction.h"
85 #include "chrome/common/extensions/extension.h" 86 #include "chrome/common/extensions/extension.h"
86 #include "chrome/common/extensions/extension_action.h" 87 #include "chrome/common/extensions/extension_action.h"
87 #include "chrome/common/extensions/extension_icon_set.h" 88 #include "chrome/common/extensions/extension_icon_set.h"
88 #include "chrome/common/extensions/extension_resource.h" 89 #include "chrome/common/extensions/extension_resource.h"
89 #include "chrome/common/extensions/url_pattern.h" 90 #include "chrome/common/extensions/url_pattern.h"
90 #include "chrome/common/navigation_types.h" 91 #include "chrome/common/navigation_types.h"
91 #include "chrome/common/net/url_request_context_getter.h" 92 #include "chrome/common/net/url_request_context_getter.h"
92 #include "chrome/common/notification_service.h" 93 #include "chrome/common/notification_service.h"
93 #include "chrome/common/pref_names.h" 94 #include "chrome/common/pref_names.h"
94 #include "chrome/common/render_messages.h" 95 #include "chrome/common/render_messages.h"
95 #include "chrome/common/render_messages_params.h" 96 #include "chrome/common/render_messages_params.h"
97 #include "chrome/common/thumbnail_score.h"
96 #include "chrome/common/url_constants.h" 98 #include "chrome/common/url_constants.h"
97 #include "gfx/codec/png_codec.h" 99 #include "gfx/codec/png_codec.h"
98 #include "grit/chromium_strings.h" 100 #include "grit/chromium_strings.h"
99 #include "grit/generated_resources.h" 101 #include "grit/generated_resources.h"
100 #include "grit/locale_settings.h" 102 #include "grit/locale_settings.h"
101 #include "grit/platform_locale_settings.h" 103 #include "grit/platform_locale_settings.h"
102 #include "grit/theme_resources.h" 104 #include "grit/theme_resources.h"
103 #include "net/base/net_util.h" 105 #include "net/base/net_util.h"
104 #include "net/base/registry_controlled_domain.h" 106 #include "net/base/registry_controlled_domain.h"
105 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 107 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
(...skipping 2119 matching lines...) Expand 10 before | Expand all | Expand 10 after
2225 // or the favicon url wasn't obtained before the load started. This assumes 2227 // or the favicon url wasn't obtained before the load started. This assumes
2226 // the later. 2228 // the later.
2227 // TODO(sky): Need a way to set the favicon that doesn't involve generating 2229 // TODO(sky): Need a way to set the favicon that doesn't involve generating
2228 // its url. 2230 // its url.
2229 new_url->SetFavIconURL(TemplateURL::GenerateFaviconURL(params.referrer)); 2231 new_url->SetFavIconURL(TemplateURL::GenerateFaviconURL(params.referrer));
2230 } 2232 }
2231 new_url->set_safe_for_autoreplace(true); 2233 new_url->set_safe_for_autoreplace(true);
2232 url_model->Add(new_url); 2234 url_model->Add(new_url);
2233 } 2235 }
2234 2236
2237 void TabContents::UpdateThumbnailIfNecessary(const GURL& url) {
brettw 2011/01/21 00:09:17 I'm always trying to get people to not add stuff t
satorux1 2011/01/21 04:53:43 That's a good idea. Moved accordingly.
2238 if (profile()->IsOffTheRecord() ||
2239 (url.SchemeIs("chrome") && url.host() == "newtab"))
2240 return;
2241 // TODO(satorux): Add more conditions here to avoid unnecessary
2242 // thumbnail generation.
2243
2244 ThumbnailGenerator* generator = g_browser_process->GetThumbnailGenerator();
2245 const int options = ThumbnailGenerator::kClippedThumbnail;
2246 ThumbnailGenerator::ClipResult clip_result = ThumbnailGenerator::kNotClipped;
2247 SkBitmap thumbnail = generator->GetThumbnailForRendererWithOptions(
2248 render_view_host(), options, &clip_result);
2249 // Failed to generate a thumbnail. Maybe the tab is in the background?
2250 if (thumbnail.isNull())
2251 return;
2252
2253 // Compute the thumbnail score.
2254 ThumbnailScore score;
2255 score.at_top = (render_view_host()->last_scroll_offset().height() == 0);
2256 score.boring_score = ThumbnailGenerator::CalculateBoringScore(&thumbnail);
2257 score.good_clipping =
2258 (clip_result == ThumbnailGenerator::kTallerThanWide ||
2259 clip_result == ThumbnailGenerator::kNotClipped);
2260
2261 history::TopSites* top_sites = profile()->GetTopSites();
2262 top_sites->SetPageThumbnail(url, thumbnail, score);
2263 VLOG(1) << "Thumbnail taken for " << url
2264 << ", at_top: " << score.at_top
2265 << ", boring_score: " << score.boring_score
2266 << ", good_clipping: " << score.good_clipping;
2267 }
2268
2235 void TabContents::OnUserGesture() { 2269 void TabContents::OnUserGesture() {
2236 // See comment in RenderViewHostDelegate::OnUserGesture as to why we do this. 2270 // See comment in RenderViewHostDelegate::OnUserGesture as to why we do this.
2237 DownloadRequestLimiter* limiter = 2271 DownloadRequestLimiter* limiter =
2238 g_browser_process->download_request_limiter(); 2272 g_browser_process->download_request_limiter();
2239 if (limiter) 2273 if (limiter)
2240 limiter->OnUserGesture(this); 2274 limiter->OnUserGesture(this);
2241 ExternalProtocolHandler::PermitLaunchUrl(); 2275 ExternalProtocolHandler::PermitLaunchUrl();
2242 } 2276 }
2243 2277
2244 void TabContents::OnFindReply(int request_id, 2278 void TabContents::OnFindReply(int request_id,
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2371 } 2405 }
2372 #endif 2406 #endif
2373 2407
2374 language_state_.LanguageDetermined(language, page_translatable); 2408 language_state_.LanguageDetermined(language, page_translatable);
2375 2409
2376 std::string lang = language; 2410 std::string lang = language;
2377 NotificationService::current()->Notify( 2411 NotificationService::current()->Notify(
2378 NotificationType::TAB_LANGUAGE_DETERMINED, 2412 NotificationType::TAB_LANGUAGE_DETERMINED,
2379 Source<TabContents>(this), 2413 Source<TabContents>(this),
2380 Details<std::string>(&lang)); 2414 Details<std::string>(&lang));
2415
2416 // Generate the thumbnail here if the in-browser thumbnailing is enabled.
2417 if (CommandLine::ForCurrentProcess()->HasSwitch(
2418 switches::kEnableInBrowserThumbnailing)) {
2419 UpdateThumbnailIfNecessary(url);
2420 }
2381 } 2421 }
2382 2422
2383 void TabContents::OnPageTranslated(int32 page_id, 2423 void TabContents::OnPageTranslated(int32 page_id,
2384 const std::string& original_lang, 2424 const std::string& original_lang,
2385 const std::string& translated_lang, 2425 const std::string& translated_lang,
2386 TranslateErrors::Type error_type) { 2426 TranslateErrors::Type error_type) {
2387 language_state_.set_current_language(translated_lang); 2427 language_state_.set_current_language(translated_lang);
2388 language_state_.set_translation_pending(false); 2428 language_state_.set_translation_pending(false);
2389 PageTranslatedDetails details(original_lang, translated_lang, error_type); 2429 PageTranslatedDetails details(original_lang, translated_lang, error_type);
2390 NotificationService::current()->Notify( 2430 NotificationService::current()->Notify(
(...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after
3386 if (pm != NULL) { 3426 if (pm != NULL) {
3387 if (pm->MaybeUsePreloadedPage(this, url)) { 3427 if (pm->MaybeUsePreloadedPage(this, url)) {
3388 // TODO(tburkard): If the preloaded page has not finished preloading 3428 // TODO(tburkard): If the preloaded page has not finished preloading
3389 // yet, we should not do this. 3429 // yet, we should not do this.
3390 DidStopLoading(); 3430 DidStopLoading();
3391 return true; 3431 return true;
3392 } 3432 }
3393 } 3433 }
3394 return false; 3434 return false;
3395 } 3435 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698