1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_DOCUMENT_WRITE_PAGE_LOAD_METRICS_OBSERVER_H_ 6 #define CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_DOCUMENT_WRITE_PAGE_LOAD_METRICS_OBSERVER_H_ 7 8 #include "base/macros.h" 9 #include "components/page_load_metrics/browser/page_load_metrics_observer.h" 10 11 namespace internal { 12 13 // Expose metrics for tests. 14 extern const char kHistogramDocWriteParseStartToFirstContentfulPaint[]; 15 extern const char kHistogramDocWriteBlockParseStartToFirstContentfulPaint[]; 16 extern const char kHistogramDocWriteBlockCount[]; 17 extern const char kHistogramDocWriteBlockReloadCount[]; 18 19 } // namespace internal 20 21 class DocumentWritePageLoadMetricsObserver 22 : public page_load_metrics::PageLoadMetricsObserver { 23 public: 24 DocumentWritePageLoadMetricsObserver() = default; 25 26 // page_load_metrics::PageLoadMetricsObserver implementation: 27 void OnFirstContentfulPaintInPage( 28 const page_load_metrics::mojom::PageLoadTiming& timing) override; 29 30 void OnFirstMeaningfulPaintInMainFrameDocument( 31 const page_load_metrics::mojom::PageLoadTiming& timing) override; 32 33 void OnParseStop( 34 const page_load_metrics::mojom::PageLoadTiming& timing) override; 35 36 void OnLoadingBehaviorObserved(content::RenderFrameHost* rfh, 37 int behavior_flags) override; 38 39 enum DocumentWriteLoadingBehavior { 40 LOADING_BEHAVIOR_BLOCK, 41 LOADING_BEHAVIOR_RELOAD, 42 LOADING_BEHAVIOR_SAME_SITE_DIFF_SCHEME, 43 LOADING_BEHAVIOR_MAX 44 }; 45 46 private: 47 static void LogLoadingBehaviorMetrics(DocumentWriteLoadingBehavior behavior, 48 ukm::SourceId source_id); 49 50 void LogDocumentWriteBlockFirstContentfulPaint( 51 const page_load_metrics::mojom::PageLoadTiming& timing); 52 53 void LogDocumentWriteBlockParseStop( 54 const page_load_metrics::mojom::PageLoadTiming& timing); 55 56 void LogDocumentWriteBlockFirstMeaningfulPaint( 57 const page_load_metrics::mojom::PageLoadTiming& timing); 58 59 bool doc_write_same_site_diff_scheme_ = false; 60 bool doc_write_block_observed_ = false; 61 bool doc_write_block_reload_observed_ = false; 62 63 DISALLOW_COPY_AND_ASSIGN(DocumentWritePageLoadMetricsObserver); 64 }; 65 66 #endif // CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_DOCUMENT_WRITE_PAGE_LOAD_METRICS_OBSERVER_H_ 67