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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_NET_CHROME_NETWORK_DELEGATE_H_
#define CHROME_BROWSER_NET_CHROME_NETWORK_DELEGATE_H_
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "net/base/network_delegate.h"
class CookieSettings;
class ExtensionInfoMap;
class PrefService;
template<class T> class PrefMember;
typedef PrefMember<bool> BooleanPrefMember;
namespace chrome_browser_net {
class CacheStats;
}
namespace extensions {
class EventRouterForwarder;
}
namespace policy {
class URLBlacklistManager;
}
// ChromeNetworkDelegate is the central point from within the chrome code to
// add hooks into the network stack.
class ChromeNetworkDelegate : public net::NetworkDelegate {
public:
// If |profile| is NULL, events will be broadcasted to all profiles,
// otherwise they will only be sent to the specified profile.
// |enable_referrers| should be initialized on the UI thread (see below)
// beforehand. This object's owner is responsible for cleaning it up at
// shutdown. If |cookie_settings| is NULL, all cookies are enabled,
// otherwise, the settings are enforced on all observed network requests.
ChromeNetworkDelegate(
extensions::EventRouterForwarder* event_router,
ExtensionInfoMap* extension_info_map,
const policy::URLBlacklistManager* url_blacklist_manager,
void* profile,
CookieSettings* cookie_settings,
BooleanPrefMember* enable_referrers,
chrome_browser_net::CacheStats* cache_stats);
virtual ~ChromeNetworkDelegate();
// Causes |OnCanThrottleRequest| to never return true.
void NeverThrottleRequests();
// Binds |enable_referrers| to |pref_service| and moves it to the IO thread.
// This method should be called on the UI thread.
static void InitializeReferrersEnabled(BooleanPrefMember* enable_referrers,
PrefService* pref_service);
// When called, all file:// URLs will now be accessible. If this is not
// called, then some platforms restrict access to file:// paths.
static void AllowAccessToAllFiles();
private:
// NetworkDelegate implementation.
virtual int OnBeforeURLRequest(net::URLRequest* request,
const net::CompletionCallback& callback,
GURL* new_url) OVERRIDE;
virtual int OnBeforeSendHeaders(net::URLRequest* request,
const net::CompletionCallback& callback,
net::HttpRequestHeaders* headers) OVERRIDE;
virtual void OnSendHeaders(net::URLRequest* request,
const net::HttpRequestHeaders& headers) OVERRIDE;
virtual int OnHeadersReceived(
net::URLRequest* request,
const net::CompletionCallback& callback,
net::HttpResponseHeaders* original_response_headers,
scoped_refptr<net::HttpResponseHeaders>* override_response_headers)
OVERRIDE;
virtual void OnBeforeRedirect(net::URLRequest* request,
const GURL& new_location) OVERRIDE;
virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
virtual void OnRawBytesRead(const net::URLRequest& request,
int bytes_read) OVERRIDE;
virtual void OnCompleted(net::URLRequest* request, bool started) OVERRIDE;
virtual void OnURLRequestDestroyed(net::URLRequest* request) OVERRIDE;
virtual void OnPACScriptError(int line_number,
const string16& error) OVERRIDE;
virtual net::NetworkDelegate::AuthRequiredResponse OnAuthRequired(
net::URLRequest* request,
const net::AuthChallengeInfo& auth_info,
const AuthCallback& callback,
net::AuthCredentials* credentials) OVERRIDE;
virtual bool OnCanGetCookies(const net::URLRequest& request,
const net::CookieList& cookie_list) OVERRIDE;
virtual bool OnCanSetCookie(const net::URLRequest& request,
const std::string& cookie_line,
net::CookieOptions* options) OVERRIDE;
virtual bool OnCanAccessFile(const net::URLRequest& request,
const FilePath& path) const OVERRIDE;
virtual bool OnCanThrottleRequest(
const net::URLRequest& request) const OVERRIDE;
virtual int OnBeforeSocketStreamConnect(
net::SocketStream* stream,
const net::CompletionCallback& callback) OVERRIDE;
virtual void OnCacheWaitStateChange(const net::URLRequest& request,
CacheWaitState state) OVERRIDE;
scoped_refptr<extensions::EventRouterForwarder> event_router_;
void* profile_;
scoped_refptr<CookieSettings> cookie_settings_;
scoped_refptr<ExtensionInfoMap> extension_info_map_;
// Weak, owned by our owner.
BooleanPrefMember* enable_referrers_;
// True if OnCanThrottleRequest should always return false.
bool never_throttle_requests_;
// Weak, owned by our owner.
const policy::URLBlacklistManager* url_blacklist_manager_;
// When true, allow access to all file:// URLs.
static bool g_allow_file_access_;
// Pointer to IOThread global, should outlive ChromeNetworkDelegate.
chrome_browser_net::CacheStats* cache_stats_;
DISALLOW_COPY_AND_ASSIGN(ChromeNetworkDelegate);
};
#endif // CHROME_BROWSER_NET_CHROME_NETWORK_DELEGATE_H_
|