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/navigation_state.h" |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 NavigationState* navigation_state = |
104 NavigationState::FromDataSource(data_source); | 104 NavigationState::FromDataSource(data_source); |
| 105 NavigationState::LoadTimes* navigation_times = |
| 106 navigation_state->load_times(); |
105 v8::Local<v8::Object> load_times = v8::Object::New(); | 107 v8::Local<v8::Object> load_times = v8::Object::New(); |
106 load_times->Set( | 108 load_times->Set( |
107 v8::String::New("requestTime"), | 109 v8::String::New("requestTime"), |
108 v8::Number::New(navigation_state->request_time().ToDoubleT())); | 110 v8::Number::New(navigation_times->request_time().ToDoubleT())); |
109 load_times->Set( | 111 load_times->Set( |
110 v8::String::New("startLoadTime"), | 112 v8::String::New("startLoadTime"), |
111 v8::Number::New(navigation_state->start_load_time().ToDoubleT())); | 113 v8::Number::New(navigation_times->start_load_time().ToDoubleT())); |
112 load_times->Set( | 114 load_times->Set( |
113 v8::String::New("commitLoadTime"), | 115 v8::String::New("commitLoadTime"), |
114 v8::Number::New(navigation_state->commit_load_time().ToDoubleT())); | 116 v8::Number::New(navigation_times->commit_load_time().ToDoubleT())); |
115 load_times->Set( | 117 load_times->Set( |
116 v8::String::New("finishDocumentLoadTime"), | 118 v8::String::New("finishDocumentLoadTime"), |
117 v8::Number::New( | 119 v8::Number::New( |
118 navigation_state->finish_document_load_time().ToDoubleT())); | 120 navigation_times->finish_document_load_time().ToDoubleT())); |
119 load_times->Set( | 121 load_times->Set( |
120 v8::String::New("finishLoadTime"), | 122 v8::String::New("finishLoadTime"), |
121 v8::Number::New(navigation_state->finish_load_time().ToDoubleT())); | 123 v8::Number::New(navigation_times->finish_load_time().ToDoubleT())); |
122 load_times->Set( | 124 load_times->Set( |
123 v8::String::New("firstPaintTime"), | 125 v8::String::New("firstPaintTime"), |
124 v8::Number::New(navigation_state->first_paint_time().ToDoubleT())); | 126 v8::Number::New(navigation_times->first_paint_time().ToDoubleT())); |
125 load_times->Set( | 127 load_times->Set( |
126 v8::String::New("firstPaintAfterLoadTime"), | 128 v8::String::New("firstPaintAfterLoadTime"), |
127 v8::Number::New( | 129 v8::Number::New( |
128 navigation_state->first_paint_after_load_time().ToDoubleT())); | 130 navigation_times->first_paint_after_load_time().ToDoubleT())); |
129 load_times->Set( | 131 load_times->Set( |
130 v8::String::New("navigationType"), | 132 v8::String::New("navigationType"), |
131 v8::String::New(GetNavigationType(data_source->navigationType()))); | 133 v8::String::New(GetNavigationType(data_source->navigationType()))); |
132 load_times->Set( | 134 load_times->Set( |
133 v8::String::New("wasFetchedViaSpdy"), | 135 v8::String::New("wasFetchedViaSpdy"), |
134 v8::Boolean::New(navigation_state->was_fetched_via_spdy())); | 136 v8::Boolean::New(navigation_times->was_fetched_via_spdy())); |
135 load_times->Set( | 137 load_times->Set( |
136 v8::String::New("wasNpnNegotiated"), | 138 v8::String::New("wasNpnNegotiated"), |
137 v8::Boolean::New(navigation_state->was_npn_negotiated())); | 139 v8::Boolean::New(navigation_times->was_npn_negotiated())); |
138 load_times->Set( | 140 load_times->Set( |
139 v8::String::New("wasAlternateProtocolAvailable"), | 141 v8::String::New("wasAlternateProtocolAvailable"), |
140 v8::Boolean::New( | 142 v8::Boolean::New( |
141 navigation_state->was_alternate_protocol_available())); | 143 navigation_times->was_alternate_protocol_available())); |
142 return load_times; | 144 return load_times; |
143 } | 145 } |
144 } | 146 } |
145 return v8::Null(); | 147 return v8::Null(); |
146 } | 148 } |
147 | 149 |
148 static v8::Handle<v8::Value> GetCSI(const v8::Arguments& args) { | 150 static v8::Handle<v8::Value> GetCSI(const v8::Arguments& args) { |
149 WebFrame* frame = WebFrame::frameForCurrentContext(); | 151 WebFrame* frame = WebFrame::frameForCurrentContext(); |
150 if (frame) { | 152 if (frame) { |
151 WebDataSource* data_source = frame->dataSource(); | 153 WebDataSource* data_source = frame->dataSource(); |
152 if (data_source) { | 154 if (data_source) { |
153 NavigationState* navigation_state = | 155 NavigationState* navigation_state = |
154 NavigationState::FromDataSource(data_source); | 156 NavigationState::FromDataSource(data_source); |
| 157 NavigationState::LoadTimes* navigation_times = |
| 158 navigation_state->load_times(); |
155 v8::Local<v8::Object> csi = v8::Object::New(); | 159 v8::Local<v8::Object> csi = v8::Object::New(); |
156 base::Time now = base::Time::Now(); | 160 base::Time now = base::Time::Now(); |
157 base::Time start = navigation_state->request_time().is_null() ? | 161 base::Time start = navigation_times->request_time().is_null() ? |
158 navigation_state->start_load_time() : | 162 navigation_times->start_load_time() : |
159 navigation_state->request_time(); | 163 navigation_times->request_time(); |
160 base::Time onload = navigation_state->finish_document_load_time(); | 164 base::Time onload = navigation_times->finish_document_load_time(); |
161 base::TimeDelta page = now - start; | 165 base::TimeDelta page = now - start; |
162 csi->Set( | 166 csi->Set( |
163 v8::String::New("startE"), | 167 v8::String::New("startE"), |
164 v8::Number::New(floor(start.ToDoubleT() * 1000))); | 168 v8::Number::New(floor(start.ToDoubleT() * 1000))); |
165 csi->Set( | 169 csi->Set( |
166 v8::String::New("onloadT"), | 170 v8::String::New("onloadT"), |
167 v8::Number::New(floor(onload.ToDoubleT() * 1000))); | 171 v8::Number::New(floor(onload.ToDoubleT() * 1000))); |
168 csi->Set( | 172 csi->Set( |
169 v8::String::New("pageT"), | 173 v8::String::New("pageT"), |
170 v8::Number::New(page.InMillisecondsF())); | 174 v8::Number::New(page.InMillisecondsF())); |
171 csi->Set( | 175 csi->Set( |
172 v8::String::New("tran"), | 176 v8::String::New("tran"), |
173 v8::Number::New( | 177 v8::Number::New( |
174 GetCSITransitionType(data_source->navigationType()))); | 178 GetCSITransitionType(data_source->navigationType()))); |
175 | 179 |
176 return csi; | 180 return csi; |
177 } | 181 } |
178 } | 182 } |
179 return v8::Null(); | 183 return v8::Null(); |
180 } | 184 } |
181 }; | 185 }; |
182 | 186 |
183 v8::Extension* LoadTimesExtension::Get() { | 187 v8::Extension* LoadTimesExtension::Get() { |
184 return new LoadTimesExtensionWrapper(); | 188 return new LoadTimesExtensionWrapper(); |
185 } | 189 } |
186 | 190 |
187 } // namespace extensions_v8 | 191 } // namespace extensions_v8 |
OLD | NEW |