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

Side by Side Diff: chrome/browser/prerender/prerender_manager.cc

Issue 10918189: Add PrerenderStatusEvent on Prerenders (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: rebase to trunk, remove some unrelated fixes... Created 8 years, 1 month 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) 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/prerender/prerender_manager.h" 5 #include "chrome/browser/prerender/prerender_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 221
222 PrerenderManager::~PrerenderManager() { 222 PrerenderManager::~PrerenderManager() {
223 } 223 }
224 224
225 void PrerenderManager::Shutdown() { 225 void PrerenderManager::Shutdown() {
226 DoShutdown(); 226 DoShutdown();
227 } 227 }
228 228
229 PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender( 229 PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
230 int process_id, 230 int process_id,
231 int prerender_id,
231 int route_id, 232 int route_id,
232 const GURL& url, 233 const GURL& url,
233 const content::Referrer& referrer, 234 const content::Referrer& referrer,
234 const gfx::Size& size) { 235 const gfx::Size& size) {
235 #if defined(OS_ANDROID) 236 #if defined(OS_ANDROID)
236 // TODO(jcivelli): http://crbug.com/113322 We should have an option to disable 237 // TODO(jcivelli): http://crbug.com/113322 We should have an option to disable
237 // link-prerender and enable omnibox-prerender only. 238 // link-prerender and enable omnibox-prerender only.
238 return NULL; 239 return NULL;
239 #else 240 #else
240 DCHECK(!size.IsEmpty()); 241 DCHECK(!size.IsEmpty());
(...skipping 15 matching lines...) Expand all
256 session_storage_namespace = 257 session_storage_namespace =
257 source_web_contents->GetController() 258 source_web_contents->GetController()
258 .GetDefaultSessionStorageNamespace(); 259 .GetDefaultSessionStorageNamespace();
259 } 260 }
260 261
261 if (PrerenderData* parent_prerender_data = 262 if (PrerenderData* parent_prerender_data =
262 FindPrerenderDataForChildAndRoute(process_id, route_id)) { 263 FindPrerenderDataForChildAndRoute(process_id, route_id)) {
263 // Instead of prerendering from inside of a running prerender, we will defer 264 // Instead of prerendering from inside of a running prerender, we will defer
264 // this request until its launcher is made visible. 265 // this request until its launcher is made visible.
265 if (PrerenderContents* contents = parent_prerender_data->contents_) { 266 if (PrerenderContents* contents = parent_prerender_data->contents_) {
266 pending_prerender_list_.push_back( 267 pending_prerender_list_.push_back(linked_ptr<PrerenderData>(
267 linked_ptr<PrerenderData>(new PrerenderData(this))); 268 new PrerenderData(this)));
268 PrerenderHandle* prerender_handle = 269 PrerenderHandle* prerender_handle =
269 new PrerenderHandle(pending_prerender_list_.back().get()); 270 new PrerenderHandle(pending_prerender_list_.back().get());
270 contents->AddPendingPrerender( 271 contents->AddPendingPrerender(
271 prerender_handle->weak_ptr_factory_.GetWeakPtr(), origin, 272 prerender_handle->weak_ptr_factory_.GetWeakPtr(), origin,
272 url, referrer, size); 273 url, referrer, size);
273 return prerender_handle; 274 return prerender_handle;
274 } 275 }
275 } 276 }
276 277
277 return AddPrerender(origin, process_id, url, referrer, size, 278 return AddPrerender(origin, process_id, prerender_id, url, referrer, size,
278 session_storage_namespace); 279 session_storage_namespace);
279 #endif 280 #endif
280 } 281 }
281 282
282 PrerenderHandle* PrerenderManager::AddPrerenderFromOmnibox( 283 PrerenderHandle* PrerenderManager::AddPrerenderFromOmnibox(
283 const GURL& url, 284 const GURL& url,
284 SessionStorageNamespace* session_storage_namespace, 285 SessionStorageNamespace* session_storage_namespace,
285 const gfx::Size& size) { 286 const gfx::Size& size) {
286 if (!IsOmniboxEnabled(profile_)) 287 if (!IsOmniboxEnabled(profile_))
287 return NULL; 288 return NULL;
288 return AddPrerender(ORIGIN_OMNIBOX, -1, url, content::Referrer(), size, 289 return AddPrerender(ORIGIN_OMNIBOX, -1, -1, url, content::Referrer(), size,
289 session_storage_namespace); 290 session_storage_namespace);
290 } 291 }
291 292
292 void PrerenderManager::DestroyPrerenderForRenderView( 293 void PrerenderManager::DestroyPrerenderForRenderView(
293 int process_id, int view_id, FinalStatus final_status) { 294 int process_id, int view_id, FinalStatus final_status) {
294 DCHECK(CalledOnValidThread()); 295 DCHECK(CalledOnValidThread());
295 if (PrerenderData* prerender_data = 296 if (PrerenderData* prerender_data =
296 FindPrerenderDataForChildAndRoute(process_id, view_id)) { 297 FindPrerenderDataForChildAndRoute(process_id, view_id)) {
297 prerender_data->contents_->Destroy(final_status); 298 prerender_data->contents_->Destroy(final_status);
298 } 299 }
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 DCHECK(existing_prerender_handle->IsValid()); 907 DCHECK(existing_prerender_handle->IsValid());
907 DCHECK(existing_prerender_handle->IsPending()); 908 DCHECK(existing_prerender_handle->IsPending());
908 909
909 DVLOG(6) << "StartPendingPrerender"; 910 DVLOG(6) << "StartPendingPrerender";
910 DVLOG(6) << "existing_prerender_handle->handle_count_ = " << 911 DVLOG(6) << "existing_prerender_handle->handle_count_ = " <<
911 existing_prerender_handle->prerender_data_->handle_count_; 912 existing_prerender_handle->prerender_data_->handle_count_;
912 913
913 DCHECK(process_id == -1 || session_storage_namespace); 914 DCHECK(process_id == -1 || session_storage_namespace);
914 915
915 scoped_ptr<PrerenderHandle> swap_prerender_handle(AddPrerender( 916 scoped_ptr<PrerenderHandle> swap_prerender_handle(AddPrerender(
916 origin, process_id, url, referrer, size, session_storage_namespace)); 917 origin, process_id, -1, url, referrer, size, session_storage_namespace));
917 if (swap_prerender_handle.get()) { 918 if (swap_prerender_handle.get()) {
918 // AddPrerender has returned a new prerender handle to us. We want to make 919 // AddPrerender has returned a new prerender handle to us. We want to make
919 // |existing_prerender_handle| active, so swap the underlying PrerenderData 920 // |existing_prerender_handle| active, so swap the underlying PrerenderData
920 // between the two handles, and delete our old handle (which will release 921 // between the two handles, and delete our old handle (which will release
921 // our entry in the pending_prerender_list_). 922 // our entry in the pending_prerender_list_).
922 existing_prerender_handle->SwapPrerenderDataWith( 923 existing_prerender_handle->SwapPrerenderDataWith(
923 swap_prerender_handle.get()); 924 swap_prerender_handle.get());
924 swap_prerender_handle->OnCancel(); 925 swap_prerender_handle->OnCancel();
925 return; 926 return;
926 } 927 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 on_close_tab_contents_deleters_.clear(); 980 on_close_tab_contents_deleters_.clear();
980 profile_ = NULL; 981 profile_ = NULL;
981 982
982 DCHECK(active_prerender_list_.empty()); 983 DCHECK(active_prerender_list_.empty());
983 } 984 }
984 985
985 // private 986 // private
986 PrerenderHandle* PrerenderManager::AddPrerender( 987 PrerenderHandle* PrerenderManager::AddPrerender(
987 Origin origin, 988 Origin origin,
988 int process_id, 989 int process_id,
990 int prerender_id,
989 const GURL& url_arg, 991 const GURL& url_arg,
990 const content::Referrer& referrer, 992 const content::Referrer& referrer,
991 const gfx::Size& size, 993 const gfx::Size& size,
992 SessionStorageNamespace* session_storage_namespace) { 994 SessionStorageNamespace* session_storage_namespace) {
993 DCHECK(CalledOnValidThread()); 995 DCHECK(CalledOnValidThread());
994 996
995 if (!IsEnabled()) 997 if (!IsEnabled())
996 return NULL; 998 return NULL;
997 999
998 if ((origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN || 1000 if ((origin == ORIGIN_LINK_REL_PRERENDER_CROSSDOMAIN ||
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 this, prerender_contents, GetExpiryTimeForNewPrerender()))); 1066 this, prerender_contents, GetExpiryTimeForNewPrerender())));
1065 1067
1066 PrerenderHandle* prerender_handle = 1068 PrerenderHandle* prerender_handle =
1067 new PrerenderHandle(active_prerender_list_.back().get()); 1069 new PrerenderHandle(active_prerender_list_.back().get());
1068 1070
1069 last_prerender_start_time_ = GetCurrentTimeTicks(); 1071 last_prerender_start_time_ = GetCurrentTimeTicks();
1070 1072
1071 gfx::Size contents_size = 1073 gfx::Size contents_size =
1072 size.IsEmpty() ? config_.default_tab_bounds.size() : size; 1074 size.IsEmpty() ? config_.default_tab_bounds.size() : size;
1073 1075
1074 prerender_contents->StartPrerendering(process_id, contents_size, 1076 prerender_contents->StartPrerendering(process_id, prerender_id, contents_size,
1075 session_storage_namespace, 1077 session_storage_namespace,
1076 control_group_behavior); 1078 control_group_behavior);
1077 1079
1078 while (active_prerender_list_.size() > config_.max_concurrency) { 1080 while (active_prerender_list_.size() > config_.max_concurrency) {
1079 prerender_contents = active_prerender_list_.front()->contents_; 1081 prerender_contents = active_prerender_list_.front()->contents_;
1080 DCHECK(prerender_contents); 1082 DCHECK(prerender_contents);
1081 prerender_contents->Destroy(FINAL_STATUS_EVICTED); 1083 prerender_contents->Destroy(FINAL_STATUS_EVICTED);
1082 } 1084 }
1083 1085
1084 histograms_->RecordConcurrency(active_prerender_list_.size(), 1086 histograms_->RecordConcurrency(active_prerender_list_.size(),
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 if (!render_process_host || !render_process_host->GetBrowserContext()) 1374 if (!render_process_host || !render_process_host->GetBrowserContext())
1373 return NULL; 1375 return NULL;
1374 Profile* profile = Profile::FromBrowserContext( 1376 Profile* profile = Profile::FromBrowserContext(
1375 render_process_host->GetBrowserContext()); 1377 render_process_host->GetBrowserContext());
1376 if (!profile) 1378 if (!profile)
1377 return NULL; 1379 return NULL;
1378 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1380 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1379 } 1381 }
1380 1382
1381 } // namespace prerender 1383 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698