blob: 98cddf6b47a2350627c690a3ce3ba67c290c5110 [file] [log] [blame]
// Copyright 2016 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.
#ifndef CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_ANDROID_PAGE_LOAD_METRICS_OBSERVER_H_
#define CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_ANDROID_PAGE_LOAD_METRICS_OBSERVER_H_
#include <jni.h>
#include "base/macros.h"
#include "components/page_load_metrics/browser/page_load_metrics_observer.h"
namespace network {
class NetworkQualityTracker;
}
class GURL;
/** Forwards page load metrics to the Java side on Android. */
class AndroidPageLoadMetricsObserver
: public page_load_metrics::PageLoadMetricsObserver {
public:
AndroidPageLoadMetricsObserver();
// page_load_metrics::PageLoadMetricsObserver:
// PageLoadMetricsObserver lifecycle callbacks
ObservePolicy OnStart(content::NavigationHandle* navigation_handle,
const GURL& currently_committed_url,
bool started_in_foreground) override;
ObservePolicy FlushMetricsOnAppEnterBackground(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
ObservePolicy OnHidden(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnComplete(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
// PageLoadMetricsObserver event callbacks
void OnFirstContentfulPaintInPage(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnFirstInputInPage(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnFirstMeaningfulPaintInMainFrameDocument(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnLoadEventStart(
const page_load_metrics::mojom::PageLoadTiming& timing) override;
void OnLoadedResource(const page_load_metrics::ExtraRequestCompleteInfo&
extra_request_complete_info) override;
protected:
AndroidPageLoadMetricsObserver(
network::NetworkQualityTracker* network_quality_tracker)
: network_quality_tracker_(network_quality_tracker) {}
virtual void ReportNewNavigation();
virtual void ReportBufferedMetrics(
const page_load_metrics::mojom::PageLoadTiming& timing);
virtual void ReportNetworkQualityEstimate(
net::EffectiveConnectionType connection_type,
int64_t http_rtt_ms,
int64_t transport_rtt_ms);
virtual void ReportFirstContentfulPaint(int64_t navigation_start_tick,
int64_t first_contentful_paint_ms);
virtual void ReportFirstMeaningfulPaint(int64_t navigation_start_tick,
int64_t first_meaningful_paint_ms);
virtual void ReportLoadEventStart(int64_t navigation_start_tick,
int64_t load_event_start_ms);
virtual void ReportLoadedMainResource(int64_t dns_start_ms,
int64_t dns_end_ms,
int64_t connect_start_ms,
int64_t connect_end_ms,
int64_t request_start_ms,
int64_t send_start_ms,
int64_t send_end_ms);
virtual void ReportFirstInputDelay(int64_t first_input_delay_ms);
private:
bool did_dispatch_on_main_resource_ = false;
bool reported_buffered_metrics_ = false;
int64_t navigation_id_ = -1;
network::NetworkQualityTracker* network_quality_tracker_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(AndroidPageLoadMetricsObserver);
};
#endif // CHROME_BROWSER_PAGE_LOAD_METRICS_OBSERVERS_ANDROID_PAGE_LOAD_METRICS_OBSERVER_H_