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 |