Chromium Code Reviews| Index: chrome/browser/page_load_metrics/observers/https_page_load_metrics_observer.cc |
| diff --git a/chrome/browser/page_load_metrics/observers/https_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/https_page_load_metrics_observer.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..092434b0b328b13f2adcec5e1e8d92f1329a5e93 |
| --- /dev/null |
| +++ b/chrome/browser/page_load_metrics/observers/https_page_load_metrics_observer.cc |
| @@ -0,0 +1,56 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/page_load_metrics/observers/https_page_load_metrics_observer.h" |
| + |
| +#include "base/metrics/histogram_macros.h" |
| +#include "url/url_constants.h" |
| + |
| +HttpsPageLoadMetricsObserver::HttpsPageLoadMetricsObserver() |
| + : time_travelled_backwards_(false) {} |
| + |
| +void HttpsPageLoadMetricsObserver::OnCommit( |
| + content::NavigationHandle* navigation_handle, |
| + bool started_in_foreground) { |
| + url_ = navigation_handle->GetURL(); |
| + if (started_in_foreground) |
| + OnShown(); |
| +} |
| + |
| +void HttpsPageLoadMetricsObserver::OnHidden() { |
| + base::Time current_time = base::Time::Now(); |
| + currently_in_foreground_ = false; |
| + |
| + // Backwards time travel can occur if (a) the device has gone through a time |
| + // machine, or (b) the client's clock was changed. Record backwards time |
| + // travel to invalidate the statistics for this page. |
| + if (last_time_shown_ > current_time) { |
|
Charlie Harrison
2016/04/25 13:20:08
If you used TimeTicks you wouldn't have to worry a
felt
2016/04/25 21:30:04
Ahh, good point. Done.
|
| + time_travelled_backwards_ = true; |
| + return; |
| + } |
| + |
| + foreground_time_ += current_time - last_time_shown_; |
| +} |
| + |
| +void HttpsPageLoadMetricsObserver::OnShown() { |
| + last_time_shown_ = base::Time::Now(); |
| + currently_in_foreground_ = true; |
| +} |
| + |
| +void HttpsPageLoadMetricsObserver::OnComplete( |
| + const page_load_metrics::PageLoadTiming& timing, |
| + const page_load_metrics::PageLoadExtraInfo& extra_info) { |
| + if (time_travelled_backwards_ || !url_.is_valid()) |
|
Charlie Harrison
2016/04/25 13:20:08
You'll also might want to filter out results if th
felt
2016/04/25 21:30:04
Good point. I've switched to using the committed U
|
| + return; |
| + |
| + if (currently_in_foreground_) |
| + OnHidden(); |
| + |
| + if (url_.SchemeIs(url::kHttpsScheme)) |
| + UMA_HISTOGRAM_LONG_TIMES_100("Navigation.Time.HTTPS", foreground_time_); |
| + else if (url_.SchemeIs(url::kHttpScheme)) |
| + UMA_HISTOGRAM_LONG_TIMES_100("Navigation.Time.HTTP", foreground_time_); |
| + else |
| + UMA_HISTOGRAM_LONG_TIMES_100("Navigation.Time.Other", foreground_time_); |
| +} |