Chromium Code Reviews| Index: chrome/browser/prerender/prerender_contents.cc |
| =================================================================== |
| --- chrome/browser/prerender/prerender_contents.cc (revision 86287) |
| +++ chrome/browser/prerender/prerender_contents.cc (working copy) |
| @@ -137,6 +137,7 @@ |
| has_stopped_loading_(false), |
| final_status_(FINAL_STATUS_MAX), |
| prerendering_has_started_(false), |
| + prerendering_has_been_cancelled_(false), |
| child_id_(-1), |
| route_id_(-1) { |
| DCHECK(prerender_manager != NULL); |
| @@ -364,6 +365,9 @@ |
| PrerenderContents::~PrerenderContents() { |
| DCHECK(final_status_ != FINAL_STATUS_MAX); |
| + DCHECK(prerendering_has_been_cancelled_ || |
| + final_status_ == FINAL_STATUS_USED || |
| + final_status_ == FINAL_STATUS_CONTROL_GROUP); |
| // If we haven't even started prerendering, we were just in the control |
| // group, which means we do not want to record the status. |
| @@ -710,9 +714,12 @@ |
| } |
| void PrerenderContents::Destroy(FinalStatus final_status) { |
| - if (prerender_manager_->IsPendingDelete(this)) |
| + if (prerendering_has_been_cancelled_) |
| return; |
| + prerendering_has_been_cancelled_ = true; |
| + prerender_manager_->MoveEntryToPendingDelete(this); |
|
cbentzel
2011/05/23 18:51:28
Is there a reason MoveEntryToPendingDelete moved u
mmenke
2011/05/23 18:55:36
Yes, it's just for style - prerender_has_been_canc
|
| + |
| if (child_id_ != -1 && route_id_ != -1) { |
| // Cancel the prerender in the PrerenderTracker. This is needed |
| // because destroy may be called directly from the UI thread without calling |
| @@ -730,9 +737,8 @@ |
| NOTREACHED(); |
| } |
| } |
| + set_final_status(final_status); |
| - prerender_manager_->MoveEntryToPendingDelete(this); |
| - set_final_status(final_status); |
| // We may destroy the PrerenderContents before we have initialized the |
| // RenderViewHost. Otherwise set the Observer's PrerenderContents to NULL to |
| // avoid any more messages being sent. |