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

Side by Side Diff: chrome/renderer/loadtimes_extension_bindings.cc

Issue 8404018: chrome.loadTimes() shouldn't be affected by in-document navigation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix style Created 9 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 | Annotate | Revision Log
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698