1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_NET_CONNECT_INTERCEPTOR_H_
6#define CHROME_BROWSER_NET_CONNECT_INTERCEPTOR_H_
7
8#include "base/gtest_prod_util.h"
9#include "base/memory/scoped_ptr.h"
10#include "chrome/browser/net/timed_cache.h"
11
12class GURL;
13
14namespace net {
15class URLRequest;
16}
17
18namespace chrome_browser_net {
19
20class Predictor;
21
22//------------------------------------------------------------------------------
23// An interceptor to monitor URLRequests so that we can do speculative DNS
24// resolution and/or speculative TCP preconnections.
25class ConnectInterceptor {
26 public:
27  // Construction includes registration as an URL.
28  explicit ConnectInterceptor(Predictor* predictor);
29  // Destruction includes unregistering.
30  virtual ~ConnectInterceptor();
31
32  // Learn about referrers, and optionally preconnect based on history.
33  void WitnessURLRequest(net::URLRequest* request);
34
35 private:
36  // Provide access to local class TimedCache for testing.
37  FRIEND_TEST_ALL_PREFIXES(ConnectInterceptorTest, TimedCacheRecall);
38  FRIEND_TEST_ALL_PREFIXES(ConnectInterceptorTest, TimedCacheEviction);
39
40  TimedCache timed_cache_;
41  Predictor* const predictor_;
42
43  DISALLOW_COPY_AND_ASSIGN(ConnectInterceptor);
44};
45
46}  // namespace chrome_browser_net
47
48#endif  // CHROME_BROWSER_NET_CONNECT_INTERCEPTOR_H_
49