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

Unified Diff: chrome/renderer/extensions/loadtimes_extension_bindings.cc

Issue 42527: - Added support for keeping track of load times.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/extensions/loadtimes_extension_bindings.h ('k') | chrome/renderer/render_thread.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/extensions/loadtimes_extension_bindings.cc
===================================================================
--- chrome/renderer/extensions/loadtimes_extension_bindings.cc (revision 0)
+++ chrome/renderer/extensions/loadtimes_extension_bindings.cc (revision 0)
@@ -0,0 +1,91 @@
+// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/extensions/loadtimes_extension_bindings.h"
+
+#include "base/time.h"
+#include "v8/include/v8.h"
+#include "webkit/glue/webframe.h"
+#include "webkit/glue/webdatasource.h"
+
+namespace extensions_v8 {
+
+static const char* kLoadTimesExtensionName = "v8/LoadTimes";
+
+class LoadTimesExtensionWrapper : public v8::Extension {
+ public:
+ // Creates an extension which adds a new function, chromium.GetLoadTimes()
+ // This function returns an object containing the following members:
+ // requestTime: The time the request to load the page was received
+ // loadTime: The time the renderer started the load process
+ // finishDocumentLoadTime: The time the document itself was loaded
+ // (this is before the onload() method is fired)
+ // finishLoadTime: The time all loading is done, after the onload()
+ // method and all resources
+ // navigationType: A string describing what user action initiated the load
+ LoadTimesExtensionWrapper() :
+ v8::Extension(kLoadTimesExtensionName,
+ "var chromium;"
+ "if (!chromium)"
+ " chromium = {};"
+ "chromium.GetLoadTimes = function() {"
+ " native function GetLoadTimes();"
+ " return GetLoadTimes();"
+ "}") {}
+
+ virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
+ v8::Handle<v8::String> name) {
+ if (name->Equals(v8::String::New("GetLoadTimes"))) {
+ return v8::FunctionTemplate::New(GetLoadTimes);
+ }
+ return v8::Handle<v8::FunctionTemplate>();
+ }
+
+ static const char *GetNavigationType(WebNavigationType nav_type) {
+ switch (nav_type) {
+ case WebNavigationTypeLinkClicked: return "LinkClicked";
+ case WebNavigationTypeFormSubmitted: return "FormSubmitted";
+ case WebNavigationTypeBackForward: return "BackForward";
+ case WebNavigationTypeReload: return "Reload";
+ case WebNavigationTypeFormResubmitted: return "Resubmitted";
+ case WebNavigationTypeOther: return "Other";
+ }
+ return "";
+ }
+
+ static v8::Handle<v8::Value> GetLoadTimes(const v8::Arguments& args) {
+ WebFrame* win_frame = WebFrame::RetrieveActiveFrame();
+ if (win_frame) {
+ WebDataSource* data_source = win_frame->GetDataSource();
+ if (data_source) {
+ v8::Local<v8::Object> load_times = v8::Object::New();
+ load_times->Set(
+ v8::String::New("requestTime"),
+ v8::Number::New(data_source->GetRequestTime().ToDoubleT()));
+ load_times->Set(
+ v8::String::New("startLoadTime"),
+ v8::Number::New(data_source->GetStartLoadTime().ToDoubleT()));
+ load_times->Set(
+ v8::String::New("finishDocumentLoadTime"),
+ v8::Number::New(
+ data_source->GetFinishDocumentLoadTime().ToDoubleT()));
+ load_times->Set(
+ v8::String::New("finishLoadTime"),
+ v8::Number::New(data_source->GetFinishLoadTime().ToDoubleT()));
+ load_times->Set(
+ v8::String::New("navigationType"),
+ v8::String::New(
+ GetNavigationType(data_source->GetNavigationType())));
+ return load_times;
+ }
+ }
+ return v8::Null();
+ }
+};
+
+v8::Extension* LoadTimesExtension::Get() {
+ return new LoadTimesExtensionWrapper();
+}
+
+} // namespace extensions_v8
« no previous file with comments | « chrome/renderer/extensions/loadtimes_extension_bindings.h ('k') | chrome/renderer/render_thread.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698