OLD | NEW |
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 #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_ | 5 #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_ |
6 #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_ | 6 #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_ |
7 | 7 |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/optional.h" | 9 #include "base/optional.h" |
10 #include "components/page_load_metrics/common/page_load_timing.h" | 10 #include "components/page_load_metrics/common/page_load_timing.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 ABORT_OTHER, | 43 ABORT_OTHER, |
44 | 44 |
45 // The load aborted due to another navigation, but it isn't clear what type of | 45 // The load aborted due to another navigation, but it isn't clear what type of |
46 // navigation it was. | 46 // navigation it was. |
47 ABORT_UNKNOWN_NAVIGATION, | 47 ABORT_UNKNOWN_NAVIGATION, |
48 | 48 |
49 // Add values before this final count. | 49 // Add values before this final count. |
50 ABORT_LAST_ENTRY | 50 ABORT_LAST_ENTRY |
51 }; | 51 }; |
52 | 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 |
53 struct PageLoadExtraInfo { | 62 struct PageLoadExtraInfo { |
54 PageLoadExtraInfo( | 63 PageLoadExtraInfo( |
55 const base::Optional<base::TimeDelta>& first_background_time, | 64 const base::Optional<base::TimeDelta>& first_background_time, |
56 const base::Optional<base::TimeDelta>& first_foreground_time, | 65 const base::Optional<base::TimeDelta>& first_foreground_time, |
57 bool started_in_foreground, | 66 bool started_in_foreground, |
58 const GURL& committed_url, | 67 const GURL& committed_url, |
59 const base::Optional<base::TimeDelta>& time_to_commit, | 68 const base::Optional<base::TimeDelta>& time_to_commit, |
60 UserAbortType abort_type, | 69 UserAbortType abort_type, |
61 const base::Optional<base::TimeDelta>& time_to_abort, | 70 const base::Optional<base::TimeDelta>& time_to_abort, |
62 const PageLoadMetadata& metadata); | 71 const PageLoadMetadata& metadata); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 // be called multiple times. | 124 // be called multiple times. |
116 virtual void OnRedirect(content::NavigationHandle* navigation_handle) {} | 125 virtual void OnRedirect(content::NavigationHandle* navigation_handle) {} |
117 | 126 |
118 // OnCommit is triggered when a page load commits, i.e. when we receive the | 127 // OnCommit is triggered when a page load commits, i.e. when we receive the |
119 // first data for the request. The navigation handle holds relevant data for | 128 // first data for the request. The navigation handle holds relevant data for |
120 // the navigation, but will be destroyed soon after this call. Don't hold a | 129 // the navigation, but will be destroyed soon after this call. Don't hold a |
121 // reference to it. | 130 // reference to it. |
122 // Note that this does not get called for same page navigations. | 131 // Note that this does not get called for same page navigations. |
123 virtual void OnCommit(content::NavigationHandle* navigation_handle) {} | 132 virtual void OnCommit(content::NavigationHandle* navigation_handle) {} |
124 | 133 |
125 // OnFailedProvisionalLoad is triggered when a provisional load failed and did | |
126 // not commit. Note that provisional loads that result in downloads or 204s | |
127 // are aborted by the system, and thus considered failed provisional loads. | |
128 virtual void OnFailedProvisionalLoad( | |
129 content::NavigationHandle* navigation_handle) {} | |
130 | |
131 // OnHidden is triggered when a page leaves the foreground. It does not fire | 134 // OnHidden is triggered when a page leaves the foreground. It does not fire |
132 // when a foreground page is permanently closed; for that, listen to | 135 // when a foreground page is permanently closed; for that, listen to |
133 // OnComplete instead. | 136 // OnComplete instead. |
134 virtual void OnHidden() {} | 137 virtual void OnHidden() {} |
135 | 138 |
136 // OnShown is triggered when a page is brought to the foreground. It does not | 139 // OnShown is triggered when a page is brought to the foreground. It does not |
137 // fire when the page first loads; for that, listen for OnStart instead. | 140 // fire when the page first loads; for that, listen for OnStart instead. |
138 virtual void OnShown() {} | 141 virtual void OnShown() {} |
139 | 142 |
140 // The callbacks below are only invoked after a navigation commits, for | 143 // The callbacks below are only invoked after a navigation commits, for |
141 // tracked page loads. Page loads that don't meet the criteria for being | 144 // tracked page loads. Page loads that don't meet the criteria for being |
142 // tracked at the time a navigation commits will not receive any of the | 145 // tracked at the time a navigation commits will not receive any of the |
143 // callbacks below. | 146 // callbacks below. |
144 | 147 |
145 // OnTimingUpdate is triggered when an updated PageLoadTiming is | 148 // OnTimingUpdate is triggered when an updated PageLoadTiming is |
146 // available. This method may be called multiple times over the course of the | 149 // available. This method may be called multiple times over the course of the |
147 // page load. This method is currently only intended for use in testing. Most | 150 // page load. This method is currently only intended for use in testing. Most |
148 // implementers should implement one of the On* callbacks, such as | 151 // implementers should implement one of the On* callbacks, such as |
149 // OnFirstContentfulPaint or OnDomContentLoadedEventStart. Please email | 152 // OnFirstContentfulPaint or OnDomContentLoadedEventStart. Please email |
150 // loading-dev@chromium.org if you intend to override this method. | 153 // loading-dev@chromium.org if you intend to override this method. |
151 virtual void OnTimingUpdate(const PageLoadTiming& timing, | 154 virtual void OnTimingUpdate(const PageLoadTiming& timing, |
152 const PageLoadExtraInfo& extra_info) {} | 155 const PageLoadExtraInfo& extra_info) {} |
153 | |
154 // OnUserInput is triggered when a new user input is passed in to | 156 // OnUserInput is triggered when a new user input is passed in to |
155 // web_contents. Contains a TimeDelta from navigation start. | 157 // web_contents. Contains a TimeDelta from navigation start. |
156 virtual void OnUserInput(const blink::WebInputEvent& event) {} | 158 virtual void OnUserInput(const blink::WebInputEvent& event) {} |
157 | 159 |
158 // The following methods are invoked at most once, when the timing for the | 160 // The following methods are invoked at most once, when the timing for the |
159 // associated event first becomes available. | 161 // associated event first becomes available. |
160 virtual void OnDomContentLoadedEventStart( | 162 virtual void OnDomContentLoadedEventStart( |
161 const PageLoadTiming& timing, | 163 const PageLoadTiming& timing, |
162 const PageLoadExtraInfo& extra_info) {} | 164 const PageLoadExtraInfo& extra_info) {} |
163 virtual void OnLoadEventStart(const PageLoadTiming& timing, | 165 virtual void OnLoadEventStart(const PageLoadTiming& timing, |
(...skipping 11 matching lines...) Expand all Loading... |
175 virtual void OnParseStart(const PageLoadTiming& timing, | 177 virtual void OnParseStart(const PageLoadTiming& timing, |
176 const PageLoadExtraInfo& extra_info) {} | 178 const PageLoadExtraInfo& extra_info) {} |
177 virtual void OnParseStop(const PageLoadTiming& timing, | 179 virtual void OnParseStop(const PageLoadTiming& timing, |
178 const PageLoadExtraInfo& extra_info) {} | 180 const PageLoadExtraInfo& extra_info) {} |
179 | 181 |
180 // Observer method to be invoked when there is a change in PageLoadMetadata's | 182 // Observer method to be invoked when there is a change in PageLoadMetadata's |
181 // behavior_flags. | 183 // behavior_flags. |
182 virtual void OnLoadingBehaviorObserved( | 184 virtual void OnLoadingBehaviorObserved( |
183 const page_load_metrics::PageLoadExtraInfo& extra_info) {} | 185 const page_load_metrics::PageLoadExtraInfo& extra_info) {} |
184 | 186 |
185 // OnComplete is invoked for tracked page loads, immediately before the | 187 // One of OnComplete or OnFailedProvisionalLoad is invoked for tracked page |
186 // observer is deleted. The PageLoadTiming struct contains timing data and | 188 // loads, immediately before the observer is deleted. These callbacks will not |
187 // the PageLoadExtraInfo struct contains other useful data collected over the | 189 // be invoked for page loads that did not meet the criteria for being tracked |
188 // course of the page load. Most observers should not need to implement this | 190 // at the time the navigation completed. The PageLoadTiming struct contains |
189 // method, and should implement the On* timing callbacks instead. | 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. |
190 virtual void OnComplete(const PageLoadTiming& timing, | 198 virtual void OnComplete(const PageLoadTiming& timing, |
191 const PageLoadExtraInfo& extra_info) {} | 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) {} |
192 }; | 208 }; |
193 | 209 |
194 } // namespace page_load_metrics | 210 } // namespace page_load_metrics |
195 | 211 |
196 #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_ | 212 #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_PAGE_LOAD_METRICS_OBSERVER_H_ |
OLD | NEW |