diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-23 01:22:43 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-23 01:22:43 +0000 |
commit | c5629c3842ca9fab0a6bb71a478df3fc528b8837 (patch) | |
tree | 8141f7d0b43e0cba093f049b688a336693abab1b /chrome/browser/net/connect_interceptor.cc | |
parent | 3f9345838d9af871413f7350ca587b0152299e02 (diff) | |
download | chromium_src-c5629c3842ca9fab0a6bb71a478df3fc528b8837.zip chromium_src-c5629c3842ca9fab0a6bb71a478df3fc528b8837.tar.gz chromium_src-c5629c3842ca9fab0a6bb71a478df3fc528b8837.tar.bz2 |
Do speculative preconnection based on network traffic (not just DNS)
This rev also handles the triple of scheme/host/port for recording
both referrers and speculative connections, so that we
can soon support SSL warming as well as "mere" TCP/IP
preconnection.
r=mbelshe
Review URL: http://codereview.chromium.org/2563004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50563 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net/connect_interceptor.cc')
-rw-r--r-- | chrome/browser/net/connect_interceptor.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/chrome/browser/net/connect_interceptor.cc b/chrome/browser/net/connect_interceptor.cc new file mode 100644 index 0000000..ab45ddb --- /dev/null +++ b/chrome/browser/net/connect_interceptor.cc @@ -0,0 +1,41 @@ +// Copyright (c) 2010 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/browser/net/connect_interceptor.h" + +#include "chrome/browser/net/dns_global.h" + +namespace chrome_browser_net { + +ConnectInterceptor::ConnectInterceptor() { + URLRequest::RegisterRequestInterceptor(this); +} + +ConnectInterceptor::~ConnectInterceptor() { + URLRequest::UnregisterRequestInterceptor(this); +} + +URLRequestJob* ConnectInterceptor::MaybeIntercept(URLRequest* request) { + if (!request->referrer().empty()) { + // Learn about our referring URL, for use in the future. + GURL referring_url(GURL(request->referrer()).GetWithEmptyPath()); + // TODO(jar): Only call if we think this was part of a frame load, and not a + // link navigation. For now, we'll "learn" that to preconnect when a user + // actually does a click... which will probably waste space in our referrers + // table (since it probably won't be that deterministic). + NonlinkNavigation(referring_url, request->url().GetWithEmptyPath()); + } + // Now we use previous learning and setup for our subresources. + if (request->was_fetched_via_proxy()) + return NULL; + // TODO(jar): Only call if we believe this is a frame, and might have + // subresources. We could "guess" by looking at path extensions (such as + // foo.jpg or goo.gif etc.), but better would be to get this info from webkit + // and have it add the info to the request (we currently only set the + // priority, but we could record whether it was a frame). + NavigatingToFrame(request->url().GetWithEmptyPath()); + return NULL; +} + +} // namespace chrome_browser_net |