Index: chrome/renderer/net/net_error_helper_core.cc |
diff --git a/chrome/renderer/net/net_error_helper_core.cc b/chrome/renderer/net/net_error_helper_core.cc |
index d888a1afcc7382268fc6115989ae66a529f3b467..1928cf558238d3151f3b7ec560be581b89e8bfe2 100644 |
--- a/chrome/renderer/net/net_error_helper_core.cc |
+++ b/chrome/renderer/net/net_error_helper_core.cc |
@@ -253,6 +253,8 @@ struct NetErrorHelperCore::ErrorPageInfo { |
: error(error), |
was_failed_post(was_failed_post), |
needs_dns_updates(false), |
+ reload_button_in_page(false), |
+ load_stale_button_in_page(false), |
is_finished_loading(false) { |
} |
@@ -278,6 +280,10 @@ struct NetErrorHelperCore::ErrorPageInfo { |
// the blank page is loading, to get rid of these. |
std::string navigation_correction_request_body; |
+ // Track if specific buttons are included in an error page, for statistics. |
+ bool reload_button_in_page; |
+ bool load_stale_button_in_page; |
+ |
// True if a page has completed loading, at which point it can receive |
// updates. |
bool is_finished_loading; |
@@ -298,7 +304,8 @@ NetErrorHelperCore::NetErrorHelperCore(Delegate* delegate) |
// TODO(ellyjones): Make online_ accurate at object creation. |
online_(true), |
auto_reload_count_(0), |
- can_auto_reload_page_(false) { |
+ can_auto_reload_page_(false), |
+ navigation_from_button_(NO_BUTTON) { |
} |
NetErrorHelperCore::~NetErrorHelperCore() { |
@@ -356,6 +363,18 @@ void NetErrorHelperCore::OnCommitLoad(FrameType frame_type) { |
if (frame_type != MAIN_FRAME) |
return; |
+ // Track if an error occurred due to a page button press. |
+ if (committed_error_page_info_ && pending_error_page_info_ && |
+ navigation_from_button_ != NO_BUTTON) { |
+ DCHECK(navigation_from_button_ == RELOAD_BUTTON || |
+ navigation_from_button_ == LOAD_STALE_BUTTON); |
+ chrome_common_net::RecordEvent( |
+ navigation_from_button_ == RELOAD_BUTTON ? |
+ chrome_common_net::RELOAD_BUTTON_ERROR_EVENT : |
+ chrome_common_net::LOAD_STALE_BUTTON_ERROR_EVENT); |
+ } |
+ navigation_from_button_ = NO_BUTTON; |
mmenke
2014/04/09 15:59:26
Problem: Navigate to foo.com/, get an error. Cli
Randy Smith (Not in Mondays)
2014/04/10 21:51:01
Good point. I added in a test to make sure it was
mmenke
2014/04/11 19:42:32
This still isn't perfect, but it's probably good e
Randy Smith (Not in Mondays)
2014/04/14 22:02:13
I've added a comment, but I'd like to get a design
davidben
2014/04/15 22:04:38
Hrm. So I don't entirely follow what's going on he
|
+ |
if (committed_error_page_info_ && !pending_error_page_info_ && |
can_auto_reload_page_) { |
int reason = committed_error_page_info_->error.reason; |
@@ -384,11 +403,16 @@ void NetErrorHelperCore::OnFinishLoad(FrameType frame_type) { |
committed_error_page_info_->is_finished_loading = true; |
- // Only enable stale cache JS bindings if this wasn't a post. |
- if (!committed_error_page_info_->was_failed_post) { |
- delegate_->EnableStaleLoadBindings( |
- committed_error_page_info_->error.unreachableURL); |
- } |
+ chrome_common_net::RecordEvent(chrome_common_net::PAGE_SHOWN_EVENT); |
+ if (committed_error_page_info_->reload_button_in_page) |
+ chrome_common_net::RecordEvent( |
+ chrome_common_net::RELOAD_BUTTON_SHOWN_EVENT); |
+ if (committed_error_page_info_->load_stale_button_in_page) |
+ chrome_common_net::RecordEvent( |
+ chrome_common_net::LOAD_STALE_BUTTON_SHOWN_EVENT); |
mmenke
2014/04/09 15:59:26
nit: Use braces on multi-line if's (x2).
Randy Smith (Not in Mondays)
2014/04/10 21:51:01
Done.
|
+ |
+ delegate_->EnablePageHelperFunctions( |
+ committed_error_page_info_->error.unreachableURL); |
if (committed_error_page_info_->navigation_correction_url.is_valid()) { |
// If there is another pending error page load, |fix_url| should have been |
@@ -466,14 +490,24 @@ void NetErrorHelperCore::GenerateLocalErrorPage( |
delegate_->GenerateLocalizedErrorPage( |
GetUpdatedError(error), is_failed_post, params.Pass(), |
+ &pending_error_page_info_->reload_button_in_page, |
+ &pending_error_page_info_->load_stale_button_in_page, |
error_html); |
pending_error_page_info_->needs_dns_updates = true; |
return; |
} |
} |
- delegate_->GenerateLocalizedErrorPage(error, is_failed_post, |
- params.Pass(), error_html); |
+ bool reload_button_in_page = false; |
+ bool load_stale_button_in_page = false; |
+ delegate_->GenerateLocalizedErrorPage( |
+ error, is_failed_post, params.Pass(), |
+ &reload_button_in_page, &load_stale_button_in_page, error_html); |
+ if (pending_error_page_info_.get()) { |
mmenke
2014/04/09 15:59:26
nit: .get() not needed.
Randy Smith (Not in Mondays)
2014/04/10 21:51:01
Done.
|
+ pending_error_page_info_->reload_button_in_page = reload_button_in_page; |
+ pending_error_page_info_->load_stale_button_in_page = |
+ load_stale_button_in_page; |
+ } |
} |
void NetErrorHelperCore::OnNetErrorInfo( |
@@ -518,6 +552,9 @@ void NetErrorHelperCore::UpdateErrorPage() { |
if (last_probe_status_ != chrome_common_net::DNS_PROBE_STARTED) |
committed_error_page_info_->needs_dns_updates = false; |
+ // We don't worry about the button display statistics here because |
+ // the presentation of the reload and load stale buttons can't be |
+ // changed by a DNS error update. |
mmenke
2014/04/09 15:59:26
nit: Don't use we in comments.
Randy Smith (Not in Mondays)
2014/04/10 21:51:01
Done.
|
delegate_->UpdateErrorPage( |
GetUpdatedError(committed_error_page_info_->error), |
committed_error_page_info_->was_failed_post); |
@@ -650,3 +687,30 @@ bool NetErrorHelperCore::ShouldSuppressErrorPage(FrameType frame_type, |
MaybeStartAutoReloadTimer(); |
return true; |
} |
+ |
+void NetErrorHelperCore::ExecuteButtonPress(Button button) { |
+ switch (button) { |
+ case RELOAD_BUTTON: |
+ chrome_common_net::RecordEvent( |
+ chrome_common_net::RELOAD_BUTTON_CLICKED_EVENT); |
+ navigation_from_button_ = RELOAD_BUTTON; |
+ Reload(); |
+ return; |
+ case LOAD_STALE_BUTTON: |
+ chrome_common_net::RecordEvent( |
+ chrome_common_net::LOAD_STALE_BUTTON_CLICKED_EVENT); |
+ navigation_from_button_ = LOAD_STALE_BUTTON; |
+ delegate_->LoadPageFromCache( |
+ committed_error_page_info_->error.unreachableURL); |
+ return; |
+ case MORE_BUTTON: |
+ // Visual effects on page are handled in Javascript code. |
+ chrome_common_net::RecordEvent( |
+ chrome_common_net::MORE_BUTTON_CLICKED_EVENT); |
+ return; |
+ case NO_BUTTON: |
+ NOTREACHED(); |
+ return; |
+ } |
+} |
+ |