Commit 60e0b50a authored by Tao Bai's avatar Tao Bai Committed by Commit Bot

Decouple prerender from page_load_metrics impl

Added IsPrerender() in PageLoadMetricsEmbedderInterface, so we can
decouple prerender from page_load_metrics implementation.

Bug: 995880
Change-Id: I5088afc7a80f3a050e09f1a827a1d80767a41f1e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1796314Reviewed-by: default avatarBryan McQuade <bmcquade@chromium.org>
Commit-Queue: Tao Bai <michaelbai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#695414}
parent 76a6ebf8
......@@ -16,7 +16,6 @@
#include "chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
#include "chrome/browser/page_load_metrics/page_load_tracker.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "components/page_load_metrics/common/page_load_timing.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/global_request_id.h"
......@@ -95,9 +94,7 @@ MetricsWebContentsObserver::MetricsWebContentsObserver(
page_load_metrics_binding_(web_contents, this) {
// Prerenders erroneously report that they are initially visible, so we
// manually override visibility state for prerender.
const bool is_prerender =
prerender::PrerenderContents::FromWebContents(web_contents) != nullptr;
if (is_prerender)
if (embedder_interface_->IsPrerender(web_contents))
in_foreground_ = false;
RegisterInputEventObserver(web_contents->GetRenderViewHost());
......
......@@ -17,6 +17,7 @@
#include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
#include "chrome/browser/page_load_metrics/page_load_tracker.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/page_load_metrics/common/test/weak_mock_timer.h"
......@@ -184,6 +185,9 @@ class TestPageLoadMetricsEmbedderInterface
SetMockTimer(timer->AsWeakPtr());
return std::move(timer);
}
bool IsPrerender(content::WebContents* web_contents) override {
return prerender::PrerenderContents::FromWebContents(web_contents);
}
const std::vector<mojom::PageLoadTimingPtr>& updated_timings() const {
return updated_timings_;
}
......
......@@ -12,6 +12,7 @@
#include "base/timer/timer.h"
#include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
#include "content/public/browser/media_player_id.h"
#include "content/public/browser/render_frame_host.h"
......@@ -49,6 +50,10 @@ class TestPageLoadMetricsEmbedderInterface
return std::move(timer);
}
bool IsPrerender(content::WebContents* web_contents) override {
return prerender::PrerenderContents::FromWebContents(web_contents);
}
private:
PageLoadMetricsObserverTester* test_;
......
......@@ -13,6 +13,10 @@ namespace base {
class OneShotTimer;
} // namespace base
namespace content {
class WebContents;
} // namespace content
namespace page_load_metrics {
class PageLoadTracker;
......@@ -25,6 +29,7 @@ class PageLoadMetricsEmbedderInterface {
virtual bool IsNewTabPageUrl(const GURL& url) = 0;
virtual void RegisterObservers(PageLoadTracker* metrics) = 0;
virtual std::unique_ptr<base::OneShotTimer> CreateTimer() = 0;
virtual bool IsPrerender(content::WebContents* web_contents) = 0;
};
} // namespace page_load_metrics
......
......@@ -72,6 +72,7 @@ class PageLoadMetricsEmbedder
bool IsNewTabPageUrl(const GURL& url) override;
void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override;
std::unique_ptr<base::OneShotTimer> CreateTimer() override;
bool IsPrerender(content::WebContents* web_contents) override;
private:
bool IsPrerendering() const;
......@@ -186,6 +187,10 @@ bool PageLoadMetricsEmbedder::IsNewTabPageUrl(const GURL& url) {
return search::IsInstantNTPURL(url, profile);
}
bool PageLoadMetricsEmbedder::IsPrerender(content::WebContents* web_contents) {
return prerender::PrerenderContents::FromWebContents(web_contents);
}
} // namespace
void InitializePageLoadMetricsForWebContents(
......
......@@ -13,10 +13,8 @@
#include "base/metrics/histogram_macros.h"
#include "base/time/default_tick_clock.h"
#include "base/trace_event/trace_event.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface.h"
#include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "components/page_load_metrics/common/page_load_timing.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_handle.h"
......@@ -199,11 +197,8 @@ PageLoadTracker::PageLoadTracker(
UMA_HISTOGRAM_BOOLEAN(internal::kPageLoadStartedInForeground,
started_in_foreground_);
const bool is_prerender = prerender::PrerenderContents::FromWebContents(
navigation_handle->GetWebContents()) != nullptr;
if (is_prerender) {
if (embedder_interface_->IsPrerender(navigation_handle->GetWebContents()))
UMA_HISTOGRAM_BOOLEAN(internal::kPageLoadPrerender, true);
}
}
PageLoadTracker::~PageLoadTracker() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment