blob: 9485e0b2ff74784bc1bbd2a8664a721bb3398575 [file] [log] [blame]
[email protected]0ac83682010-01-22 17:46:271// Copyright (c) 2010 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_IO_THREAD_H_
6#define CHROME_BROWSER_IO_THREAD_H_
[email protected]32b76ef2010-07-26 23:08:247#pragma once
[email protected]0ac83682010-01-22 17:46:278
9#include "base/basictypes.h"
[email protected]d13c3272010-02-04 00:24:5110#include "base/ref_counted.h"
11#include "base/scoped_ptr.h"
[email protected]0ac83682010-01-22 17:46:2712#include "chrome/browser/browser_process_sub_thread.h"
[email protected]ac039522010-06-15 16:39:4413#include "chrome/browser/net/chrome_network_delegate.h"
[email protected]3530cd92010-06-27 06:22:0114#include "chrome/common/net/predictor_common.h"
[email protected]c5629c32010-06-23 01:22:4315#include "chrome/browser/net/connect_interceptor.h"
[email protected]0ac83682010-01-22 17:46:2716#include "net/base/host_resolver.h"
[email protected]58bc7042010-07-07 18:04:1417#include "net/base/network_change_notifier.h"
[email protected]0ac83682010-01-22 17:46:2718
[email protected]9e743cd2010-03-16 07:03:5319class ChromeNetLog;
[email protected]0ac83682010-01-22 17:46:2720class ListValue;
21
22namespace chrome_browser_net {
[email protected]74be069e82010-06-25 00:12:4923class Predictor;
[email protected]0ac83682010-01-22 17:46:2724} // namespace chrome_browser_net
25
[email protected]d13c3272010-02-04 00:24:5126namespace net {
[email protected]2db580532010-10-08 14:32:3727class DnsRRResolver;
[email protected]fa55e192010-02-15 14:25:5028class HttpAuthHandlerFactory;
[email protected]b4955e7d2010-04-16 20:22:3029class URLSecurityManager;
[email protected]d13c3272010-02-04 00:24:5130} // namespace net
31
[email protected]0ac83682010-01-22 17:46:2732class IOThread : public BrowserProcessSubThread {
33 public:
[email protected]d13c3272010-02-04 00:24:5134 struct Globals {
[email protected]9e743cd2010-03-16 07:03:5335 scoped_ptr<ChromeNetLog> net_log;
[email protected]73c45322010-10-01 23:57:5436 scoped_ptr<net::HostResolver> host_resolver;
[email protected]2db580532010-10-08 14:32:3737 scoped_ptr<net::DnsRRResolver> dnsrr_resolver;
[email protected]fa55e192010-02-15 14:25:5038 scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory;
[email protected]b4955e7d2010-04-16 20:22:3039 scoped_ptr<net::URLSecurityManager> url_security_manager;
[email protected]ac039522010-06-15 16:39:4440 ChromeNetworkDelegate network_delegate;
[email protected]d13c3272010-02-04 00:24:5141 };
42
[email protected]0ac83682010-01-22 17:46:2743 IOThread();
44
45 virtual ~IOThread();
46
[email protected]d13c3272010-02-04 00:24:5147 // Can only be called on the IO thread.
48 Globals* globals();
[email protected]0ac83682010-01-22 17:46:2749
[email protected]c5629c32010-06-23 01:22:4350 // Initializes the network predictor, which induces DNS pre-resolution and/or
51 // TCP/IP preconnections. |prefetching_enabled| indicates whether or not DNS
52 // prefetching should be enabled, and |preconnect_enabled| controls whether
53 // TCP/IP preconnection is enabled. This should be called by the UI thread.
54 // It will post a task to the IO thread to perform the actual initialization.
[email protected]74be069e82010-06-25 00:12:4955 void InitNetworkPredictor(bool prefetching_enabled,
56 base::TimeDelta max_dns_queue_delay,
57 size_t max_concurrent,
58 const chrome_common_net::UrlList& startup_urls,
59 ListValue* referral_list,
60 bool preconnect_enabled);
[email protected]0ac83682010-01-22 17:46:2761
62 // Handles changing to On The Record mode. Posts a task for this onto the
63 // IOThread's message loop.
64 void ChangedToOnTheRecord();
65
66 protected:
67 virtual void Init();
[email protected]2a92cd92010-04-27 00:01:4168 virtual void CleanUp();
[email protected]9aa33e82010-04-15 00:15:3969 virtual void CleanUpAfterMessageLoopDestruction();
[email protected]0ac83682010-01-22 17:46:2770
71 private:
[email protected]65d34382010-07-01 18:12:2672 net::HttpAuthHandlerFactory* CreateDefaultAuthHandlerFactory(
73 net::HostResolver* resolver);
[email protected]eb3cac72010-02-26 21:07:4574
[email protected]74be069e82010-06-25 00:12:4975 void InitNetworkPredictorOnIOThread(
[email protected]0ac83682010-01-22 17:46:2776 bool prefetching_enabled,
[email protected]74be069e82010-06-25 00:12:4977 base::TimeDelta max_dns_queue_delay,
[email protected]0ac83682010-01-22 17:46:2778 size_t max_concurrent,
[email protected]c5629c32010-06-23 01:22:4379 const chrome_common_net::UrlList& startup_urls,
80
[email protected]760d970a2010-05-18 00:39:1881 ListValue* referral_list,
82 bool preconnect_enabled);
[email protected]0ac83682010-01-22 17:46:2783
84 void ChangedToOnTheRecordOnIOThread();
85
86 // These member variables are basically global, but their lifetimes are tied
87 // to the IOThread. IOThread owns them all, despite not using scoped_ptr.
88 // This is because the destructor of IOThread runs on the wrong thread. All
[email protected]2a92cd92010-04-27 00:01:4189 // member variables should be deleted in CleanUp(), except ChromeNetLog
90 // which is deleted later in CleanUpAfterMessageLoopDestruction().
[email protected]0ac83682010-01-22 17:46:2791
[email protected]d13c3272010-02-04 00:24:5192 // These member variables are initialized in Init() and do not change for the
93 // lifetime of the IO thread.
94
95 Globals* globals_;
96
[email protected]2a92cd92010-04-27 00:01:4197 // This variable is only meaningful during shutdown. It is used to defer
98 // deletion of the NetLog to CleanUpAfterMessageLoopDestruction() even
99 // though |globals_| is reset by CleanUp().
100 scoped_ptr<ChromeNetLog> deferred_net_log_to_delete_;
101
[email protected]58bc7042010-07-07 18:04:14102 // Observer that logs network changes to the ChromeNetLog.
103 scoped_ptr<net::NetworkChangeNotifier::Observer> network_change_observer_;
104
[email protected]d13c3272010-02-04 00:24:51105 // These member variables are initialized by a task posted to the IO thread,
106 // which gets posted by calling certain member functions of IOThread.
[email protected]0ac83682010-01-22 17:46:27107
[email protected]c5629c32010-06-23 01:22:43108 // Note: we user explicit pointers rather than smart pointers to be more
109 // explicit about destruction order, and ensure that there is no chance that
110 // these observers would be used accidentally after we have begun to tear
111 // down.
112 chrome_browser_net::ConnectInterceptor* speculative_interceptor_;
[email protected]74be069e82010-06-25 00:12:49113 chrome_browser_net::Predictor* predictor_;
[email protected]0ac83682010-01-22 17:46:27114
115 DISALLOW_COPY_AND_ASSIGN(IOThread);
116};
117
[email protected]fa55e192010-02-15 14:25:50118#endif // CHROME_BROWSER_IO_THREAD_H_