OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 "chrome/renderer/loadtimes_extension_bindings.h" | 5 #include "chrome/renderer/loadtimes_extension_bindings.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "content/public/renderer/navigation_state.h" | 10 #include "content/public/renderer/document_state.h" |
11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
12 #include "v8/include/v8.h" | 12 #include "v8/include/v8.h" |
13 | 13 |
14 using WebKit::WebDataSource; | 14 using WebKit::WebDataSource; |
15 using WebKit::WebFrame; | 15 using WebKit::WebFrame; |
16 using WebKit::WebNavigationType; | 16 using WebKit::WebNavigationType; |
17 using content::NavigationState; | 17 using content::DocumentState; |
18 | 18 |
19 // Values for CSI "tran" property | 19 // Values for CSI "tran" property |
20 const int kTransitionLink = 0; | 20 const int kTransitionLink = 0; |
21 const int kTransitionForwardBack = 6; | 21 const int kTransitionForwardBack = 6; |
22 const int kTransitionOther = 15; | 22 const int kTransitionOther = 15; |
23 const int kTransitionReload = 16; | 23 const int kTransitionReload = 16; |
24 | 24 |
25 namespace extensions_v8 { | 25 namespace extensions_v8 { |
26 | 26 |
27 static const char* const kLoadTimesExtensionName = "v8/LoadTimes"; | 27 static const char* const kLoadTimesExtensionName = "v8/LoadTimes"; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 return kTransitionOther; | 93 return kTransitionOther; |
94 } | 94 } |
95 return kTransitionOther; | 95 return kTransitionOther; |
96 } | 96 } |
97 | 97 |
98 static v8::Handle<v8::Value> GetLoadTimes(const v8::Arguments& args) { | 98 static v8::Handle<v8::Value> GetLoadTimes(const v8::Arguments& args) { |
99 WebFrame* frame = WebFrame::frameForCurrentContext(); | 99 WebFrame* frame = WebFrame::frameForCurrentContext(); |
100 if (frame) { | 100 if (frame) { |
101 WebDataSource* data_source = frame->dataSource(); | 101 WebDataSource* data_source = frame->dataSource(); |
102 if (data_source) { | 102 if (data_source) { |
103 NavigationState* navigation_state = | 103 DocumentState* document_state = |
104 NavigationState::FromDataSource(data_source); | 104 DocumentState::FromDataSource(data_source); |
105 v8::Local<v8::Object> load_times = v8::Object::New(); | 105 v8::Local<v8::Object> load_times = v8::Object::New(); |
106 load_times->Set( | 106 load_times->Set( |
107 v8::String::New("requestTime"), | 107 v8::String::New("requestTime"), |
108 v8::Number::New(navigation_state->request_time().ToDoubleT())); | 108 v8::Number::New(document_state->request_time().ToDoubleT())); |
109 load_times->Set( | 109 load_times->Set( |
110 v8::String::New("startLoadTime"), | 110 v8::String::New("startLoadTime"), |
111 v8::Number::New(navigation_state->start_load_time().ToDoubleT())); | 111 v8::Number::New(document_state->start_load_time().ToDoubleT())); |
112 load_times->Set( | 112 load_times->Set( |
113 v8::String::New("commitLoadTime"), | 113 v8::String::New("commitLoadTime"), |
114 v8::Number::New(navigation_state->commit_load_time().ToDoubleT())); | 114 v8::Number::New(document_state->commit_load_time().ToDoubleT())); |
115 load_times->Set( | 115 load_times->Set( |
116 v8::String::New("finishDocumentLoadTime"), | 116 v8::String::New("finishDocumentLoadTime"), |
117 v8::Number::New( | 117 v8::Number::New( |
118 navigation_state->finish_document_load_time().ToDoubleT())); | 118 document_state->finish_document_load_time().ToDoubleT())); |
119 load_times->Set( | 119 load_times->Set( |
120 v8::String::New("finishLoadTime"), | 120 v8::String::New("finishLoadTime"), |
121 v8::Number::New(navigation_state->finish_load_time().ToDoubleT())); | 121 v8::Number::New(document_state->finish_load_time().ToDoubleT())); |
122 load_times->Set( | 122 load_times->Set( |
123 v8::String::New("firstPaintTime"), | 123 v8::String::New("firstPaintTime"), |
124 v8::Number::New(navigation_state->first_paint_time().ToDoubleT())); | 124 v8::Number::New(document_state->first_paint_time().ToDoubleT())); |
125 load_times->Set( | 125 load_times->Set( |
126 v8::String::New("firstPaintAfterLoadTime"), | 126 v8::String::New("firstPaintAfterLoadTime"), |
127 v8::Number::New( | 127 v8::Number::New( |
128 navigation_state->first_paint_after_load_time().ToDoubleT())); | 128 document_state->first_paint_after_load_time().ToDoubleT())); |
129 load_times->Set( | 129 load_times->Set( |
130 v8::String::New("navigationType"), | 130 v8::String::New("navigationType"), |
131 v8::String::New(GetNavigationType(data_source->navigationType()))); | 131 v8::String::New(GetNavigationType(data_source->navigationType()))); |
132 load_times->Set( | 132 load_times->Set( |
133 v8::String::New("wasFetchedViaSpdy"), | 133 v8::String::New("wasFetchedViaSpdy"), |
134 v8::Boolean::New(navigation_state->was_fetched_via_spdy())); | 134 v8::Boolean::New(document_state->was_fetched_via_spdy())); |
135 load_times->Set( | 135 load_times->Set( |
136 v8::String::New("wasNpnNegotiated"), | 136 v8::String::New("wasNpnNegotiated"), |
137 v8::Boolean::New(navigation_state->was_npn_negotiated())); | 137 v8::Boolean::New(document_state->was_npn_negotiated())); |
138 load_times->Set( | 138 load_times->Set( |
139 v8::String::New("wasAlternateProtocolAvailable"), | 139 v8::String::New("wasAlternateProtocolAvailable"), |
140 v8::Boolean::New( | 140 v8::Boolean::New( |
141 navigation_state->was_alternate_protocol_available())); | 141 document_state->was_alternate_protocol_available())); |
142 return load_times; | 142 return load_times; |
143 } | 143 } |
144 } | 144 } |
145 return v8::Null(); | 145 return v8::Null(); |
146 } | 146 } |
147 | 147 |
148 static v8::Handle<v8::Value> GetCSI(const v8::Arguments& args) { | 148 static v8::Handle<v8::Value> GetCSI(const v8::Arguments& args) { |
149 WebFrame* frame = WebFrame::frameForCurrentContext(); | 149 WebFrame* frame = WebFrame::frameForCurrentContext(); |
150 if (frame) { | 150 if (frame) { |
151 WebDataSource* data_source = frame->dataSource(); | 151 WebDataSource* data_source = frame->dataSource(); |
152 if (data_source) { | 152 if (data_source) { |
153 NavigationState* navigation_state = | 153 DocumentState* document_state = |
154 NavigationState::FromDataSource(data_source); | 154 DocumentState::FromDataSource(data_source); |
155 v8::Local<v8::Object> csi = v8::Object::New(); | 155 v8::Local<v8::Object> csi = v8::Object::New(); |
156 base::Time now = base::Time::Now(); | 156 base::Time now = base::Time::Now(); |
157 base::Time start = navigation_state->request_time().is_null() ? | 157 base::Time start = document_state->request_time().is_null() ? |
158 navigation_state->start_load_time() : | 158 document_state->start_load_time() : |
159 navigation_state->request_time(); | 159 document_state->request_time(); |
160 base::Time onload = navigation_state->finish_document_load_time(); | 160 base::Time onload = document_state->finish_document_load_time(); |
161 base::TimeDelta page = now - start; | 161 base::TimeDelta page = now - start; |
162 csi->Set( | 162 csi->Set( |
163 v8::String::New("startE"), | 163 v8::String::New("startE"), |
164 v8::Number::New(floor(start.ToDoubleT() * 1000))); | 164 v8::Number::New(floor(start.ToDoubleT() * 1000))); |
165 csi->Set( | 165 csi->Set( |
166 v8::String::New("onloadT"), | 166 v8::String::New("onloadT"), |
167 v8::Number::New(floor(onload.ToDoubleT() * 1000))); | 167 v8::Number::New(floor(onload.ToDoubleT() * 1000))); |
168 csi->Set( | 168 csi->Set( |
169 v8::String::New("pageT"), | 169 v8::String::New("pageT"), |
170 v8::Number::New(page.InMillisecondsF())); | 170 v8::Number::New(page.InMillisecondsF())); |
171 csi->Set( | 171 csi->Set( |
172 v8::String::New("tran"), | 172 v8::String::New("tran"), |
173 v8::Number::New( | 173 v8::Number::New( |
174 GetCSITransitionType(data_source->navigationType()))); | 174 GetCSITransitionType(data_source->navigationType()))); |
175 | 175 |
176 return csi; | 176 return csi; |
177 } | 177 } |
178 } | 178 } |
179 return v8::Null(); | 179 return v8::Null(); |
180 } | 180 } |
181 }; | 181 }; |
182 | 182 |
183 v8::Extension* LoadTimesExtension::Get() { | 183 v8::Extension* LoadTimesExtension::Get() { |
184 return new LoadTimesExtensionWrapper(); | 184 return new LoadTimesExtensionWrapper(); |
185 } | 185 } |
186 | 186 |
187 } // namespace extensions_v8 | 187 } // namespace extensions_v8 |
OLD | NEW |