Index: components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
index 3c773cb94cf08942ded81dd8f04a8567d1b827a9..8e92777e9b25362b3a1d94dbf074a0b1e367fc18 100644 |
--- a/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer_unittest.cc |
@@ -12,6 +12,7 @@ |
#include "base/process/kill.h" |
#include "base/test/histogram_tester.h" |
#include "base/time/time.h" |
+#include "components/page_load_metrics/browser/metrics_navigation_throttle.h" |
#include "components/page_load_metrics/browser/page_load_metrics_observer.h" |
#include "components/page_load_metrics/common/page_load_metrics_messages.h" |
#include "content/public/browser/navigation_handle.h" |
@@ -103,6 +104,20 @@ class TestPageLoadMetricsEmbedderInterface |
} // namespace |
+class AddThrottleWebContentsObserver : public content::WebContentsObserver { |
+ public: |
+ AddThrottleWebContentsObserver(content::WebContents* contents) |
+ : content::WebContentsObserver(contents) {} |
+ |
+ void DidStartNavigation(content::NavigationHandle* handle) override { |
+ handle->RegisterThrottleForTesting( |
+ MetricsNavigationThrottle::Create(handle)); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(AddThrottleWebContentsObserver); |
+}; |
+ |
class MetricsWebContentsObserverTest |
: public content::RenderViewHostTestHarness { |
public: |
@@ -127,9 +142,11 @@ class MetricsWebContentsObserverTest |
void AttachObserver() { |
embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); |
- observer_.reset(new MetricsWebContentsObserver( |
+ observer_.reset(MetricsWebContentsObserver::CreateForWebContents( |
web_contents(), base::WrapUnique(embedder_interface_))); |
observer_->WasShown(); |
+ add_throttling_observer_.reset( |
+ new AddThrottleWebContentsObserver(web_contents())); |
} |
void CheckErrorEvent(InternalErrorLoadEvent error, int count) { |
@@ -169,6 +186,7 @@ class MetricsWebContentsObserverTest |
base::HistogramTester histogram_tester_; |
TestPageLoadMetricsEmbedderInterface* embedder_interface_; |
std::unique_ptr<MetricsWebContentsObserver> observer_; |
+ std::unique_ptr<AddThrottleWebContentsObserver> add_throttling_observer_; |
private: |
int num_errors_; |
@@ -362,8 +380,12 @@ TEST_F(MetricsWebContentsObserverTest, BadIPC) { |
} |
TEST_F(MetricsWebContentsObserverTest, ObservePartialNavigation) { |
- // Delete the observer for this test, add it once the navigation has started. |
- observer_.reset(); |
+ // Reset the state of the tests, and attach the MetricsWebContentsObserver in |
+ // the middle of a navigation. This tests that the class is robust to only |
+ // observing some of a navigation. |
+ DeleteContents(); |
+ SetContents(CreateTestWebContents()); |
+ |
PageLoadTiming timing; |
timing.navigation_start = base::Time::FromDoubleT(10); |