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

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

Issue 132613002: Remove PrerenderTracker::TryCancel* methods and associated ones, since destruction of prerender onl… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 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) 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 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 406
407 PrerenderHandle* PrerenderManager::AddPrerenderForInstant( 407 PrerenderHandle* PrerenderManager::AddPrerenderForInstant(
408 const GURL& url, 408 const GURL& url,
409 content::SessionStorageNamespace* session_storage_namespace, 409 content::SessionStorageNamespace* session_storage_namespace,
410 const gfx::Size& size) { 410 const gfx::Size& size) {
411 DCHECK(chrome::ShouldPrefetchSearchResults()); 411 DCHECK(chrome::ShouldPrefetchSearchResults());
412 return AddPrerender(ORIGIN_INSTANT, -1, url, content::Referrer(), size, 412 return AddPrerender(ORIGIN_INSTANT, -1, url, content::Referrer(), size,
413 session_storage_namespace); 413 session_storage_namespace);
414 } 414 }
415 415
416 void PrerenderManager::DestroyPrerenderForRenderView(
417 int process_id, int view_id, FinalStatus final_status) {
418 DCHECK(CalledOnValidThread());
419 if (PrerenderData* prerender_data =
420 FindPrerenderDataForChildAndRoute(process_id, view_id)) {
421 prerender_data->contents()->Destroy(final_status);
422 }
423 }
424
425 void PrerenderManager::CancelAllPrerenders() { 416 void PrerenderManager::CancelAllPrerenders() {
426 DCHECK(CalledOnValidThread()); 417 DCHECK(CalledOnValidThread());
427 while (!active_prerenders_.empty()) { 418 while (!active_prerenders_.empty()) {
428 PrerenderContents* prerender_contents = 419 PrerenderContents* prerender_contents =
429 active_prerenders_.front()->contents(); 420 active_prerenders_.front()->contents();
430 prerender_contents->Destroy(FINAL_STATUS_CANCELLED); 421 prerender_contents->Destroy(FINAL_STATUS_CANCELLED);
431 } 422 }
432 } 423 }
433 424
434 bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url, 425 bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url,
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 MarkWebContentsAsWouldBePrerendered(web_contents, 584 MarkWebContentsAsWouldBePrerendered(web_contents,
594 prerender_data->contents()->origin()); 585 prerender_data->contents()->origin());
595 prerender_data->contents()->Destroy(FINAL_STATUS_WOULD_HAVE_BEEN_USED); 586 prerender_data->contents()->Destroy(FINAL_STATUS_WOULD_HAVE_BEEN_USED);
596 return NULL; 587 return NULL;
597 } 588 }
598 589
599 int child_id, route_id; 590 int child_id, route_id;
600 CHECK(prerender_data->contents()->GetChildId(&child_id)); 591 CHECK(prerender_data->contents()->GetChildId(&child_id));
601 CHECK(prerender_data->contents()->GetRouteId(&route_id)); 592 CHECK(prerender_data->contents()->GetRouteId(&route_id));
602 593
603 // Try to set the prerendered page as used, so any subsequent attempts to
604 // cancel on other threads will fail. If this fails because the prerender
605 // was already cancelled, possibly on another thread, fail.
606 if (!prerender_tracker_->TryUse(child_id, route_id))
607 return NULL;
608
609 // At this point, we've determined that we will use the prerender. 594 // At this point, we've determined that we will use the prerender.
610 if (prerender_data->pending_swap()) 595 if (prerender_data->pending_swap())
611 prerender_data->pending_swap()->set_swap_successful(true); 596 prerender_data->pending_swap()->set_swap_successful(true);
612 ScopedVector<PrerenderData>::iterator to_erase = 597 ScopedVector<PrerenderData>::iterator to_erase =
613 FindIteratorForPrerenderContents(prerender_data->contents()); 598 FindIteratorForPrerenderContents(prerender_data->contents());
614 DCHECK(active_prerenders_.end() != to_erase); 599 DCHECK(active_prerenders_.end() != to_erase);
615 DCHECK_EQ(prerender_data, *to_erase); 600 DCHECK_EQ(prerender_data, *to_erase);
616 scoped_ptr<PrerenderContents> 601 scoped_ptr<PrerenderContents>
617 prerender_contents(prerender_data->ReleaseContents()); 602 prerender_contents(prerender_data->ReleaseContents());
618 active_prerenders_.erase(to_erase); 603 active_prerenders_.erase(to_erase);
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 } 1259 }
1275 1260
1276 if (result != SessionStorageNamespace::MERGE_RESULT_MERGEABLE && 1261 if (result != SessionStorageNamespace::MERGE_RESULT_MERGEABLE &&
1277 result != SessionStorageNamespace::MERGE_RESULT_NO_TRANSACTIONS) { 1262 result != SessionStorageNamespace::MERGE_RESULT_NO_TRANSACTIONS) {
1278 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_MERGE_FAILED); 1263 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_MERGE_FAILED);
1279 prerender_data_->ClearPendingSwap(); 1264 prerender_data_->ClearPendingSwap();
1280 return; 1265 return;
1281 } 1266 }
1282 1267
1283 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPPING_IN); 1268 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPPING_IN);
1284 // Note that SwapInternal, on success, will delete |prerender_data_| and 1269
1285 // |this|. Pass in a new GURL object rather than a reference to |url_|. 1270 WebContents* new_web_contents = NULL;
1286 // 1271 // Ensure that the prerendering hasn't been destroyed in the meantime.
1287 // TODO(davidben): See about deleting PrerenderData asynchronously so this 1272 if (prerender_data_->contents()->final_status() == FINAL_STATUS_MAX) {
tburkard 2014/01/10 06:14:03 Why is this check necessary? I assume because you
jam 2014/01/10 07:45:00 Yep
tburkard 2014/01/10 09:57:12 So, when PrerenderData is destroyed, PendingSwaped
tburkard 2014/01/10 10:06:14 sorry, in the comment above, "line 845" should be
jam 2014/01/10 15:56:08 I agree that the way you describe is easier to rea
davidben 2014/01/10 16:03:09 I think I had to remove it there because SwapInter
jam 2014/01/10 16:24:09 hmm, since I'm not familiar with this code, I will
1288 // behavior is more reasonable. 1273 // Note that SwapInternal, on success, will delete |prerender_data_| and
1289 WebContents* new_web_contents = 1274 // |this|. Pass in a new GURL object rather than a reference to |url_|.
1290 manager_->SwapInternal(GURL(url_), target_contents_, prerender_data_, 1275 //
1291 should_replace_current_entry_); 1276 // TODO(davidben): See about deleting PrerenderData asynchronously so this
1277 // behavior is more reasonable.
1278
1279 new_web_contents = manager_->SwapInternal(
1280 GURL(url_), target_contents_, prerender_data_,
1281 should_replace_current_entry_);
1282 }
1283
1292 if (!new_web_contents) { 1284 if (!new_web_contents) {
1293 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPIN_FAILED); 1285 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPIN_FAILED);
1294 prerender_data_->ClearPendingSwap(); 1286 prerender_data_->ClearPendingSwap();
1295 } 1287 }
1296 } 1288 }
1297 1289
1298 void PrerenderManager::PendingSwap::OnMergeTimeout() { 1290 void PrerenderManager::PendingSwap::OnMergeTimeout() {
1299 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_TIMED_OUT); 1291 RecordEvent(PRERENDER_EVENT_MERGE_RESULT_TIMED_OUT);
1300 prerender_data_->ClearPendingSwap(); 1292 prerender_data_->ClearPendingSwap();
1301 } 1293 }
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
1867 void PrerenderManager::RecordEvent(PrerenderContents* contents, 1859 void PrerenderManager::RecordEvent(PrerenderContents* contents,
1868 PrerenderEvent event) const { 1860 PrerenderEvent event) const {
1869 if (!contents) 1861 if (!contents)
1870 histograms_->RecordEvent(ORIGIN_NONE, kNoExperiment, event); 1862 histograms_->RecordEvent(ORIGIN_NONE, kNoExperiment, event);
1871 else 1863 else
1872 histograms_->RecordEvent(contents->origin(), contents->experiment_id(), 1864 histograms_->RecordEvent(contents->origin(), contents->experiment_id(),
1873 event); 1865 event);
1874 } 1866 }
1875 1867
1876 } // namespace prerender 1868 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698