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

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

Issue 2472583003: Navigation Timing Level 2 (Closed)
Patch Set: fixed layout tests failure Created 4 years 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/timing/PerformanceBase.h"
9
10 namespace blink {
11
12 // TODO(sunjian): Move this logic into PerformanceBase
13 static double monotonicTimeToDOMHighResTimeStamp(double timeOrigin,
14 double seconds) {
15 DCHECK(seconds >= 0.0);
16 if (!seconds || !timeOrigin)
17 return 0.0;
18 if (seconds < timeOrigin)
19 return 0.0;
20 return PerformanceBase::clampTimeResolution(seconds - timeOrigin) * 1000.0;
21 }
22
23 PerformanceNavigationTiming::PerformanceNavigationTiming(
24 double timeOrigin,
25 double unloadEventStart,
26 double unloadEventEnd,
27 double loadEventStart,
28 double loadEventEnd,
29 unsigned short redirectCount,
30 double domInteractive,
31 double domContentLoadedEventStart,
32 double domContentLoadedEventEnd,
33 double domComplete,
34 NavigationType type,
35 double redirectStart,
36 double redirectEnd,
37 double fetchStart,
38 double responseEnd,
39 bool hasCrossOriginRedirect,
40 bool hasSameOriginAsPreviousDocument,
41 ResourceLoadTiming* timing,
42 double lastRedirectEndTime,
43 double finishTime,
44 unsigned long long transferSize,
45 unsigned long long encodedBodyLength,
46 unsigned long long decodedBodyLength,
47 bool didReuseConnection)
48 : PerformanceResourceTiming("",
49 timeOrigin,
50 timing,
51 lastRedirectEndTime,
52 finishTime,
53 transferSize,
54 encodedBodyLength,
55 decodedBodyLength,
56 didReuseConnection,
57 true /*allowTimingDetails*/, // TODO(sunjian):
58 // Create an enum
59 // for this.
60 !hasCrossOriginRedirect,
61 "document",
62 "navigation",
63 timeOrigin),
64 m_timeOrigin(timeOrigin),
65 m_unloadEventStart(unloadEventStart),
66 m_unloadEventEnd(unloadEventEnd),
67 m_loadEventStart(loadEventStart),
68 m_loadEventEnd(loadEventEnd),
69 m_redirectCount(redirectCount),
70 m_domInteractive(domInteractive),
71 m_domContentLoadedEventStart(domContentLoadedEventStart),
72 m_domContentLoadedEventEnd(domContentLoadedEventEnd),
73 m_domComplete(domComplete),
74 m_type(type),
75 m_redirectStart(redirectStart),
76 m_redirectEnd(redirectEnd),
77 m_fetchStart(fetchStart),
78 m_responseEnd(responseEnd),
79 m_hasCrossOriginRedirect(hasCrossOriginRedirect),
80 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {}
81
82 PerformanceNavigationTiming::~PerformanceNavigationTiming() {}
83
84 double PerformanceNavigationTiming::unloadEventStart() const {
85 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
86 return 0;
87 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart);
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 // TODO(sunjian): Also check response headers to allow opt-in crbugs/665160
138 if (m_hasCrossOriginRedirect)
139 return 0;
140 return m_redirectCount;
141 }
142
143 double PerformanceNavigationTiming::fetchStart() const {
144 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart);
145 }
146
147 double PerformanceNavigationTiming::redirectStart() const {
148 if (m_hasCrossOriginRedirect)
149 return 0;
150 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart);
151 }
152
153 double PerformanceNavigationTiming::redirectEnd() const {
154 if (m_hasCrossOriginRedirect)
155 return 0;
156 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd);
157 }
158
159 double PerformanceNavigationTiming::responseEnd() const {
160 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd);
161 }
162
163 void PerformanceNavigationTiming::buildJSONValue(
164 V8ObjectBuilder& builder) const {
165 PerformanceResourceTiming::buildJSONValue(builder);
166 builder.addNumber("unloadEventStart", unloadEventStart());
167 builder.addNumber("unloadEventEnd", unloadEventEnd());
168 builder.addNumber("domInteractive", domInteractive());
169 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart());
170 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd());
171 builder.addNumber("domComplete", domComplete());
172 builder.addNumber("loadEventStart", loadEventStart());
173 builder.addNumber("loadEventEnd", loadEventEnd());
174 builder.addString("type", type());
175 builder.addNumber("redirectCount", redirectCount());
176 }
177 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698