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/timing/PerformanceBase.h" | 8 #include "core/timing/PerformanceBase.h" |
9 | 9 |
10 namespace blink { | 10 namespace blink { |
(...skipping 18 matching lines...) Expand all Loading... |
29 unsigned short redirectCount, | 29 unsigned short redirectCount, |
30 double domInteractive, | 30 double domInteractive, |
31 double domContentLoadedEventStart, | 31 double domContentLoadedEventStart, |
32 double domContentLoadedEventEnd, | 32 double domContentLoadedEventEnd, |
33 double domComplete, | 33 double domComplete, |
34 NavigationType type, | 34 NavigationType type, |
35 double redirectStart, | 35 double redirectStart, |
36 double redirectEnd, | 36 double redirectEnd, |
37 double fetchStart, | 37 double fetchStart, |
38 double responseEnd, | 38 double responseEnd, |
39 bool hasCrossOriginRedirect, | 39 bool allowRedirectDetails, |
40 bool hasSameOriginAsPreviousDocument, | 40 bool hasSameOriginAsPreviousDocument, |
41 ResourceLoadTiming* timing, | 41 ResourceLoadTiming* timing, |
42 double lastRedirectEndTime, | 42 double lastRedirectEndTime, |
43 double finishTime, | 43 double finishTime, |
44 unsigned long long transferSize, | 44 unsigned long long transferSize, |
45 unsigned long long encodedBodyLength, | 45 unsigned long long encodedBodyLength, |
46 unsigned long long decodedBodyLength, | 46 unsigned long long decodedBodyLength, |
47 bool didReuseConnection) | 47 bool didReuseConnection) |
48 : PerformanceResourceTiming("", | 48 : PerformanceResourceTiming("", |
49 timeOrigin, | 49 timeOrigin, |
50 timing, | 50 timing, |
51 lastRedirectEndTime, | 51 lastRedirectEndTime, |
52 finishTime, | 52 finishTime, |
53 transferSize, | 53 transferSize, |
54 encodedBodyLength, | 54 encodedBodyLength, |
55 decodedBodyLength, | 55 decodedBodyLength, |
56 didReuseConnection, | 56 didReuseConnection, |
57 true /*allowTimingDetails*/, // TODO(sunjian): | 57 true /*allowTimingDetails*/, // TODO(sunjian): |
58 // Create an enum | 58 // Create an enum |
59 // for this. | 59 // for this. |
60 !hasCrossOriginRedirect, | 60 allowRedirectDetails, |
61 "document", | 61 "document", |
62 "navigation", | 62 "navigation", |
63 timeOrigin), | 63 timeOrigin), |
64 m_timeOrigin(timeOrigin), | 64 m_timeOrigin(timeOrigin), |
65 m_unloadEventStart(unloadEventStart), | 65 m_unloadEventStart(unloadEventStart), |
66 m_unloadEventEnd(unloadEventEnd), | 66 m_unloadEventEnd(unloadEventEnd), |
67 m_loadEventStart(loadEventStart), | 67 m_loadEventStart(loadEventStart), |
68 m_loadEventEnd(loadEventEnd), | 68 m_loadEventEnd(loadEventEnd), |
69 m_redirectCount(redirectCount), | 69 m_redirectCount(redirectCount), |
70 m_domInteractive(domInteractive), | 70 m_domInteractive(domInteractive), |
71 m_domContentLoadedEventStart(domContentLoadedEventStart), | 71 m_domContentLoadedEventStart(domContentLoadedEventStart), |
72 m_domContentLoadedEventEnd(domContentLoadedEventEnd), | 72 m_domContentLoadedEventEnd(domContentLoadedEventEnd), |
73 m_domComplete(domComplete), | 73 m_domComplete(domComplete), |
74 m_type(type), | 74 m_type(type), |
75 m_redirectStart(redirectStart), | 75 m_redirectStart(redirectStart), |
76 m_redirectEnd(redirectEnd), | 76 m_redirectEnd(redirectEnd), |
77 m_fetchStart(fetchStart), | 77 m_fetchStart(fetchStart), |
78 m_responseEnd(responseEnd), | 78 m_responseEnd(responseEnd), |
79 m_hasCrossOriginRedirect(hasCrossOriginRedirect), | 79 m_allowRedirectDetails(allowRedirectDetails), |
80 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {} | 80 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {} |
81 | 81 |
82 PerformanceNavigationTiming::~PerformanceNavigationTiming() {} | 82 PerformanceNavigationTiming::~PerformanceNavigationTiming() {} |
83 | 83 |
84 double PerformanceNavigationTiming::unloadEventStart() const { | 84 double PerformanceNavigationTiming::unloadEventStart() const { |
85 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument) | 85 if (!m_allowRedirectDetails || !m_hasSameOriginAsPreviousDocument) |
86 return 0; | 86 return 0; |
87 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart); | 87 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart); |
88 } | 88 } |
89 | 89 |
90 double PerformanceNavigationTiming::unloadEventEnd() const { | 90 double PerformanceNavigationTiming::unloadEventEnd() const { |
91 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument) | 91 if (!m_allowRedirectDetails || !m_hasSameOriginAsPreviousDocument) |
92 return 0; | 92 return 0; |
93 | 93 |
94 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventEnd); | 94 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventEnd); |
95 } | 95 } |
96 | 96 |
97 double PerformanceNavigationTiming::domInteractive() const { | 97 double PerformanceNavigationTiming::domInteractive() const { |
98 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domInteractive); | 98 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domInteractive); |
99 } | 99 } |
100 | 100 |
101 double PerformanceNavigationTiming::domContentLoadedEventStart() const { | 101 double PerformanceNavigationTiming::domContentLoadedEventStart() const { |
(...skipping 27 matching lines...) Expand all Loading... |
129 case NavigationType::Prerender: | 129 case NavigationType::Prerender: |
130 return "prerender"; | 130 return "prerender"; |
131 case NavigationType::Navigate: | 131 case NavigationType::Navigate: |
132 return "navigate"; | 132 return "navigate"; |
133 } | 133 } |
134 NOTREACHED(); | 134 NOTREACHED(); |
135 return "navigate"; | 135 return "navigate"; |
136 } | 136 } |
137 | 137 |
138 unsigned short PerformanceNavigationTiming::redirectCount() const { | 138 unsigned short PerformanceNavigationTiming::redirectCount() const { |
139 // TODO(sunjian): Also check response headers to allow opt-in crbugs/665160 | 139 if (!m_allowRedirectDetails) |
140 if (m_hasCrossOriginRedirect) | |
141 return 0; | 140 return 0; |
142 return m_redirectCount; | 141 return m_redirectCount; |
143 } | 142 } |
144 | 143 |
145 double PerformanceNavigationTiming::fetchStart() const { | 144 double PerformanceNavigationTiming::fetchStart() const { |
146 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart); | 145 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart); |
147 } | 146 } |
148 | 147 |
149 double PerformanceNavigationTiming::redirectStart() const { | 148 double PerformanceNavigationTiming::redirectStart() const { |
150 if (m_hasCrossOriginRedirect) | 149 if (!m_allowRedirectDetails) |
151 return 0; | 150 return 0; |
152 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart); | 151 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart); |
153 } | 152 } |
154 | 153 |
155 double PerformanceNavigationTiming::redirectEnd() const { | 154 double PerformanceNavigationTiming::redirectEnd() const { |
156 if (m_hasCrossOriginRedirect) | 155 if (!m_allowRedirectDetails) |
157 return 0; | 156 return 0; |
158 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd); | 157 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd); |
159 } | 158 } |
160 | 159 |
161 double PerformanceNavigationTiming::responseEnd() const { | 160 double PerformanceNavigationTiming::responseEnd() const { |
162 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd); | 161 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd); |
163 } | 162 } |
164 | 163 |
165 void PerformanceNavigationTiming::buildJSONValue( | 164 void PerformanceNavigationTiming::buildJSONValue( |
166 V8ObjectBuilder& builder) const { | 165 V8ObjectBuilder& builder) const { |
167 PerformanceResourceTiming::buildJSONValue(builder); | 166 PerformanceResourceTiming::buildJSONValue(builder); |
168 builder.addNumber("unloadEventStart", unloadEventStart()); | 167 builder.addNumber("unloadEventStart", unloadEventStart()); |
169 builder.addNumber("unloadEventEnd", unloadEventEnd()); | 168 builder.addNumber("unloadEventEnd", unloadEventEnd()); |
170 builder.addNumber("domInteractive", domInteractive()); | 169 builder.addNumber("domInteractive", domInteractive()); |
171 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart()); | 170 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart()); |
172 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd()); | 171 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd()); |
173 builder.addNumber("domComplete", domComplete()); | 172 builder.addNumber("domComplete", domComplete()); |
174 builder.addNumber("loadEventStart", loadEventStart()); | 173 builder.addNumber("loadEventStart", loadEventStart()); |
175 builder.addNumber("loadEventEnd", loadEventEnd()); | 174 builder.addNumber("loadEventEnd", loadEventEnd()); |
176 builder.addString("type", type()); | 175 builder.addString("type", type()); |
177 builder.addNumber("redirectCount", redirectCount()); | 176 builder.addNumber("redirectCount", redirectCount()); |
178 } | 177 } |
179 } | 178 } |
OLD | NEW |