summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorkouhei@chromium.org <kouhei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 07:16:52 +0000
committerkouhei@chromium.org <kouhei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-30 07:16:52 +0000
commit798a1b069246a628ed772a60598d5f2ad4a13ce9 (patch)
treec503c6b69119e050f71b66b853edd6d0a856892c /content
parent3a86a71669173b4f334c9a9103409051fccc728a (diff)
downloadchromium_src-798a1b069246a628ed772a60598d5f2ad4a13ce9.zip
chromium_src-798a1b069246a628ed772a60598d5f2ad4a13ce9.tar.gz
chromium_src-798a1b069246a628ed772a60598d5f2ad4a13ce9.tar.bz2
Add the UMA PLT.BeginToFinish{,Doc}_AfterPreconnectRequest to measure PLT just after mouseevent preconnect triggers.
[Note to sheriff] This patch requires blink patch http://crrev.com/18598003 to be landed first. This UMA aims to measure PLT on link navigations with {mouse,gesture}-event preconnects. The PLT is to be compared between experiment/control groups using Finch. BUG=235361 Review URL: https://chromiumcodereview.appspot.com/18601004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214313 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/child/request_extra_data.cc4
-rw-r--r--content/child/request_extra_data.h1
-rw-r--r--content/child/resource_dispatcher_unittest.cc2
-rw-r--r--content/public/renderer/document_state.cc1
-rw-r--r--content/public/renderer/document_state.h6
-rw-r--r--content/renderer/pepper/url_request_info_util.cc4
-rw-r--r--content/renderer/render_frame_impl.cc42
-rw-r--r--content/renderer/render_frame_impl.h2
8 files changed, 54 insertions, 8 deletions
diff --git a/content/child/request_extra_data.cc b/content/child/request_extra_data.cc
index ac2bed12..419fbb4 100644
--- a/content/child/request_extra_data.cc
+++ b/content/child/request_extra_data.cc
@@ -11,6 +11,7 @@ namespace content {
RequestExtraData::RequestExtraData(WebReferrerPolicy referrer_policy,
const WebString& custom_user_agent,
+ bool was_after_preconnect_request,
bool is_main_frame,
int64 frame_id,
bool parent_is_main_frame,
@@ -20,7 +21,8 @@ RequestExtraData::RequestExtraData(WebReferrerPolicy referrer_policy,
int transferred_request_child_id,
int transferred_request_request_id)
: webkit_glue::WebURLRequestExtraDataImpl(referrer_policy,
- custom_user_agent),
+ custom_user_agent,
+ was_after_preconnect_request),
is_main_frame_(is_main_frame),
frame_id_(frame_id),
parent_is_main_frame_(parent_is_main_frame),
diff --git a/content/child/request_extra_data.h b/content/child/request_extra_data.h
index 3cbc7fa..83adf28 100644
--- a/content/child/request_extra_data.h
+++ b/content/child/request_extra_data.h
@@ -19,6 +19,7 @@ class CONTENT_EXPORT RequestExtraData
public:
RequestExtraData(WebKit::WebReferrerPolicy referrer_policy,
const WebKit::WebString& custom_user_agent,
+ bool was_after_preconnect_request,
bool is_main_frame,
int64 frame_id,
bool parent_is_main_frame,
diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc
index 6b5eb40..f537496 100644
--- a/content/child/resource_dispatcher_unittest.cc
+++ b/content/child/resource_dispatcher_unittest.cc
@@ -176,7 +176,7 @@ class ResourceDispatcherTest : public testing::Test, public IPC::Sender {
request_info.routing_id = 0;
RequestExtraData extra_data(WebKit::WebReferrerPolicyDefault,
WebKit::WebString(),
- true, 0, false, -1, true,
+ false, true, 0, false, -1, true,
PAGE_TRANSITION_LINK, -1, -1);
request_info.extra_data = &extra_data;
diff --git a/content/public/renderer/document_state.cc b/content/public/renderer/document_state.cc
index 9e9d57d..235fc89 100644
--- a/content/public/renderer/document_state.cc
+++ b/content/public/renderer/document_state.cc
@@ -19,6 +19,7 @@ DocumentState::DocumentState()
was_fetched_via_proxy_(false),
was_prefetcher_(false),
was_referred_by_prefetcher_(false),
+ was_after_preconnect_request_(false),
load_type_(UNDEFINED_LOAD),
can_load_local_resources_(false) {
}
diff --git a/content/public/renderer/document_state.h b/content/public/renderer/document_state.h
index c7829d6..40a5f42 100644
--- a/content/public/renderer/document_state.h
+++ b/content/public/renderer/document_state.h
@@ -186,6 +186,11 @@ class CONTENT_EXPORT DocumentState
return was_referred_by_prefetcher_;
}
+ void set_was_after_preconnect_request(bool value) {
+ was_after_preconnect_request_ = value;
+ }
+ bool was_after_preconnect_request() { return was_after_preconnect_request_; }
+
// Record the nature of this load, for use when histogramming page load times.
LoadType load_type() const { return load_type_; }
void set_load_type(LoadType load_type) { load_type_ = load_type; }
@@ -220,6 +225,7 @@ class CONTENT_EXPORT DocumentState
// A prefetcher is a page that contains link rel=prefetch elements.
bool was_prefetcher_;
bool was_referred_by_prefetcher_;
+ bool was_after_preconnect_request_;
LoadType load_type_;
diff --git a/content/renderer/pepper/url_request_info_util.cc b/content/renderer/pepper/url_request_info_util.cc
index 8e2988a..9091203 100644
--- a/content/renderer/pepper/url_request_info_util.cc
+++ b/content/renderer/pepper/url_request_info_util.cc
@@ -186,9 +186,11 @@ bool CreateWebURLRequest(::ppapi::URLRequestInfoData* data,
}
if (data->has_custom_user_agent) {
+ bool was_after_preconnect_request = false;
dest->setExtraData(new webkit_glue::WebURLRequestExtraDataImpl(
WebKit::WebReferrerPolicyDefault, // Ignored.
- WebString::fromUTF8(data->custom_user_agent)));
+ WebString::fromUTF8(data->custom_user_agent),
+ was_after_preconnect_request));
}
return true;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 33b167a..fcdab6e 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -490,6 +490,30 @@ void RenderFrameImpl::didUpdateCurrentHistoryItem(WebKit::WebFrame* frame) {
render_view_->didUpdateCurrentHistoryItem(frame);
}
+void RenderFrameImpl::willRequestAfterPreconnect(
+ WebKit::WebFrame* frame,
+ WebKit::WebURLRequest& request) {
+ WebKit::WebReferrerPolicy referrer_policy = WebKit::WebReferrerPolicyDefault;
+ WebString custom_user_agent;
+
+ if (request.extraData()) {
+ // This will only be called before willSendRequest, so only ExtraData
+ // members we have to copy here is on WebURLRequestExtraDataImpl.
+ webkit_glue::WebURLRequestExtraDataImpl* old_extra_data =
+ static_cast<webkit_glue::WebURLRequestExtraDataImpl*>(
+ request.extraData());
+
+ referrer_policy = old_extra_data->referrer_policy();
+ custom_user_agent = old_extra_data->custom_user_agent();
+ }
+
+ bool was_after_preconnect_request = true;
+ // The args after |was_after_preconnect_request| are not used, and set to
+ // correct values at |willSendRequest|.
+ request.setExtraData(new webkit_glue::WebURLRequestExtraDataImpl(
+ referrer_policy, custom_user_agent, was_after_preconnect_request));
+}
+
void RenderFrameImpl::willSendRequest(
WebKit::WebFrame* frame,
unsigned identifier,
@@ -541,11 +565,14 @@ void RenderFrameImpl::willSendRequest(
// agent. This needs to be done here, after WebKit is through with setting the
// user agent on its own.
WebString custom_user_agent;
+ bool was_after_preconnect_request = false;
if (request.extraData()) {
webkit_glue::WebURLRequestExtraDataImpl* old_extra_data =
static_cast<webkit_glue::WebURLRequestExtraDataImpl*>(
request.extraData());
custom_user_agent = old_extra_data->custom_user_agent();
+ was_after_preconnect_request =
+ old_extra_data->was_after_preconnect_request();
if (!custom_user_agent.isNull()) {
if (custom_user_agent.isEmpty())
@@ -558,6 +585,7 @@ void RenderFrameImpl::willSendRequest(
request.setExtraData(
new RequestExtraData(referrer_policy,
custom_user_agent,
+ was_after_preconnect_request,
(frame == top_frame),
frame->identifier(),
frame->parent() == top_frame,
@@ -569,11 +597,15 @@ void RenderFrameImpl::willSendRequest(
DocumentState* top_document_state =
DocumentState::FromDataSource(top_data_source);
- // TODO(gavinp): separate out prefetching and prerender field trials
- // if the rel=prerender rel type is sticking around.
- if (top_document_state &&
- request.targetType() == WebURLRequest::TargetIsPrefetch)
- top_document_state->set_was_prefetcher(true);
+ if (top_document_state) {
+ // TODO(gavinp): separate out prefetching and prerender field trials
+ // if the rel=prerender rel type is sticking around.
+ if (request.targetType() == WebURLRequest::TargetIsPrefetch)
+ top_document_state->set_was_prefetcher(true);
+
+ if (was_after_preconnect_request)
+ top_document_state->set_was_after_preconnect_request(true);
+ }
// This is an instance where we embed a copy of the routing id
// into the data portion of the message. This can cause problems if we
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index a3daa03..3bed97d 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -112,6 +112,8 @@ class CONTENT_EXPORT RenderFrameImpl
virtual void didNavigateWithinPage(WebKit::WebFrame* frame,
bool is_new_navigation);
virtual void didUpdateCurrentHistoryItem(WebKit::WebFrame* frame);
+ virtual void willRequestAfterPreconnect(WebKit::WebFrame* frame,
+ WebKit::WebURLRequest& request);
virtual void willSendRequest(
WebKit::WebFrame* frame,
unsigned identifier,