| 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 |