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

Side by Side Diff: third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.cpp

Issue 2472583003: Navigation Timing Level 2 (Closed)
Patch Set: added layout test Created 4 years, 1 month 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 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 #include "core/timing/PerformanceNavigationTiming.h"
6
7 #include "bindings/core/v8/V8ObjectBuilder.h"
8 #include "core/dom/DocumentTiming.h"
9 #include "core/loader/DocumentLoadTiming.h"
10 #include "core/loader/DocumentLoader.h"
11 #include "core/timing/PerformanceBase.h"
12
13 namespace blink {
14
15 // TODO(sunjian): Move this logic into PerformanceBase
16 static double monotonicTimeToDOMHighResTimeStamp(double timeOrigin,
17 double seconds) {
18 DCHECK(seconds >= 0.0);
19 if (!seconds || !timeOrigin)
20 return 0.0;
21 return PerformanceBase::clampTimeResolution(seconds - timeOrigin) * 1000.0;
22 }
23
24 PerformanceNavigationTiming::PerformanceNavigationTiming(
25 double timeOrigin,
26 double unloadEventStart,
27 double unloadEventEnd,
28 double loadEventStart,
29 double loadEventEnd,
30 unsigned short redirectCount,
31 double domInteractive,
32 double domContentLoadedEventStart,
33 double domContentLoadedEventEnd,
34 double domComplete,
35 NavigationType type,
36 double redirectStart,
37 double redirectEnd,
38 double fetchStart,
39 double responseEnd,
40 bool hasCrossOriginRedirect,
41 bool hasSameOriginAsPreviousDocument,
42 ResourceLoadTiming* timing,
43 double lastRedirectEndTime,
44 double finishTime,
45 unsigned long long transferSize,
46 unsigned long long encodedBodyLength,
47 unsigned long long decodedBodyLength,
48 bool didReuseConnection)
49 : PerformanceResourceTiming(
50 "",
51 timeOrigin,
52 timing,
53 lastRedirectEndTime,
54 finishTime,
55 transferSize,
56 encodedBodyLength,
57 decodedBodyLength,
58 didReuseConnection,
59 true /*allowTimingDetails*/, // TODO(sunjian): Will have to come back
60 // and reconsider this default value
61 // crbug/663219
62 true /*allowRediectDetails*/,
63 "document",
64 "navigation",
65 timeOrigin),
66 m_timeOrigin(timeOrigin),
67 m_unloadEventStart(unloadEventStart),
68 m_unloadEventEnd(unloadEventEnd),
69 m_loadEventStart(loadEventStart),
70 m_loadEventEnd(loadEventEnd),
71 m_redirectCount(redirectCount),
72 m_domInteractive(domInteractive),
73 m_domContentLoadedEventStart(domContentLoadedEventStart),
74 m_domContentLoadedEventEnd(domContentLoadedEventEnd),
75 m_domComplete(domComplete),
76 m_type(type),
77 m_redirectStart(redirectStart),
78 m_redirectEnd(redirectEnd),
79 m_fetchStart(fetchStart),
80 m_responseEnd(responseEnd),
81 m_hasCrossOriginRedirect(hasCrossOriginRedirect),
82 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {}
83
84 PerformanceNavigationTiming::~PerformanceNavigationTiming() {}
85
86 double PerformanceNavigationTiming::unloadEventStart() const {
87 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart);
Kunihiko Sakamoto 2016/11/09 10:03:08 Don't we need origin flags check here?
sunjian 2016/11/09 22:45:04 Do you mean timing-allow-origin check? Already cre
panicker 2016/11/09 23:35:03 He means the redirect-check, which you've add now
88 }
89
90 double PerformanceNavigationTiming::unloadEventEnd() const {
91 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
92 return 0;
93
94 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventEnd);
95 }
96
97 double PerformanceNavigationTiming::domInteractive() const {
98 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domInteractive);
99 }
100
101 double PerformanceNavigationTiming::domContentLoadedEventStart() const {
102 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
103 m_domContentLoadedEventStart);
104 }
105
106 double PerformanceNavigationTiming::domContentLoadedEventEnd() const {
107 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
108 m_domContentLoadedEventEnd);
109 }
110
111 double PerformanceNavigationTiming::domComplete() const {
112 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domComplete);
113 }
114
115 double PerformanceNavigationTiming::loadEventStart() const {
116 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventStart);
117 }
118
119 double PerformanceNavigationTiming::loadEventEnd() const {
120 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventEnd);
121 }
122
123 AtomicString PerformanceNavigationTiming::type() const {
124 // TODO(sunjian) Right now NavigationType doesn't seem to have a Prerender
125 // type yet, need to look into this crbug/663217
126 switch (m_type) {
127 case NavigationTypeReload:
128 return "reload";
129 case NavigationTypeBackForward:
130 return "back_forward";
131 default:
132 return "navigate";
133 }
134 }
135
136 unsigned short PerformanceNavigationTiming::redirectCount() const {
137 if (m_hasCrossOriginRedirect)
138 return 0;
139 return m_redirectCount;
140 }
141
142 // Methods that are overriden from PerformanceResourceTiming
143 double PerformanceNavigationTiming::fetchStart() const {
144 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart);
145 }
146
147 double PerformanceNavigationTiming::redirectStart() const {
148 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart);
Kunihiko Sakamoto 2016/11/09 10:03:08 This and redirectEnd() should return zero if any o
sunjian 2016/11/09 22:45:04 Same as above. The bug is crbug/663219
panicker 2016/11/09 23:35:03 Same comment. (TAO is a separate check, that is no
149 }
150
151 double PerformanceNavigationTiming::redirectEnd() const {
152 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd);
153 }
154
155 double PerformanceNavigationTiming::responseEnd() const {
156 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd);
157 }
158
159 void PerformanceNavigationTiming::buildJSONValue(
160 V8ObjectBuilder& builder) const {
161 PerformanceResourceTiming::buildJSONValue(builder);
162 builder.addNumber("unloadEventStart", unloadEventStart());
163 builder.addNumber("unloadEventEnd", unloadEventEnd());
164 builder.addNumber("domInteractive", domInteractive());
165 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart());
166 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd());
167 builder.addNumber("domComplete", domComplete());
168 builder.addNumber("loadEventStart", loadEventStart());
169 builder.addNumber("loadEventEnd", loadEventEnd());
170 builder.addString("type", type());
171 builder.addNumber("redirectCount", redirectCount());
172 }
173 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698