OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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 #include "core/timing/PerformanceNavigationTiming.h" | 5 #include "core/timing/PerformanceNavigationTiming.h" |
6 | 6 |
7 #include "bindings/core/v8/V8ObjectBuilder.h" | 7 #include "bindings/core/v8/V8ObjectBuilder.h" |
8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
9 #include "core/dom/DocumentTiming.h" | 9 #include "core/dom/DocumentTiming.h" |
10 #include "core/frame/LocalFrame.h" | 10 #include "core/frame/LocalFrame.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 } | 126 } |
127 | 127 |
128 DOMHighResTimeStamp PerformanceNavigationTiming::unloadEventStart() const { | 128 DOMHighResTimeStamp PerformanceNavigationTiming::unloadEventStart() const { |
129 bool allow_redirect_details = GetAllowRedirectDetails(); | 129 bool allow_redirect_details = GetAllowRedirectDetails(); |
130 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 130 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
131 | 131 |
132 if (!allow_redirect_details || !timing || | 132 if (!allow_redirect_details || !timing || |
133 !timing->HasSameOriginAsPreviousDocument()) | 133 !timing->HasSameOriginAsPreviousDocument()) |
134 return 0; | 134 return 0; |
135 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 135 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
136 time_origin_, timing->UnloadEventStart()); | 136 time_origin_, timing->UnloadEventStart(), |
| 137 false /* allow_negative_value */); |
137 } | 138 } |
138 | 139 |
139 DOMHighResTimeStamp PerformanceNavigationTiming::unloadEventEnd() const { | 140 DOMHighResTimeStamp PerformanceNavigationTiming::unloadEventEnd() const { |
140 bool allow_redirect_details = GetAllowRedirectDetails(); | 141 bool allow_redirect_details = GetAllowRedirectDetails(); |
141 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 142 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
142 | 143 |
143 if (!allow_redirect_details || !timing || | 144 if (!allow_redirect_details || !timing || |
144 !timing->HasSameOriginAsPreviousDocument()) | 145 !timing->HasSameOriginAsPreviousDocument()) |
145 return 0; | 146 return 0; |
146 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 147 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
147 time_origin_, timing->UnloadEventEnd()); | 148 time_origin_, timing->UnloadEventEnd(), false /* allow_negative_value */); |
148 } | 149 } |
149 | 150 |
150 DOMHighResTimeStamp PerformanceNavigationTiming::domInteractive() const { | 151 DOMHighResTimeStamp PerformanceNavigationTiming::domInteractive() const { |
151 const DocumentTiming* timing = GetDocumentTiming(); | 152 const DocumentTiming* timing = GetDocumentTiming(); |
152 if (!timing) | 153 if (!timing) |
153 return 0.0; | 154 return 0.0; |
154 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 155 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
155 time_origin_, timing->DomInteractive()); | 156 time_origin_, timing->DomInteractive(), false /* allow_negative_value */); |
156 } | 157 } |
157 | 158 |
158 DOMHighResTimeStamp PerformanceNavigationTiming::domContentLoadedEventStart() | 159 DOMHighResTimeStamp PerformanceNavigationTiming::domContentLoadedEventStart() |
159 const { | 160 const { |
160 const DocumentTiming* timing = GetDocumentTiming(); | 161 const DocumentTiming* timing = GetDocumentTiming(); |
161 if (!timing) | 162 if (!timing) |
162 return 0.0; | 163 return 0.0; |
163 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 164 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
164 time_origin_, timing->DomContentLoadedEventStart()); | 165 time_origin_, timing->DomContentLoadedEventStart(), |
| 166 false /* allow_negative_value */); |
165 } | 167 } |
166 | 168 |
167 DOMHighResTimeStamp PerformanceNavigationTiming::domContentLoadedEventEnd() | 169 DOMHighResTimeStamp PerformanceNavigationTiming::domContentLoadedEventEnd() |
168 const { | 170 const { |
169 const DocumentTiming* timing = GetDocumentTiming(); | 171 const DocumentTiming* timing = GetDocumentTiming(); |
170 if (!timing) | 172 if (!timing) |
171 return 0.0; | 173 return 0.0; |
172 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 174 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
173 time_origin_, timing->DomContentLoadedEventEnd()); | 175 time_origin_, timing->DomContentLoadedEventEnd(), |
| 176 false /* allow_negative_value */); |
174 } | 177 } |
175 | 178 |
176 DOMHighResTimeStamp PerformanceNavigationTiming::domComplete() const { | 179 DOMHighResTimeStamp PerformanceNavigationTiming::domComplete() const { |
177 const DocumentTiming* timing = GetDocumentTiming(); | 180 const DocumentTiming* timing = GetDocumentTiming(); |
178 if (!timing) | 181 if (!timing) |
179 return 0.0; | 182 return 0.0; |
180 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 183 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
181 time_origin_, timing->DomComplete()); | 184 time_origin_, timing->DomComplete(), false /* allow_negative_value */); |
182 } | 185 } |
183 | 186 |
184 DOMHighResTimeStamp PerformanceNavigationTiming::loadEventStart() const { | 187 DOMHighResTimeStamp PerformanceNavigationTiming::loadEventStart() const { |
185 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 188 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
186 if (!timing) | 189 if (!timing) |
187 return 0.0; | 190 return 0.0; |
188 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 191 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
189 time_origin_, timing->LoadEventStart()); | 192 time_origin_, timing->LoadEventStart(), false /* allow_negative_value */); |
190 } | 193 } |
191 | 194 |
192 DOMHighResTimeStamp PerformanceNavigationTiming::loadEventEnd() const { | 195 DOMHighResTimeStamp PerformanceNavigationTiming::loadEventEnd() const { |
193 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 196 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
194 if (!timing) | 197 if (!timing) |
195 return 0.0; | 198 return 0.0; |
196 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 199 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
197 time_origin_, timing->LoadEventEnd()); | 200 time_origin_, timing->LoadEventEnd(), false /* allow_negative_value */); |
198 } | 201 } |
199 | 202 |
200 AtomicString PerformanceNavigationTiming::type() const { | 203 AtomicString PerformanceNavigationTiming::type() const { |
201 DocumentLoader* loader = GetDocumentLoader(); | 204 DocumentLoader* loader = GetDocumentLoader(); |
202 if (GetFrame() && loader) | 205 if (GetFrame() && loader) |
203 return GetNavigationType(loader->GetNavigationType(), | 206 return GetNavigationType(loader->GetNavigationType(), |
204 GetFrame()->GetDocument()); | 207 GetFrame()->GetDocument()); |
205 return "navigate"; | 208 return "navigate"; |
206 } | 209 } |
207 | 210 |
208 unsigned short PerformanceNavigationTiming::redirectCount() const { | 211 unsigned short PerformanceNavigationTiming::redirectCount() const { |
209 bool allow_redirect_details = GetAllowRedirectDetails(); | 212 bool allow_redirect_details = GetAllowRedirectDetails(); |
210 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 213 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
211 if (!allow_redirect_details || !timing) | 214 if (!allow_redirect_details || !timing) |
212 return 0; | 215 return 0; |
213 return timing->RedirectCount(); | 216 return timing->RedirectCount(); |
214 } | 217 } |
215 | 218 |
216 DOMHighResTimeStamp PerformanceNavigationTiming::redirectStart() const { | 219 DOMHighResTimeStamp PerformanceNavigationTiming::redirectStart() const { |
217 bool allow_redirect_details = GetAllowRedirectDetails(); | 220 bool allow_redirect_details = GetAllowRedirectDetails(); |
218 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 221 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
219 if (!allow_redirect_details || !timing) | 222 if (!allow_redirect_details || !timing) |
220 return 0; | 223 return 0; |
221 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 224 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
222 time_origin_, timing->RedirectStart()); | 225 time_origin_, timing->RedirectStart(), false /* allow_negative_value */); |
223 } | 226 } |
224 | 227 |
225 DOMHighResTimeStamp PerformanceNavigationTiming::redirectEnd() const { | 228 DOMHighResTimeStamp PerformanceNavigationTiming::redirectEnd() const { |
226 bool allow_redirect_details = GetAllowRedirectDetails(); | 229 bool allow_redirect_details = GetAllowRedirectDetails(); |
227 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 230 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
228 if (!allow_redirect_details || !timing) | 231 if (!allow_redirect_details || !timing) |
229 return 0; | 232 return 0; |
230 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 233 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
231 time_origin_, timing->RedirectEnd()); | 234 time_origin_, timing->RedirectEnd(), false /* allow_negative_value */); |
232 } | 235 } |
233 | 236 |
234 DOMHighResTimeStamp PerformanceNavigationTiming::fetchStart() const { | 237 DOMHighResTimeStamp PerformanceNavigationTiming::fetchStart() const { |
235 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 238 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
236 if (!timing) | 239 if (!timing) |
237 return 0.0; | 240 return 0.0; |
238 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 241 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
239 time_origin_, timing->FetchStart()); | 242 time_origin_, timing->FetchStart(), false /* allow_negative_value */); |
240 } | 243 } |
241 | 244 |
242 DOMHighResTimeStamp PerformanceNavigationTiming::responseEnd() const { | 245 DOMHighResTimeStamp PerformanceNavigationTiming::responseEnd() const { |
243 DocumentLoadTiming* timing = GetDocumentLoadTiming(); | 246 DocumentLoadTiming* timing = GetDocumentLoadTiming(); |
244 if (!timing) | 247 if (!timing) |
245 return 0.0; | 248 return 0.0; |
246 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( | 249 return PerformanceBase::MonotonicTimeToDOMHighResTimeStamp( |
247 time_origin_, timing->ResponseEnd()); | 250 time_origin_, timing->ResponseEnd(), false /* allow_negative_value */); |
248 } | 251 } |
249 | 252 |
250 // Overriding PerformanceEntry's attributes. | 253 // Overriding PerformanceEntry's attributes. |
251 DOMHighResTimeStamp PerformanceNavigationTiming::duration() const { | 254 DOMHighResTimeStamp PerformanceNavigationTiming::duration() const { |
252 return loadEventEnd(); | 255 return loadEventEnd(); |
253 } | 256 } |
254 | 257 |
255 void PerformanceNavigationTiming::BuildJSONValue( | 258 void PerformanceNavigationTiming::BuildJSONValue( |
256 V8ObjectBuilder& builder) const { | 259 V8ObjectBuilder& builder) const { |
257 PerformanceResourceTiming::BuildJSONValue(builder); | 260 PerformanceResourceTiming::BuildJSONValue(builder); |
258 builder.AddNumber("unloadEventStart", unloadEventStart()); | 261 builder.AddNumber("unloadEventStart", unloadEventStart()); |
259 builder.AddNumber("unloadEventEnd", unloadEventEnd()); | 262 builder.AddNumber("unloadEventEnd", unloadEventEnd()); |
260 builder.AddNumber("domInteractive", domInteractive()); | 263 builder.AddNumber("domInteractive", domInteractive()); |
261 builder.AddNumber("domContentLoadedEventStart", domContentLoadedEventStart()); | 264 builder.AddNumber("domContentLoadedEventStart", domContentLoadedEventStart()); |
262 builder.AddNumber("domContentLoadedEventEnd", domContentLoadedEventEnd()); | 265 builder.AddNumber("domContentLoadedEventEnd", domContentLoadedEventEnd()); |
263 builder.AddNumber("domComplete", domComplete()); | 266 builder.AddNumber("domComplete", domComplete()); |
264 builder.AddNumber("loadEventStart", loadEventStart()); | 267 builder.AddNumber("loadEventStart", loadEventStart()); |
265 builder.AddNumber("loadEventEnd", loadEventEnd()); | 268 builder.AddNumber("loadEventEnd", loadEventEnd()); |
266 builder.AddString("type", type()); | 269 builder.AddString("type", type()); |
267 builder.AddNumber("redirectCount", redirectCount()); | 270 builder.AddNumber("redirectCount", redirectCount()); |
268 } | 271 } |
269 } | 272 } |
OLD | NEW |