123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "weblayer/browser/page_load_metrics_initialize.h"
- #include <memory>
- #include <utility>
- #include "base/bind.h"
- #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
- #include "components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h"
- #include "components/page_load_metrics/browser/page_load_metrics_embedder_base.h"
- #include "components/page_load_metrics/browser/page_load_metrics_memory_tracker.h"
- #include "components/page_load_metrics/browser/page_load_metrics_observer.h"
- #include "components/page_load_metrics/browser/page_load_tracker.h"
- #include "weblayer/browser/heavy_ad_service_factory.h"
- #include "weblayer/browser/i18n_util.h"
- #include "weblayer/browser/no_state_prefetch/no_state_prefetch_utils.h"
- #include "weblayer/browser/page_load_metrics_observer_impl.h"
- #include "weblayer/browser/weblayer_page_load_metrics_memory_tracker_factory.h"
- namespace content {
- class BrowserContext;
- } // namespace content
- namespace page_load_metrics {
- class PageLoadMetricsMemoryTracker;
- } // namespace page_load_metrics
- namespace weblayer {
- namespace {
- base::RepeatingCallback<void(page_load_metrics::PageLoadTracker*)>*
- g_callback_for_testing;
- class PageLoadMetricsEmbedder
- : public page_load_metrics::PageLoadMetricsEmbedderBase {
- public:
- PageLoadMetricsEmbedder(const PageLoadMetricsEmbedder&) = delete;
- PageLoadMetricsEmbedder& operator=(const PageLoadMetricsEmbedder&) = delete;
- explicit PageLoadMetricsEmbedder(content::WebContents* web_contents)
- : PageLoadMetricsEmbedderBase(web_contents) {}
- ~PageLoadMetricsEmbedder() override = default;
- // page_load_metrics::PageLoadMetricsEmbedderBase:
- bool IsNewTabPageUrl(const GURL& url) override { return false; }
- bool IsNoStatePrefetch(content::WebContents* web_contents) override {
- return NoStatePrefetchContentsFromWebContents(web_contents);
- }
- bool IsExtensionUrl(const GURL& url) override { return false; }
- bool IsSidePanel(content::WebContents* web_contents) override {
- // The side panel is not supported in WebLayer so this always returns false.
- return false;
- }
- page_load_metrics::PageLoadMetricsMemoryTracker*
- GetMemoryTrackerForBrowserContext(
- content::BrowserContext* browser_context) override {
- if (!base::FeatureList::IsEnabled(features::kV8PerFrameMemoryMonitoring))
- return nullptr;
- return WeblayerPageLoadMetricsMemoryTrackerFactory::GetForBrowserContext(
- browser_context);
- }
- protected:
- // page_load_metrics::PageLoadMetricsEmbedderBase:
- void RegisterEmbedderObservers(
- page_load_metrics::PageLoadTracker* tracker) override {
- tracker->AddObserver(std::make_unique<PageLoadMetricsObserverImpl>());
- if (!IsNoStatePrefetch(web_contents())) {
- std::unique_ptr<page_load_metrics::AdsPageLoadMetricsObserver>
- ads_observer =
- page_load_metrics::AdsPageLoadMetricsObserver::CreateIfNeeded(
- tracker->GetWebContents(),
- HeavyAdServiceFactory::GetForBrowserContext(
- tracker->GetWebContents()->GetBrowserContext()),
- base::BindRepeating(&i18n::GetApplicationLocale));
- if (ads_observer)
- tracker->AddObserver(std::move(ads_observer));
- }
- if (g_callback_for_testing)
- (*g_callback_for_testing).Run(tracker);
- }
- };
- } // namespace
- void InitializePageLoadMetricsForWebContents(
- content::WebContents* web_contents) {
- // Change this method? consider to modify the peer in
- // android_webview/browser/page_load_metrics/page_load_metrics_initialize.cc
- // chrome/browser/page_load_metrics/page_load_metrics_initialize.cc
- // as well.
- page_load_metrics::MetricsWebContentsObserver::CreateForWebContents(
- web_contents, std::make_unique<PageLoadMetricsEmbedder>(web_contents));
- }
- void SetRegisterEmbedderObserversForTesting(
- base::RepeatingCallback<void(page_load_metrics::PageLoadTracker*)>*
- callback) {
- g_callback_for_testing = callback;
- }
- } // namespace weblayer
|