Chromium Code Reviews| Index: chrome/browser/prerender/prerender_contents.cc |
| =================================================================== |
| --- chrome/browser/prerender/prerender_contents.cc (revision 109294) |
| +++ chrome/browser/prerender/prerender_contents.cc (working copy) |
| @@ -203,7 +203,7 @@ |
| } |
| bool PrerenderContents::Init() { |
| - return AddAliasURL(prerender_url_); |
| + return AddAliasURL(prerender_url_, false/*destroy_on_failure*/); |
| } |
| // static |
| @@ -349,11 +349,14 @@ |
| void PrerenderContents::set_final_status(FinalStatus final_status) { |
| DCHECK(final_status >= FINAL_STATUS_USED && final_status < FINAL_STATUS_MAX); |
| DCHECK(final_status_ == FINAL_STATUS_MAX || |
| - final_status_ == FINAL_STATUS_CONTROL_GROUP); |
| + final_status_ == FINAL_STATUS_CONTROL_GROUP || |
| + final_status_ == FINAL_STATUS_MATCH_COMPLETE_DUMMY); |
| - // Don't override final_status_ if it's FINAL_STATUS_CONTROL_GROUP, |
| - // otherwise data will be collected in the Prerender.FinalStatus histogram. |
| - if (final_status_ == FINAL_STATUS_CONTROL_GROUP) |
| + // Don't override final_status_ if it's FINAL_STATUS_CONTROL_GROUP or |
| + // FINAL_STATUS_MATCH_COMPLETE_DUMMY, otherwise data will be collected |
| + // in the Prerender.FinalStatus histogram. |
| + if (final_status_ == FINAL_STATUS_CONTROL_GROUP || |
| + final_status_ == FINAL_STATUS_MATCH_COMPLETE_DUMMY) |
| return; |
| final_status_ = final_status; |
| @@ -363,11 +366,13 @@ |
| DCHECK(final_status_ != FINAL_STATUS_MAX); |
| DCHECK(prerendering_has_been_cancelled_ || |
| final_status_ == FINAL_STATUS_USED || |
| - final_status_ == FINAL_STATUS_CONTROL_GROUP); |
| + final_status_ == FINAL_STATUS_CONTROL_GROUP || |
| + final_status_ == FINAL_STATUS_MATCH_COMPLETE_DUMMY); |
| DCHECK(origin_ != ORIGIN_MAX); |
| // If we haven't even started prerendering, we were just in the control |
| - // group, which means we do not want to record the status. |
| + // group (or a match complete dummy), which means we do not want to record |
| + // the status. |
| if (prerendering_has_started()) |
| prerender_manager_->RecordFinalStatus(origin_, experiment_id_, |
| final_status_); |
| @@ -409,7 +414,8 @@ |
| CHECK(resource_redirect_details); |
| if (resource_redirect_details->resource_type() == |
| ResourceType::MAIN_FRAME) { |
| - if (!AddAliasURL(resource_redirect_details->new_url())) |
| + if (!AddAliasURL(resource_redirect_details->new_url(), |
| + true/*destroy_on_failure*/)) |
| return; |
| } |
| break; |
| @@ -480,19 +486,22 @@ |
| } |
| } |
| -bool PrerenderContents::AddAliasURL(const GURL& url) { |
| +bool PrerenderContents::AddAliasURL(const GURL& url, bool destroy_on_failure) { |
|
dominich
2011/11/11 20:02:09
How does the caller know what final status to give
|
| const bool http = url.SchemeIs(chrome::kHttpScheme); |
| const bool https = url.SchemeIs(chrome::kHttpsScheme); |
| if (!(http || https)) { |
| - Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); |
| + if (destroy_on_failure) |
| + Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); |
| return false; |
| } |
| if (https && !prerender_manager_->config().https_allowed) { |
| - Destroy(FINAL_STATUS_HTTPS); |
| + if (destroy_on_failure) |
| + Destroy(FINAL_STATUS_HTTPS); |
| return false; |
| } |
| if (prerender_manager_->HasRecentlyBeenNavigatedTo(url)) { |
| - Destroy(FINAL_STATUS_RECENTLY_VISITED); |
| + if (destroy_on_failure) |
| + Destroy(FINAL_STATUS_RECENTLY_VISITED); |
| return false; |
| } |
| @@ -533,7 +542,7 @@ |
| bool is_error_page, |
| RenderViewHost* render_view_host) { |
| if (is_main_frame) { |
| - if (!AddAliasURL(validated_url)) |
| + if (!AddAliasURL(validated_url, true/*destroy_on_failure*/)) |
| return; |
| // Usually, this event fires if the user clicks or enters a new URL. |
| @@ -579,7 +588,7 @@ |
| prerendering_has_been_cancelled_ = true; |
| // This has to be done after setting the final status, as it adds the |
| // prerender to the history. |
| - prerender_manager_->MoveEntryToPendingDelete(this); |
| + prerender_manager_->MoveEntryToPendingDelete(this, final_status); |
| // We may destroy the PrerenderContents before we have initialized the |
| // RenderViewHost. Otherwise set the Observer's PrerenderContents to NULL to |