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 ba0fbf0d6b9ddaeb76cca2ee656e642e998dc6e6..2b199c209f32a9736337244bc4b2ecdc89b103b1 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 |
@@ -38,18 +38,14 @@ const char kFilteredCommitUrl[] = "https://whatever.com/ignore-on-commit"; |
// Simple PageLoadMetricsObserver that copies observed PageLoadTimings into the |
// provided std::vector, so they can be analyzed by unit tests. |
-class TestPageLoadMetricsObserver |
- : public PageLoadMetricsObserver, |
- public MetricsWebContentsObserver::TestingObserver { |
+class TestPageLoadMetricsObserver : public PageLoadMetricsObserver { |
public: |
TestPageLoadMetricsObserver( |
- content::WebContents* web_contents, |
std::vector<mojom::PageLoadTimingPtr>* updated_timings, |
std::vector<mojom::PageLoadTimingPtr>* updated_subframe_timings, |
std::vector<mojom::PageLoadTimingPtr>* complete_timings, |
std::vector<GURL>* observed_committed_urls) |
- : MetricsWebContentsObserver::TestingObserver(web_contents), |
- updated_timings_(updated_timings), |
+ : updated_timings_(updated_timings), |
updated_subframe_timings_(updated_subframe_timings), |
complete_timings_(complete_timings), |
observed_committed_urls_(observed_committed_urls) {} |
@@ -61,17 +57,13 @@ class TestPageLoadMetricsObserver |
return CONTINUE_OBSERVING; |
} |
- void OnTimingUpdate(const mojom::PageLoadTiming& timing, |
+ void OnTimingUpdate(bool is_subframe, |
+ const mojom::PageLoadTiming& timing, |
const PageLoadExtraInfo& extra_info) override { |
- updated_timings_->push_back(timing.Clone()); |
- } |
- |
- void OnTimingUpdated(bool is_main_frame, |
- const mojom::PageLoadTiming& timing, |
- const mojom::PageLoadMetadata& metadata) override { |
- if (!is_main_frame) { |
+ if (is_subframe) |
updated_subframe_timings_->push_back(timing.Clone()); |
- } |
+ else |
+ updated_timings_->push_back(timing.Clone()); |
} |
void OnComplete(const mojom::PageLoadTiming& timing, |
@@ -126,16 +118,14 @@ class FilteringPageLoadMetricsObserver : public PageLoadMetricsObserver { |
class TestPageLoadMetricsEmbedderInterface |
: public PageLoadMetricsEmbedderInterface { |
public: |
- explicit TestPageLoadMetricsEmbedderInterface( |
- content::WebContents* web_contents) |
- : web_contents_(web_contents), is_ntp_(false) {} |
+ TestPageLoadMetricsEmbedderInterface() : is_ntp_(false) {} |
bool IsNewTabPageUrl(const GURL& url) override { return is_ntp_; } |
void set_is_ntp(bool is_ntp) { is_ntp_ = is_ntp; } |
void RegisterObservers(PageLoadTracker* tracker) override { |
tracker->AddObserver(base::MakeUnique<TestPageLoadMetricsObserver>( |
- web_contents_, &updated_timings_, &updated_subframe_timings_, |
- &complete_timings_, &observed_committed_urls_)); |
+ &updated_timings_, &updated_subframe_timings_, &complete_timings_, |
+ &observed_committed_urls_)); |
tracker->AddObserver(base::MakeUnique<FilteringPageLoadMetricsObserver>( |
&completed_filtered_urls_)); |
} |
@@ -166,7 +156,6 @@ class TestPageLoadMetricsEmbedderInterface |
std::vector<mojom::PageLoadTimingPtr> complete_timings_; |
std::vector<GURL> observed_committed_urls_; |
std::vector<GURL> completed_filtered_urls_; |
- content::WebContents* web_contents_; |
bool is_ntp_; |
}; |
@@ -192,20 +181,16 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness { |
void SimulateTimingUpdate(const mojom::PageLoadTiming& timing, |
content::RenderFrameHost* render_frame_host) { |
- observer_->OnTimingUpdated(render_frame_host, timing, |
- mojom::PageLoadMetadata()); |
+ observer()->OnTimingUpdated(render_frame_host, timing, |
+ mojom::PageLoadMetadata()); |
} |
void AttachObserver() { |
- embedder_interface_ = |
- new TestPageLoadMetricsEmbedderInterface(web_contents()); |
- // 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(); |
+ embedder_interface_ = new TestPageLoadMetricsEmbedderInterface(); |
Charlie Harrison
2017/05/25 19:35:33
optional nit to avoid bare new (I know this is old
Bryan McQuade
2017/05/25 19:54:05
Good idea, this makes it clearer that we're holdin
|
+ MetricsWebContentsObserver* observer = |
+ MetricsWebContentsObserver::CreateForWebContents( |
+ web_contents(), base::WrapUnique(embedder_interface_)); |
+ observer->WasShown(); |
} |
void CheckErrorEvent(InternalErrorLoadEvent error, int count) { |
@@ -255,9 +240,12 @@ class MetricsWebContentsObserverTest : public ChromeRenderViewHostTestHarness { |
} |
protected: |
+ MetricsWebContentsObserver* observer() { |
+ return MetricsWebContentsObserver::FromWebContents(web_contents()); |
+ } |
+ |
base::HistogramTester histogram_tester_; |
TestPageLoadMetricsEmbedderInterface* embedder_interface_; |
- MetricsWebContentsObserver* observer_; |
private: |
int num_errors_; |
@@ -648,7 +636,7 @@ TEST_F(MetricsWebContentsObserverTest, FlushMetricsOnAppEnterBackground) { |
histogram_tester_.ExpectTotalCount( |
internal::kPageLoadCompletedAfterAppBackground, 0); |
- observer_->FlushMetricsOnAppEnterBackground(); |
+ observer()->FlushMetricsOnAppEnterBackground(); |
histogram_tester_.ExpectTotalCount( |
internal::kPageLoadCompletedAfterAppBackground, 1); |