Commit b1e4a1dd authored by Tao Bai's avatar Tao Bai Committed by Commit Bot

Decouple extension from page_load_metrics impl

Add IsExtensionUrl() in PageLoadMetricsEmbedderInterface, so we can
decouple extension from page_load_metrics implementation.

Bug: 995880
Change-Id: If4255915154302d852281af35bde3bbaf135f989
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1799030
Commit-Queue: Tao Bai <michaelbai@chromium.org>
Reviewed-by: default avatarBryan McQuade <bmcquade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697229}
parent cfb40976
......@@ -195,6 +195,14 @@ class TestPageLoadMetricsEmbedderInterface
bool IsPrerender(content::WebContents* web_contents) override {
return prerender::PrerenderContents::FromWebContents(web_contents);
}
bool IsExtensionUrl(const GURL& url) override {
#if BUILDFLAG(ENABLE_EXTENSIONS)
return url.SchemeIs(extensions::kExtensionScheme);
#else
return false;
#endif
}
const std::vector<mojom::PageLoadTimingPtr>& updated_timings() const {
return updated_timings_;
}
......
......@@ -20,11 +20,16 @@
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/resource_load_info.mojom.h"
#include "content/public/common/resource_type.h"
#include "extensions/buildflags/buildflags.h"
#include "net/base/ip_endpoint.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/web_input_event.h"
#include "url/gurl.h"
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/common/constants.h"
#endif
namespace page_load_metrics {
namespace {
......@@ -54,6 +59,14 @@ class TestPageLoadMetricsEmbedderInterface
return prerender::PrerenderContents::FromWebContents(web_contents);
}
bool IsExtensionUrl(const GURL& url) override {
#if BUILDFLAG(ENABLE_EXTENSIONS)
return url.SchemeIs(extensions::kExtensionScheme);
#else
return false;
#endif
}
private:
PageLoadMetricsObserverTester* test_;
......
......@@ -30,6 +30,7 @@ class PageLoadMetricsEmbedderInterface {
virtual void RegisterObservers(PageLoadTracker* metrics) = 0;
virtual std::unique_ptr<base::OneShotTimer> CreateTimer() = 0;
virtual bool IsPrerender(content::WebContents* web_contents) = 0;
virtual bool IsExtensionUrl(const GURL& url) = 0;
};
} // namespace page_load_metrics
......
......@@ -51,6 +51,7 @@
#include "chrome/browser/search/search.h"
#include "components/rappor/rappor_service_impl.h"
#include "content/public/browser/web_contents.h"
#include "extensions/buildflags/buildflags.h"
#include "url/gurl.h"
#if defined(OS_ANDROID)
......@@ -59,6 +60,10 @@
#include "chrome/browser/page_load_metrics/observers/session_restore_page_load_metrics_observer.h"
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "extensions/common/constants.h"
#endif
namespace chrome {
namespace {
......@@ -74,6 +79,7 @@ class PageLoadMetricsEmbedder
void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override;
std::unique_ptr<base::OneShotTimer> CreateTimer() override;
bool IsPrerender(content::WebContents* web_contents) override;
bool IsExtensionUrl(const GURL& url) override;
private:
bool IsPrerendering() const;
......@@ -194,6 +200,14 @@ bool PageLoadMetricsEmbedder::IsPrerender(content::WebContents* web_contents) {
return prerender::PrerenderContents::FromWebContents(web_contents);
}
bool PageLoadMetricsEmbedder::IsExtensionUrl(const GURL& url) {
#if BUILDFLAG(ENABLE_EXTENSIONS)
return url.SchemeIs(extensions::kExtensionScheme);
#else
return false;
#endif
}
} // namespace
void InitializePageLoadMetricsForWebContents(
......
......@@ -17,7 +17,6 @@
#include "components/page_load_metrics/common/page_load_metrics_constants.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/render_frame_host.h"
#include "extensions/common/constants.h"
#include "url/gurl.h"
namespace page_load_metrics {
......@@ -405,6 +404,7 @@ PageLoadMetricsUpdateDispatcher::PageLoadMetricsUpdateDispatcher(
content::NavigationHandle* navigation_handle,
PageLoadMetricsEmbedderInterface* embedder_interface)
: client_(client),
embedder_interface_(embedder_interface),
timer_(embedder_interface->CreateTimer()),
navigation_start_(navigation_handle->NavigationStart()),
current_merged_page_timing_(CreatePageLoadTiming()),
......@@ -438,8 +438,8 @@ void PageLoadMetricsUpdateDispatcher::UpdateMetrics(
mojom::FrameRenderDataUpdatePtr render_data,
mojom::CpuTimingPtr new_cpu_timing,
mojom::DeferredResourceCountsPtr new_deferred_resource_data) {
if (render_frame_host->GetLastCommittedURL().SchemeIs(
extensions::kExtensionScheme)) {
if (embedder_interface_->IsExtensionUrl(
render_frame_host->GetLastCommittedURL())) {
// Extensions can inject child frames into a page. We don't want to track
// these as they could skew metrics. See http://crbug.com/761037
return;
......@@ -476,8 +476,8 @@ void PageLoadMetricsUpdateDispatcher::UpdateMetrics(
void PageLoadMetricsUpdateDispatcher::UpdateFeatures(
content::RenderFrameHost* render_frame_host,
const mojom::PageLoadFeatures& new_features) {
if (render_frame_host->GetLastCommittedURL().SchemeIs(
extensions::kExtensionScheme)) {
if (embedder_interface_->IsExtensionUrl(
render_frame_host->GetLastCommittedURL())) {
// Extensions can inject child frames into a page. We don't want to track
// these as they could skew metrics. See http://crbug.com/761037
return;
......
......@@ -195,6 +195,9 @@ class PageLoadMetricsUpdateDispatcher {
// The client is guaranteed to outlive this object.
Client* const client_;
// Interface to chrome features. Must outlive the class.
PageLoadMetricsEmbedderInterface* const embedder_interface_;
std::unique_ptr<base::OneShotTimer> timer_;
// Time the navigation for this page load was initiated.
......
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