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

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

Issue 2472583003: Navigation Timing Level 2 (Closed)
Patch Set: added TAO(timing-allow-origin) check and RA(redirect allow) check 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 timeOrigin,
51 timing,
52 lastRedirectEndTime,
53 finishTime,
54 transferSize,
55 encodedBodyLength,
56 decodedBodyLength,
57 didReuseConnection,
58 true /*allowTimingDetails*/,
59 hasCrossOriginRedirect,
Kunihiko Sakamoto 2016/11/10 03:31:49 I think this should be !hasCrossOriginRedirect.
sunjian 2016/11/11 21:48:05 Done.
60 "document",
61 "navigation",
62 timeOrigin),
63 m_timeOrigin(timeOrigin),
64 m_unloadEventStart(unloadEventStart),
65 m_unloadEventEnd(unloadEventEnd),
66 m_loadEventStart(loadEventStart),
67 m_loadEventEnd(loadEventEnd),
68 m_redirectCount(redirectCount),
69 m_domInteractive(domInteractive),
70 m_domContentLoadedEventStart(domContentLoadedEventStart),
71 m_domContentLoadedEventEnd(domContentLoadedEventEnd),
72 m_domComplete(domComplete),
73 m_type(type),
74 m_redirectStart(redirectStart),
75 m_redirectEnd(redirectEnd),
76 m_fetchStart(fetchStart),
77 m_responseEnd(responseEnd),
78 m_hasCrossOriginRedirect(hasCrossOriginRedirect),
79 m_hasSameOriginAsPreviousDocument(hasSameOriginAsPreviousDocument) {}
80
81 PerformanceNavigationTiming::~PerformanceNavigationTiming() {}
82
83 double PerformanceNavigationTiming::unloadEventStart() const {
84 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
85 return 0;
86 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventStart);
87 }
88
89 double PerformanceNavigationTiming::unloadEventEnd() const {
90 if (m_hasCrossOriginRedirect || !m_hasSameOriginAsPreviousDocument)
91 return 0;
92
93 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_unloadEventEnd);
94 }
95
96 double PerformanceNavigationTiming::domInteractive() const {
97 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domInteractive);
98 }
99
100 double PerformanceNavigationTiming::domContentLoadedEventStart() const {
101 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
102 m_domContentLoadedEventStart);
103 }
104
105 double PerformanceNavigationTiming::domContentLoadedEventEnd() const {
106 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin,
107 m_domContentLoadedEventEnd);
108 }
109
110 double PerformanceNavigationTiming::domComplete() const {
111 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_domComplete);
112 }
113
114 double PerformanceNavigationTiming::loadEventStart() const {
115 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventStart);
116 }
117
118 double PerformanceNavigationTiming::loadEventEnd() const {
119 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_loadEventEnd);
120 }
121
122 AtomicString PerformanceNavigationTiming::type() const {
123 // TODO(sunjian) Right now NavigationType doesn't seem to have a Prerender
124 // type yet, need to look into this crbug/663217
125 switch (m_type) {
126 case NavigationTypeReload:
127 return "reload";
128 case NavigationTypeBackForward:
129 return "back_forward";
130 default:
131 return "navigate";
132 }
133 }
134
135 unsigned short PerformanceNavigationTiming::redirectCount() const {
136 if (m_hasCrossOriginRedirect)
137 return 0;
138 return m_redirectCount;
139 }
140
141 // Methods that are overriden from PerformanceResourceTiming
kinuko 2016/11/10 17:55:33 This comment should be rather in the header, no ne
sunjian 2016/11/11 21:48:05 Done.
142 double PerformanceNavigationTiming::fetchStart() const {
143 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_fetchStart);
144 }
145
146 double PerformanceNavigationTiming::redirectStart() const {
147 if (m_hasCrossOriginRedirect)
148 return 0;
149 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectStart);
150 }
151
152 double PerformanceNavigationTiming::redirectEnd() const {
153 if (m_hasCrossOriginRedirect)
154 return 0;
155 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_redirectEnd);
156 }
157
158 double PerformanceNavigationTiming::responseEnd() const {
159 return monotonicTimeToDOMHighResTimeStamp(m_timeOrigin, m_responseEnd);
160 }
161
162 void PerformanceNavigationTiming::buildJSONValue(
163 V8ObjectBuilder& builder) const {
164 PerformanceResourceTiming::buildJSONValue(builder);
165 builder.addNumber("unloadEventStart", unloadEventStart());
166 builder.addNumber("unloadEventEnd", unloadEventEnd());
167 builder.addNumber("domInteractive", domInteractive());
168 builder.addNumber("domContentLoadedEventStart", domContentLoadedEventStart());
169 builder.addNumber("domContentLoadedEventEnd", domContentLoadedEventEnd());
170 builder.addNumber("domComplete", domComplete());
171 builder.addNumber("loadEventStart", loadEventStart());
172 builder.addNumber("loadEventEnd", loadEventEnd());
173 builder.addString("type", type());
174 builder.addNumber("redirectCount", redirectCount());
175 }
176 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698