Chromium Code Reviews| Index: chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc |
| diff --git a/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5dd97e91948f6b7d410209997ee739cd2a76d1d4 |
| --- /dev/null |
| +++ b/chrome/browser/page_load_metrics/observers/previews_page_load_metrics_observer_unittest.cc |
| @@ -0,0 +1,144 @@ |
| +// 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/previews_page_load_metrics_observer.h" |
| + |
| +#include <string> |
| + |
| +#include "base/macros.h" |
| +#include "base/optional.h" |
| +#include "base/time/time.h" |
| +#include "chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h" |
| +#include "chrome/common/page_load_metrics/page_load_timing.h" |
| +#include "content/public/browser/web_contents.h" |
| + |
| +namespace previews { |
| + |
| +namespace { |
| + |
| +const char kDefaultTestUrl[] = "https://google.com"; |
|
tbansal1
2016/08/18 22:04:53
s/kDefaultTestUrl/kDefaultTestUrl1/
RyanSturm
2016/08/19 19:10:38
Done.
|
| +const char kDefaultTestUrl2[] = "https://example.com"; |
| + |
| +class TestPreviewsPageLoadMetricsObserver |
| + : public PreviewsPageLoadMetricsObserver { |
| + public: |
| + explicit TestPreviewsPageLoadMetricsObserver(bool offline_preview) |
| + : offline_preview_(offline_preview) {} |
| + ~TestPreviewsPageLoadMetricsObserver() override {} |
| + |
| + // Whether a |web_contents| is an offline pages preview. Overridden in |
|
tbansal1
2016/08/18 22:04:53
No need for comments here. Comments from the base
RyanSturm
2016/08/19 19:10:38
Done.
|
| + // testing. |
| + bool IsOfflinePreview(content::WebContents* web_contents) const override { |
| + return offline_preview_; |
| + } |
| + |
| + private: |
| + bool offline_preview_; |
| +}; |
| + |
| +} // namespace |
| + |
| +class PreviewsPageLoadMetricsObserverTest |
| + : public page_load_metrics::PageLoadMetricsObserverTestHarness { |
| + public: |
| + PreviewsPageLoadMetricsObserverTest() : is_offline_preview_(false) {} |
| + |
| + void ResetTest() { |
| + // Reset to the default testing state. Does not reset histogram state. |
| + timing_.navigation_start = base::Time::FromDoubleT(1); |
| + timing_.response_start = base::TimeDelta::FromSeconds(2); |
| + timing_.parse_start = base::TimeDelta::FromSeconds(3); |
| + timing_.first_contentful_paint = base::TimeDelta::FromSeconds(4); |
| + timing_.first_image_paint = base::TimeDelta::FromSeconds(5); |
| + timing_.first_text_paint = base::TimeDelta::FromSeconds(6); |
| + timing_.load_event_start = base::TimeDelta::FromSeconds(7); |
| + PopulateRequiredTimingFields(&timing_); |
| + } |
| + |
| + void RunTest(bool is_offline_preview) { |
| + is_offline_preview_ = is_offline_preview; |
| + NavigateAndCommit(GURL(kDefaultTestUrl)); |
| + SimulateTimingUpdate(timing_); |
| + |
| + // Navigate again to force OnComplete, which happens when a new navigation |
| + // occurs. |
| + NavigateAndCommit(GURL(kDefaultTestUrl2)); |
| + } |
| + |
| + // Verify that, if expected and actual are set, their values are equal. |
| + // Otherwise, verify that both are unset. |
| + void ExpectEqualOrUnset(const base::Optional<base::TimeDelta>& expected, |
| + const base::Optional<base::TimeDelta>& actual) { |
| + if (expected && actual) { |
| + EXPECT_EQ(expected.value(), actual.value()); |
| + } else { |
| + EXPECT_TRUE(!expected); |
| + EXPECT_TRUE(!actual); |
| + } |
| + } |
| + |
| + void ValidateHistograms() { |
| + ValidateHistogramsForSuffix( |
| + internal::kHistogramDOMContentLoadedEventFiredSuffix, |
| + timing_.dom_content_loaded_event_start); |
| + ValidateHistogramsForSuffix(internal::kHistogramFirstLayoutSuffix, |
| + timing_.first_layout); |
| + ValidateHistogramsForSuffix(internal::kHistogramLoadEventFiredSuffix, |
| + timing_.load_event_start); |
| + ValidateHistogramsForSuffix(internal::kHistogramFirstContentfulPaintSuffix, |
| + timing_.first_contentful_paint); |
| + ValidateHistogramsForSuffix(internal::kHistogramFirstImagePaintSuffix, |
| + timing_.first_image_paint); |
| + ValidateHistogramsForSuffix(internal::kHistogramFirstPaintSuffix, |
| + timing_.first_paint); |
| + ValidateHistogramsForSuffix(internal::kHistogramFirstTextPaintSuffix, |
| + timing_.first_text_paint); |
| + ValidateHistogramsForSuffix(internal::kHistogramParseStartSuffix, |
| + timing_.parse_start); |
| + } |
| + |
| + void ValidateHistogramsForSuffix( |
| + const std::string& histogram_suffix, |
| + const base::Optional<base::TimeDelta>& event) { |
| + histogram_tester().ExpectTotalCount( |
| + std::string(internal::kHistogramOfflinePreviewsPrefix) |
| + .append(histogram_suffix), |
| + is_offline_preview_ ? 1 : 0); |
| + if (!is_offline_preview_) |
| + return; |
| + histogram_tester().ExpectUniqueSample( |
| + std::string(internal::kHistogramOfflinePreviewsPrefix) |
| + .append(histogram_suffix), |
| + static_cast<base::HistogramBase::Sample>( |
| + event.value().InMilliseconds()), |
| + 1); |
| + } |
| + |
| + protected: |
| + void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override { |
| + tracker->AddObserver(base::WrapUnique( |
| + new TestPreviewsPageLoadMetricsObserver(is_offline_preview_))); |
| + } |
| + |
| + page_load_metrics::PageLoadTiming timing_; |
|
tbansal1
2016/08/18 22:04:53
Why does this need to be protected (and not privat
RyanSturm
2016/08/19 19:10:38
Done.
|
| + |
| + private: |
| + bool is_offline_preview_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PreviewsPageLoadMetricsObserverTest); |
| +}; |
| + |
| +TEST_F(PreviewsPageLoadMetricsObserverTest, NoPreview) { |
| + ResetTest(); |
| + RunTest(false); |
| + ValidateHistograms(); |
| +} |
| + |
| +TEST_F(PreviewsPageLoadMetricsObserverTest, OfflinePreviews) { |
| + ResetTest(); |
| + RunTest(true); |
| + ValidateHistograms(); |
| +} |
| + |
| +} // namespace previews |