Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6690)

Unified Diff: chrome/browser/page_load_metrics/metrics_web_contents_observer_unittest.cc

Issue 2903693004: Make PageLoadMetricsWaiter more resilient (Closed)
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698