Index: chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc |
diff --git a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc b/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc |
index 7a9383e415b3ac539e902283ed1f1bdd2ba553c3..b9c30965d7eb7df20110a92d74e970163c7bdcd8 100644 |
--- a/chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc |
+++ b/chrome/browser/page_load_metrics/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 "chrome/browser/page_load_metrics/metrics_navigation_throttle.h" |
#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h" |
#include "chrome/common/page_load_metrics/page_load_metrics_messages.h" |
#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
@@ -104,7 +105,8 @@ class TestPageLoadMetricsEmbedderInterface |
} // namespace |
-class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness { |
+class MetricsWebContentsObserverTest |
Charlie Harrison
2016/07/28 01:29:59
Fixed this formatting in next CL.
|
+ : public ChromeRenderViewHostTestHarness { |
public: |
MetricsWebContentsObserverTest() : num_errors_(0) {} |
@@ -127,8 +129,12 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness { |
void AttachObserver() { |
embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); |
- observer_.reset(new MetricsWebContentsObserver( |
- web_contents(), base::WrapUnique(embedder_interface_))); |
+ // Owned by the web_contents. Tests must be careful not to call |
+ // SimulateTimingUpdate after they call DeleteContents() without also |
+ // calling AttachObserver() again. Otherwise they will use-after-free the |
+ // observer_. |
+ observer_ = MetricsWebContentsObserver::CreateForWebContents( |
+ web_contents(), base::WrapUnique(embedder_interface_)); |
observer_->WasShown(); |
} |
@@ -168,7 +174,7 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness { |
protected: |
base::HistogramTester histogram_tester_; |
TestPageLoadMetricsEmbedderInterface* embedder_interface_; |
- std::unique_ptr<MetricsWebContentsObserver> observer_; |
+ MetricsWebContentsObserver* observer_; |
private: |
int num_errors_; |
@@ -362,8 +368,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); |