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

Side by Side Diff: chrome/browser/page_load_metrics/page_load_metrics_initialize.cc

Issue 2423383002: [Prerender] first contentful paint histograms. (Closed)
Patch Set: MSVC compilation error Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/page_load_metrics/page_load_metrics_initialize.h" 5 #include "chrome/browser/page_load_metrics/page_load_metrics_initialize.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h" 9 #include "chrome/browser/page_load_metrics/metrics_web_contents_observer.h"
10 #if defined(OS_ANDROID) 10 #if defined(OS_ANDROID)
11 #include "chrome/browser/page_load_metrics/observers/android_page_load_metrics_o bserver.h" 11 #include "chrome/browser/page_load_metrics/observers/android_page_load_metrics_o bserver.h"
12 #endif // OS_ANDROID 12 #endif // OS_ANDROID
13 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h" 13 #include "chrome/browser/page_load_metrics/observers/aborts_page_load_metrics_ob server.h"
14 #include "chrome/browser/page_load_metrics/observers/amp_page_load_metrics_obser ver.h" 14 #include "chrome/browser/page_load_metrics/observers/amp_page_load_metrics_obser ver.h"
15 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h" 15 #include "chrome/browser/page_load_metrics/observers/core_page_load_metrics_obse rver.h"
16 #include "chrome/browser/page_load_metrics/observers/css_scanning_page_load_metr ics_observer.h" 16 #include "chrome/browser/page_load_metrics/observers/css_scanning_page_load_metr ics_observer.h"
17 #include "chrome/browser/page_load_metrics/observers/data_reduction_proxy_metric s_observer.h" 17 #include "chrome/browser/page_load_metrics/observers/data_reduction_proxy_metric s_observer.h"
18 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h" 18 #include "chrome/browser/page_load_metrics/observers/document_write_page_load_me trics_observer.h"
19 #include "chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_ observer.h" 19 #include "chrome/browser/page_load_metrics/observers/from_gws_page_load_metrics_ observer.h"
20 #include "chrome/browser/page_load_metrics/observers/google_captcha_observer.h" 20 #include "chrome/browser/page_load_metrics/observers/google_captcha_observer.h"
21 #include "chrome/browser/page_load_metrics/observers/https_engagement_metrics/ht tps_engagement_page_load_metrics_observer.h" 21 #include "chrome/browser/page_load_metrics/observers/https_engagement_metrics/ht tps_engagement_page_load_metrics_observer.h"
22 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h" 22 #include "chrome/browser/page_load_metrics/observers/no_state_prefetch_page_load _metrics_observer.h"
23 #include "chrome/browser/page_load_metrics/observers/prerender_page_load_metrics _observer.h"
23 #include "chrome/browser/page_load_metrics/observers/previews_page_load_metrics_ observer.h" 24 #include "chrome/browser/page_load_metrics/observers/previews_page_load_metrics_ observer.h"
24 #include "chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_ observer.h" 25 #include "chrome/browser/page_load_metrics/observers/protocol_page_load_metrics_ observer.h"
25 #include "chrome/browser/page_load_metrics/observers/service_worker_page_load_me trics_observer.h" 26 #include "chrome/browser/page_load_metrics/observers/service_worker_page_load_me trics_observer.h"
26 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface. h" 27 #include "chrome/browser/page_load_metrics/page_load_metrics_embedder_interface. h"
27 #include "chrome/browser/page_load_metrics/page_load_tracker.h" 28 #include "chrome/browser/page_load_metrics/page_load_tracker.h"
28 #include "chrome/browser/prerender/prerender_contents.h" 29 #include "chrome/browser/prerender/prerender_contents.h"
29 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
30 #include "chrome/browser/search/search.h" 31 #include "chrome/browser/search/search.h"
31 #include "components/rappor/rappor_service_impl.h" 32 #include "components/rappor/rappor_service_impl.h"
32 #include "content/public/browser/web_contents.h" 33 #include "content/public/browser/web_contents.h"
33 #include "url/gurl.h" 34 #include "url/gurl.h"
34 35
35 namespace chrome { 36 namespace chrome {
36 37
37 namespace { 38 namespace {
38 39
39 class PageLoadMetricsEmbedder 40 class PageLoadMetricsEmbedder
40 : public page_load_metrics::PageLoadMetricsEmbedderInterface { 41 : public page_load_metrics::PageLoadMetricsEmbedderInterface {
41 public: 42 public:
42 explicit PageLoadMetricsEmbedder(content::WebContents* web_contents); 43 explicit PageLoadMetricsEmbedder(content::WebContents* web_contents);
43 ~PageLoadMetricsEmbedder() override; 44 ~PageLoadMetricsEmbedder() override;
44 45
45 // page_load_metrics::PageLoadMetricsEmbedderInterface: 46 // page_load_metrics::PageLoadMetricsEmbedderInterface:
46 bool IsPrerendering(content::WebContents* web_contents) override;
47 bool IsNewTabPageUrl(const GURL& url) override; 47 bool IsNewTabPageUrl(const GURL& url) override;
48 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override; 48 void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override;
49 49
50 private: 50 private:
51 bool IsPrerendering() const;
52
51 content::WebContents* const web_contents_; 53 content::WebContents* const web_contents_;
52 54
53 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsEmbedder); 55 DISALLOW_COPY_AND_ASSIGN(PageLoadMetricsEmbedder);
54 }; 56 };
55 57
56 PageLoadMetricsEmbedder::PageLoadMetricsEmbedder( 58 PageLoadMetricsEmbedder::PageLoadMetricsEmbedder(
57 content::WebContents* web_contents) 59 content::WebContents* web_contents)
58 : web_contents_(web_contents) {} 60 : web_contents_(web_contents) {}
59 61
60 PageLoadMetricsEmbedder::~PageLoadMetricsEmbedder() {} 62 PageLoadMetricsEmbedder::~PageLoadMetricsEmbedder() {}
61 63
62 void PageLoadMetricsEmbedder::RegisterObservers( 64 void PageLoadMetricsEmbedder::RegisterObservers(
63 page_load_metrics::PageLoadTracker* tracker) { 65 page_load_metrics::PageLoadTracker* tracker) {
64 // These classes are owned by the metrics. 66 if (!IsPrerendering()) {
65 tracker->AddObserver(base::MakeUnique<AbortsPageLoadMetricsObserver>()); 67 tracker->AddObserver(base::MakeUnique<AbortsPageLoadMetricsObserver>());
66 tracker->AddObserver(base::MakeUnique<AMPPageLoadMetricsObserver>()); 68 tracker->AddObserver(base::MakeUnique<AMPPageLoadMetricsObserver>());
67 tracker->AddObserver(base::MakeUnique<CorePageLoadMetricsObserver>()); 69 tracker->AddObserver(base::MakeUnique<CorePageLoadMetricsObserver>());
68 tracker->AddObserver( 70 tracker->AddObserver(
69 base::MakeUnique< 71 base::MakeUnique<
70 data_reduction_proxy::DataReductionProxyMetricsObserver>()); 72 data_reduction_proxy::DataReductionProxyMetricsObserver>());
71 tracker->AddObserver(base::MakeUnique<FromGWSPageLoadMetricsObserver>()); 73 tracker->AddObserver(base::MakeUnique<FromGWSPageLoadMetricsObserver>());
72 tracker->AddObserver( 74 tracker->AddObserver(
73 base::MakeUnique<google_captcha_observer::GoogleCaptchaObserver>()); 75 base::MakeUnique<google_captcha_observer::GoogleCaptchaObserver>());
74 tracker->AddObserver( 76 tracker->AddObserver(
75 base::MakeUnique<DocumentWritePageLoadMetricsObserver>()); 77 base::MakeUnique<DocumentWritePageLoadMetricsObserver>());
76 tracker->AddObserver( 78 tracker->AddObserver(
77 base::WrapUnique(new previews::PreviewsPageLoadMetricsObserver())); 79 base::WrapUnique(new previews::PreviewsPageLoadMetricsObserver()));
78 tracker->AddObserver( 80 tracker->AddObserver(
79 base::MakeUnique<ServiceWorkerPageLoadMetricsObserver>()); 81 base::MakeUnique<ServiceWorkerPageLoadMetricsObserver>());
80 tracker->AddObserver(base::MakeUnique<HttpsEngagementPageLoadMetricsObserver>( 82 tracker->AddObserver(
81 web_contents_->GetBrowserContext())); 83 base::MakeUnique<HttpsEngagementPageLoadMetricsObserver>(
82 tracker->AddObserver(base::MakeUnique<CssScanningMetricsObserver>()); 84 web_contents_->GetBrowserContext()));
83 tracker->AddObserver(base::MakeUnique<ProtocolPageLoadMetricsObserver>()); 85 tracker->AddObserver(base::MakeUnique<CssScanningMetricsObserver>());
84 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver> 86 tracker->AddObserver(base::MakeUnique<ProtocolPageLoadMetricsObserver>());
85 no_state_prefetch_observer = 87 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver>
86 NoStatePrefetchPageLoadMetricsObserver::CreateIfNeeded(web_contents_); 88 no_state_prefetch_observer =
87 if (no_state_prefetch_observer) 89 NoStatePrefetchPageLoadMetricsObserver::CreateIfNeeded(
88 tracker->AddObserver(std::move(no_state_prefetch_observer)); 90 web_contents_);
91 if (no_state_prefetch_observer)
92 tracker->AddObserver(std::move(no_state_prefetch_observer));
89 #if defined(OS_ANDROID) 93 #if defined(OS_ANDROID)
90 tracker->AddObserver( 94 tracker->AddObserver(
91 base::MakeUnique<AndroidPageLoadMetricsObserver>(web_contents_)); 95 base::MakeUnique<AndroidPageLoadMetricsObserver>(web_contents_));
92 #endif // OS_ANDROID 96 #endif // OS_ANDROID
97 } else {
98 std::unique_ptr<page_load_metrics::PageLoadMetricsObserver>
99 prerender_observer =
100 PrerenderPageLoadMetricsObserver::CreateIfNeeded(web_contents_);
101 if (prerender_observer)
102 tracker->AddObserver(std::move(prerender_observer));
103 }
93 } 104 }
94 105
95 bool PageLoadMetricsEmbedder::IsPrerendering( 106 bool PageLoadMetricsEmbedder::IsPrerendering() const {
96 content::WebContents* web_contents) { 107 return prerender::PrerenderContents::FromWebContents(web_contents_) !=
97 return prerender::PrerenderContents::FromWebContents(web_contents) != nullptr; 108 nullptr;
98 } 109 }
99 110
100 bool PageLoadMetricsEmbedder::IsNewTabPageUrl(const GURL& url) { 111 bool PageLoadMetricsEmbedder::IsNewTabPageUrl(const GURL& url) {
101 Profile* profile = 112 Profile* profile =
102 Profile::FromBrowserContext(web_contents_->GetBrowserContext()); 113 Profile::FromBrowserContext(web_contents_->GetBrowserContext());
103 if (!profile) 114 if (!profile)
104 return false; 115 return false;
105 return search::IsInstantNTPURL(url, profile); 116 return search::IsInstantNTPURL(url, profile);
106 } 117 }
107 118
108 } // namespace 119 } // namespace
109 120
110 void InitializePageLoadMetricsForWebContents( 121 void InitializePageLoadMetricsForWebContents(
111 content::WebContents* web_contents) { 122 content::WebContents* web_contents) {
112 page_load_metrics::MetricsWebContentsObserver::CreateForWebContents( 123 page_load_metrics::MetricsWebContentsObserver::CreateForWebContents(
113 web_contents, base::MakeUnique<PageLoadMetricsEmbedder>(web_contents)); 124 web_contents, base::MakeUnique<PageLoadMetricsEmbedder>(web_contents));
114 } 125 }
115 126
116 } // namespace chrome 127 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698