summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/connect_interceptor.cc
blob: d96a070dd5a2c392707003264198455157c0ace0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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).
    LearnFromNavigation(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).
  PredictFrameSubresources(request->url().GetWithEmptyPath());
  return NULL;
}

}  // namespace chrome_browser_net