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