| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/public/renderer/document_state.h" | 10 #include "content/public/renderer/document_state.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 case blink::WebNavigationTypeReload: | 92 case blink::WebNavigationTypeReload: |
| 93 return kTransitionReload; | 93 return kTransitionReload; |
| 94 case blink::WebNavigationTypeOther: | 94 case blink::WebNavigationTypeOther: |
| 95 return kTransitionOther; | 95 return kTransitionOther; |
| 96 } | 96 } |
| 97 return kTransitionOther; | 97 return kTransitionOther; |
| 98 } | 98 } |
| 99 | 99 |
| 100 static void GetLoadTimes(const v8::FunctionCallbackInfo<v8::Value>& args) { | 100 static void GetLoadTimes(const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 101 WebLocalFrame* frame = WebLocalFrame::frameForCurrentContext(); | 101 WebLocalFrame* frame = WebLocalFrame::frameForCurrentContext(); |
| 102 if (frame) { | 102 if (!frame) { |
| 103 WebDataSource* data_source = frame->dataSource(); | 103 args.GetReturnValue().SetNull(); |
| 104 if (data_source) { | 104 return; |
| 105 DocumentState* document_state = | |
| 106 DocumentState::FromDataSource(data_source); | |
| 107 v8::Isolate* isolate = args.GetIsolate(); | |
| 108 v8::Local<v8::Object> load_times = v8::Object::New(isolate); | |
| 109 load_times->Set( | |
| 110 v8::String::NewFromUtf8(isolate, "requestTime"), | |
| 111 v8::Number::New(isolate, | |
| 112 document_state->request_time().ToDoubleT())); | |
| 113 load_times->Set( | |
| 114 v8::String::NewFromUtf8(isolate, "startLoadTime"), | |
| 115 v8::Number::New(isolate, | |
| 116 document_state->start_load_time().ToDoubleT())); | |
| 117 load_times->Set( | |
| 118 v8::String::NewFromUtf8(isolate, "commitLoadTime"), | |
| 119 v8::Number::New(isolate, | |
| 120 document_state->commit_load_time().ToDoubleT())); | |
| 121 load_times->Set( | |
| 122 v8::String::NewFromUtf8(isolate, "finishDocumentLoadTime"), | |
| 123 v8::Number::New( | |
| 124 isolate, | |
| 125 document_state->finish_document_load_time().ToDoubleT())); | |
| 126 load_times->Set( | |
| 127 v8::String::NewFromUtf8(isolate, "finishLoadTime"), | |
| 128 v8::Number::New(isolate, | |
| 129 document_state->finish_load_time().ToDoubleT())); | |
| 130 load_times->Set( | |
| 131 v8::String::NewFromUtf8(isolate, "firstPaintTime"), | |
| 132 v8::Number::New(isolate, | |
| 133 document_state->first_paint_time().ToDoubleT())); | |
| 134 load_times->Set( | |
| 135 v8::String::NewFromUtf8(isolate, "firstPaintAfterLoadTime"), | |
| 136 v8::Number::New( | |
| 137 isolate, | |
| 138 document_state->first_paint_after_load_time().ToDoubleT())); | |
| 139 load_times->Set( | |
| 140 v8::String::NewFromUtf8(isolate, "navigationType"), | |
| 141 v8::String::NewFromUtf8( | |
| 142 isolate, GetNavigationType(data_source->navigationType()))); | |
| 143 load_times->Set( | |
| 144 v8::String::NewFromUtf8(isolate, "wasFetchedViaSpdy"), | |
| 145 v8::Boolean::New(isolate, document_state->was_fetched_via_spdy())); | |
| 146 load_times->Set( | |
| 147 v8::String::NewFromUtf8(isolate, "wasNpnNegotiated"), | |
| 148 v8::Boolean::New(isolate, document_state->was_npn_negotiated())); | |
| 149 load_times->Set( | |
| 150 v8::String::NewFromUtf8(isolate, "npnNegotiatedProtocol"), | |
| 151 v8::String::NewFromUtf8( | |
| 152 isolate, document_state->npn_negotiated_protocol().c_str())); | |
| 153 load_times->Set( | |
| 154 v8::String::NewFromUtf8(isolate, "wasAlternateProtocolAvailable"), | |
| 155 v8::Boolean::New( | |
| 156 isolate, document_state->was_alternate_protocol_available())); | |
| 157 load_times->Set(v8::String::NewFromUtf8(isolate, "connectionInfo"), | |
| 158 v8::String::NewFromUtf8( | |
| 159 isolate, | |
| 160 net::HttpResponseInfo::ConnectionInfoToString( | |
| 161 document_state->connection_info()).c_str())); | |
| 162 args.GetReturnValue().Set(load_times); | |
| 163 return; | |
| 164 } | |
| 165 } | 105 } |
| 166 args.GetReturnValue().SetNull(); | 106 WebDataSource* data_source = frame->dataSource(); |
| 107 if (!data_source) { |
| 108 args.GetReturnValue().SetNull(); |
| 109 return; |
| 110 } |
| 111 DocumentState* document_state = DocumentState::FromDataSource(data_source); |
| 112 if (!document_state) { |
| 113 args.GetReturnValue().SetNull(); |
| 114 return; |
| 115 } |
| 116 double request_time = document_state->request_time().ToDoubleT(); |
| 117 double start_load_time = document_state->start_load_time().ToDoubleT(); |
| 118 double commit_load_time = document_state->commit_load_time().ToDoubleT(); |
| 119 double finish_document_load_time = |
| 120 document_state->finish_document_load_time().ToDoubleT(); |
| 121 double finish_load_time = document_state->finish_load_time().ToDoubleT(); |
| 122 double first_paint_time = document_state->first_paint_time().ToDoubleT(); |
| 123 double first_paint_after_load_time = |
| 124 document_state->first_paint_after_load_time().ToDoubleT(); |
| 125 std::string navigation_type = |
| 126 GetNavigationType(data_source->navigationType()); |
| 127 bool was_fetched_via_spdy = document_state->was_fetched_via_spdy(); |
| 128 bool was_npn_negotiated = document_state->was_npn_negotiated(); |
| 129 std::string npn_negotiated_protocol = |
| 130 document_state->npn_negotiated_protocol(); |
| 131 bool was_alternate_protocol_available = |
| 132 document_state->was_alternate_protocol_available(); |
| 133 std::string connection_info = net::HttpResponseInfo::ConnectionInfoToString( |
| 134 document_state->connection_info()); |
| 135 // Important: |frame|, |data_source| and |document_state| should not be |
| 136 // referred to below this line, as JS setters below can invalidate these |
| 137 // pointers. |
| 138 v8::Isolate* isolate = args.GetIsolate(); |
| 139 v8::Local<v8::Object> load_times = v8::Object::New(isolate); |
| 140 load_times->Set(v8::String::NewFromUtf8(isolate, "requestTime"), |
| 141 v8::Number::New(isolate, request_time)); |
| 142 load_times->Set(v8::String::NewFromUtf8(isolate, "startLoadTime"), |
| 143 v8::Number::New(isolate, start_load_time)); |
| 144 load_times->Set(v8::String::NewFromUtf8(isolate, "commitLoadTime"), |
| 145 v8::Number::New(isolate, commit_load_time)); |
| 146 load_times->Set(v8::String::NewFromUtf8(isolate, "finishDocumentLoadTime"), |
| 147 v8::Number::New(isolate, finish_document_load_time)); |
| 148 load_times->Set(v8::String::NewFromUtf8(isolate, "finishLoadTime"), |
| 149 v8::Number::New(isolate, finish_load_time)); |
| 150 load_times->Set(v8::String::NewFromUtf8(isolate, "firstPaintTime"), |
| 151 v8::Number::New(isolate, first_paint_time)); |
| 152 load_times->Set(v8::String::NewFromUtf8(isolate, "firstPaintAfterLoadTime"), |
| 153 v8::Number::New(isolate, first_paint_after_load_time)); |
| 154 load_times->Set(v8::String::NewFromUtf8(isolate, "navigationType"), |
| 155 v8::String::NewFromUtf8(isolate, navigation_type.c_str())); |
| 156 load_times->Set(v8::String::NewFromUtf8(isolate, "wasFetchedViaSpdy"), |
| 157 v8::Boolean::New(isolate, was_fetched_via_spdy)); |
| 158 load_times->Set(v8::String::NewFromUtf8(isolate, "wasNpnNegotiated"), |
| 159 v8::Boolean::New(isolate, was_npn_negotiated)); |
| 160 load_times->Set( |
| 161 v8::String::NewFromUtf8(isolate, "npnNegotiatedProtocol"), |
| 162 v8::String::NewFromUtf8(isolate, npn_negotiated_protocol.c_str())); |
| 163 load_times->Set( |
| 164 v8::String::NewFromUtf8(isolate, "wasAlternateProtocolAvailable"), |
| 165 v8::Boolean::New(isolate, was_alternate_protocol_available)); |
| 166 load_times->Set(v8::String::NewFromUtf8(isolate, "connectionInfo"), |
| 167 v8::String::NewFromUtf8(isolate, connection_info.c_str())); |
| 168 args.GetReturnValue().Set(load_times); |
| 167 } | 169 } |
| 168 | 170 |
| 169 static void GetCSI(const v8::FunctionCallbackInfo<v8::Value>& args) { | 171 static void GetCSI(const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 170 WebLocalFrame* frame = WebLocalFrame::frameForCurrentContext(); | 172 WebLocalFrame* frame = WebLocalFrame::frameForCurrentContext(); |
| 171 if (frame) { | 173 if (frame) { |
| 172 WebDataSource* data_source = frame->dataSource(); | 174 WebDataSource* data_source = frame->dataSource(); |
| 173 if (data_source) { | 175 if (data_source) { |
| 174 DocumentState* document_state = | 176 DocumentState* document_state = |
| 175 DocumentState::FromDataSource(data_source); | 177 DocumentState::FromDataSource(data_source); |
| 176 v8::Isolate* isolate = args.GetIsolate(); | 178 v8::Isolate* isolate = args.GetIsolate(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 199 args.GetReturnValue().SetNull(); | 201 args.GetReturnValue().SetNull(); |
| 200 return; | 202 return; |
| 201 } | 203 } |
| 202 }; | 204 }; |
| 203 | 205 |
| 204 v8::Extension* LoadTimesExtension::Get() { | 206 v8::Extension* LoadTimesExtension::Get() { |
| 205 return new LoadTimesExtensionWrapper(); | 207 return new LoadTimesExtensionWrapper(); |
| 206 } | 208 } |
| 207 | 209 |
| 208 } // namespace extensions_v8 | 210 } // namespace extensions_v8 |
| OLD | NEW |