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

Side by Side Diff: components/page_load_metrics/browser/page_load_metrics_observer.h

Issue 2177743002: Migrate page_load_metrics out of components. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: migrate page_load_metrics_messages to common message generator Created 4 years, 4 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_
6 #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_
7
8 #include "base/macros.h"
9 #include "base/optional.h"
10 #include "components/page_load_metrics/common/page_load_timing.h"
11 #include "content/public/browser/navigation_handle.h"
12 #include "third_party/WebKit/public/web/WebInputEvent.h"
13 #include "url/gurl.h"
14
15 namespace page_load_metrics {
16
17 // This enum represents how a page load ends. If the action occurs before the
18 // page load finishes (or reaches some point like first paint), then we consider
19 // the load to be aborted.
20 enum UserAbortType {
21 // Represents no abort.
22 ABORT_NONE,
23
24 // If the user presses reload or shift-reload.
25 ABORT_RELOAD,
26
27 // The user presses the back/forward button.
28 ABORT_FORWARD_BACK,
29
30 // If the navigation is replaced by a new navigation. This includes link
31 // clicks, typing in the omnibox (not a reload), and form submissions.
32 ABORT_NEW_NAVIGATION,
33
34 // If the user presses the stop X button.
35 ABORT_STOP,
36
37 // If the navigation is aborted by closing the tab or browser.
38 ABORT_CLOSE,
39
40 // We don't know why the navigation aborted. This is the value we assign to an
41 // aborted load if the only signal we get is a provisional load finishing
42 // without committing, either without error or with net::ERR_ABORTED.
43 ABORT_OTHER,
44
45 // The load aborted due to another navigation, but it isn't clear what type of
46 // navigation it was.
47 ABORT_UNKNOWN_NAVIGATION,
48
49 // Add values before this final count.
50 ABORT_LAST_ENTRY
51 };
52
53 // Information related to failed provisional loads.
54 struct FailedProvisionalLoadInfo {
55 FailedProvisionalLoadInfo(base::TimeDelta interval, net::Error error);
56 ~FailedProvisionalLoadInfo();
57
58 base::TimeDelta time_to_failed_provisional_load;
59 net::Error error;
60 };
61
62 struct PageLoadExtraInfo {
63 PageLoadExtraInfo(
64 const base::Optional<base::TimeDelta>& first_background_time,
65 const base::Optional<base::TimeDelta>& first_foreground_time,
66 bool started_in_foreground,
67 const GURL& committed_url,
68 const base::Optional<base::TimeDelta>& time_to_commit,
69 UserAbortType abort_type,
70 const base::Optional<base::TimeDelta>& time_to_abort,
71 const PageLoadMetadata& metadata);
72
73 PageLoadExtraInfo(const PageLoadExtraInfo& other);
74
75 ~PageLoadExtraInfo();
76
77 // The first time that the page was backgrounded since the navigation started.
78 const base::Optional<base::TimeDelta> first_background_time;
79
80 // The first time that the page was foregrounded since the navigation started.
81 const base::Optional<base::TimeDelta> first_foreground_time;
82
83 // True if the page load started in the foreground.
84 const bool started_in_foreground;
85
86 // Committed URL. If the page load did not commit, |committed_url| will be
87 // empty.
88 const GURL committed_url;
89
90 // Time from navigation start until commit.
91 const base::Optional<base::TimeDelta> time_to_commit;
92
93 // The abort time and time to abort for this page load. If the page was not
94 // aborted, |abort_type| will be |ABORT_NONE|.
95 const UserAbortType abort_type;
96 const base::Optional<base::TimeDelta> time_to_abort;
97
98 // Extra information supplied to the page load metrics system from the
99 // renderer.
100 const PageLoadMetadata metadata;
101 };
102
103 // Interface for PageLoadMetrics observers. All instances of this class are
104 // owned by the PageLoadTracker tracking a page load.
105 class PageLoadMetricsObserver {
106 public:
107 virtual ~PageLoadMetricsObserver() {}
108
109 // The page load started, with the given navigation handle. Note that OnStart
110 // is called for same-page navigations. Implementers of OnStart that only want
111 // to process non-same-page navigations should also check to see that the page
112 // load committed via OnCommit or committed_url in
113 // PageLoadExtraInfo. currently_committed_url contains the URL of the
114 // committed page load at the time the navigation for navigation_handle was
115 // initiated, or the empty URL if there was no committed page load at the time
116 // the navigation was initiated.
117 virtual void OnStart(content::NavigationHandle* navigation_handle,
118 const GURL& currently_committed_url,
119 bool started_in_foreground) {}
120
121 // OnRedirect is triggered when a page load redirects to another URL.
122 // The navigation handle holds relevant data for the navigation, but will
123 // be destroyed soon after this call. Don't hold a reference to it. This can
124 // be called multiple times.
125 virtual void OnRedirect(content::NavigationHandle* navigation_handle) {}
126
127 // OnCommit is triggered when a page load commits, i.e. when we receive the
128 // first data for the request. The navigation handle holds relevant data for
129 // the navigation, but will be destroyed soon after this call. Don't hold a
130 // reference to it.
131 // Note that this does not get called for same page navigations.
132 virtual void OnCommit(content::NavigationHandle* navigation_handle) {}
133
134 // OnHidden is triggered when a page leaves the foreground. It does not fire
135 // when a foreground page is permanently closed; for that, listen to
136 // OnComplete instead.
137 virtual void OnHidden() {}
138
139 // OnShown is triggered when a page is brought to the foreground. It does not
140 // fire when the page first loads; for that, listen for OnStart instead.
141 virtual void OnShown() {}
142
143 // The callbacks below are only invoked after a navigation commits, for
144 // tracked page loads. Page loads that don't meet the criteria for being
145 // tracked at the time a navigation commits will not receive any of the
146 // callbacks below.
147
148 // OnTimingUpdate is triggered when an updated PageLoadTiming is
149 // available. This method may be called multiple times over the course of the
150 // page load. This method is currently only intended for use in testing. Most
151 // implementers should implement one of the On* callbacks, such as
152 // OnFirstContentfulPaint or OnDomContentLoadedEventStart. Please email
153 // loading-dev@chromium.org if you intend to override this method.
154 virtual void OnTimingUpdate(const PageLoadTiming& timing,
155 const PageLoadExtraInfo& extra_info) {}
156 // OnUserInput is triggered when a new user input is passed in to
157 // web_contents. Contains a TimeDelta from navigation start.
158 virtual void OnUserInput(const blink::WebInputEvent& event) {}
159
160 // The following methods are invoked at most once, when the timing for the
161 // associated event first becomes available.
162 virtual void OnDomContentLoadedEventStart(
163 const PageLoadTiming& timing,
164 const PageLoadExtraInfo& extra_info) {}
165 virtual void OnLoadEventStart(const PageLoadTiming& timing,
166 const PageLoadExtraInfo& extra_info) {}
167 virtual void OnFirstLayout(const PageLoadTiming& timing,
168 const PageLoadExtraInfo& extra_info) {}
169 virtual void OnFirstPaint(const PageLoadTiming& timing,
170 const PageLoadExtraInfo& extra_info) {}
171 virtual void OnFirstTextPaint(const PageLoadTiming& timing,
172 const PageLoadExtraInfo& extra_info) {}
173 virtual void OnFirstImagePaint(const PageLoadTiming& timing,
174 const PageLoadExtraInfo& extra_info) {}
175 virtual void OnFirstContentfulPaint(const PageLoadTiming& timing,
176 const PageLoadExtraInfo& extra_info) {}
177 virtual void OnParseStart(const PageLoadTiming& timing,
178 const PageLoadExtraInfo& extra_info) {}
179 virtual void OnParseStop(const PageLoadTiming& timing,
180 const PageLoadExtraInfo& extra_info) {}
181
182 // Observer method to be invoked when there is a change in PageLoadMetadata's
183 // behavior_flags.
184 virtual void OnLoadingBehaviorObserved(
185 const page_load_metrics::PageLoadExtraInfo& extra_info) {}
186
187 // One of OnComplete or OnFailedProvisionalLoad is invoked for tracked page
188 // loads, immediately before the observer is deleted. These callbacks will not
189 // be invoked for page loads that did not meet the criteria for being tracked
190 // at the time the navigation completed. The PageLoadTiming struct contains
191 // timing data and the PageLoadExtraInfo struct contains other useful data
192 // collected over the course of the page load. Most observers should not need
193 // to implement these callbacks, and should implement the On* timing callbacks
194 // instead.
195
196 // OnComplete is invoked for tracked page loads that committed, immediately
197 // before the observer is deleted.
198 virtual void OnComplete(const PageLoadTiming& timing,
199 const PageLoadExtraInfo& extra_info) {}
200
201 // OnFailedProvisionalLoad is invoked for tracked page loads that did not
202 // commit, immediately before the observer is deleted. Note that provisional
203 // loads that result in downloads or 204s are aborted by the system, and are
204 // also included as failed provisional loads.
205 virtual void OnFailedProvisionalLoad(
206 const FailedProvisionalLoadInfo& failed_provisional_load_info,
207 const PageLoadExtraInfo& extra_info) {}
208 };
209
210 } // namespace page_load_metrics
211
212 #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698