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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
// 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 <stdint.h>
#include <string>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/files/file_path.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/values.h"
#include "net/base/network_delegate_impl.h"
#if !defined(OS_IOS)
#include "components/data_use_measurement/content/data_use_measurement.h"
#endif
class ChromeExtensionsNetworkDelegate;
class PrefService;
template<class T> class PrefMember;
typedef PrefMember<bool> BooleanPrefMember;
namespace base {
class Value;
}
namespace chrome_browser_net {
class ConnectInterceptor;
class Predictor;
}
namespace content_settings {
class CookieSettings;
}
namespace data_usage {
class DataUseAggregator;
}
namespace domain_reliability {
class DomainReliabilityMonitor;
}
namespace extensions {
class EventRouterForwarder;
class InfoMap;
}
namespace net {
class URLRequest;
}
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::NetworkDelegateImpl {
public:
// |enable_referrers| (and all of the other optional PrefMembers) should be
// initialized on the UI thread (see below) beforehand. This object's owner is
// responsible for cleaning them up at shutdown.
ChromeNetworkDelegate(extensions::EventRouterForwarder* event_router,
BooleanPrefMember* enable_referrers);
~ChromeNetworkDelegate() override;
// Pass through to ChromeExtensionsNetworkDelegate::set_extension_info_map().
void set_extension_info_map(extensions::InfoMap* extension_info_map);
#if defined(ENABLE_CONFIGURATION_POLICY)
void set_url_blacklist_manager(
const policy::URLBlacklistManager* url_blacklist_manager) {
url_blacklist_manager_ = url_blacklist_manager;
}
#endif
// If |profile| is NULL or not set, events will be broadcast to all profiles,
// otherwise they will only be sent to the specified profile.
// Also pass through to ChromeExtensionsNetworkDelegate::set_profile().
void set_profile(void* profile);
// |profile_path| is used to locate the "Downloads" folder on Chrome OS. If it
// is set, the location of the Downloads folder for the profile is added to
// the whitelist for accesses via file: scheme.
void set_profile_path(const base::FilePath& profile_path) {
profile_path_ = profile_path;
}
// If |cookie_settings| is NULL or not set, all cookies are enabled,
// otherwise the settings are enforced on all observed network requests.
// Not inlined because we assign a scoped_refptr, which requires us to include
// the header file. Here we just forward-declare it.
void set_cookie_settings(content_settings::CookieSettings* cookie_settings);
// Causes requested URLs to be fed to |predictor| via ConnectInterceptor.
void set_predictor(chrome_browser_net::Predictor* predictor);
void set_enable_do_not_track(BooleanPrefMember* enable_do_not_track) {
enable_do_not_track_ = enable_do_not_track;
}
void set_force_google_safe_search(
BooleanPrefMember* force_google_safe_search) {
force_google_safe_search_ = force_google_safe_search;
}
void set_force_youtube_safety_mode(
BooleanPrefMember* force_youtube_safety_mode) {
force_youtube_safety_mode_ = force_youtube_safety_mode;
}
void set_domain_reliability_monitor(
domain_reliability::DomainReliabilityMonitor* monitor) {
domain_reliability_monitor_ = monitor;
}
void set_data_use_aggregator(
data_usage::DataUseAggregator* data_use_aggregator,
bool is_data_usage_off_the_record);
// Binds the pref members to |pref_service| and moves them to the IO thread.
// |enable_referrers| cannot be NULL, the others can.
// This method should be called on the UI thread.
static void InitializePrefsOnUIThread(
BooleanPrefMember* enable_referrers,
BooleanPrefMember* enable_do_not_track,
BooleanPrefMember* force_google_safe_search,
BooleanPrefMember* force_youtube_safety_mode,
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.
int OnBeforeURLRequest(net::URLRequest* request,
const net::CompletionCallback& callback,
GURL* new_url) override;
int OnBeforeSendHeaders(net::URLRequest* request,
const net::CompletionCallback& callback,
net::HttpRequestHeaders* headers) override;
void OnSendHeaders(net::URLRequest* request,
const net::HttpRequestHeaders& headers) override;
int OnHeadersReceived(
net::URLRequest* request,
const net::CompletionCallback& callback,
const net::HttpResponseHeaders* original_response_headers,
scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
GURL* allowed_unsafe_redirect_url) override;
void OnBeforeRedirect(net::URLRequest* request,
const GURL& new_location) override;
void OnResponseStarted(net::URLRequest* request) override;
void OnNetworkBytesReceived(const net::URLRequest& request,
int64_t bytes_received) override;
void OnNetworkBytesSent(const net::URLRequest& request,
int64_t bytes_sent) override;
void OnCompleted(net::URLRequest* request, bool started) override;
void OnURLRequestDestroyed(net::URLRequest* request) override;
void OnURLRequestJobOrphaned(net::URLRequest* request) override;
void OnPACScriptError(int line_number, const base::string16& error) override;
net::NetworkDelegate::AuthRequiredResponse OnAuthRequired(
net::URLRequest* request,
const net::AuthChallengeInfo& auth_info,
const AuthCallback& callback,
net::AuthCredentials* credentials) override;
bool OnCanGetCookies(const net::URLRequest& request,
const net::CookieList& cookie_list) override;
bool OnCanSetCookie(const net::URLRequest& request,
const std::string& cookie_line,
net::CookieOptions* options) override;
bool OnCanAccessFile(const net::URLRequest& request,
const base::FilePath& path) const override;
bool OnCanEnablePrivacyMode(
const GURL& url,
const GURL& first_party_for_cookies) const override;
bool OnAreExperimentalCookieFeaturesEnabled() const override;
bool OnCancelURLRequestWithPolicyViolatingReferrerHeader(
const net::URLRequest& request,
const GURL& target_url,
const GURL& referrer_url) const override;
scoped_ptr<ChromeExtensionsNetworkDelegate> extensions_delegate_;
void* profile_;
base::FilePath profile_path_;
scoped_refptr<content_settings::CookieSettings> cookie_settings_;
scoped_ptr<chrome_browser_net::ConnectInterceptor> connect_interceptor_;
// Weak, owned by our owner.
BooleanPrefMember* enable_referrers_;
BooleanPrefMember* enable_do_not_track_;
BooleanPrefMember* force_google_safe_search_;
BooleanPrefMember* force_youtube_safety_mode_;
// Weak, owned by our owner.
#if defined(ENABLE_CONFIGURATION_POLICY)
const policy::URLBlacklistManager* url_blacklist_manager_;
#endif
domain_reliability::DomainReliabilityMonitor* domain_reliability_monitor_;
// When true, allow access to all file:// URLs.
static bool g_allow_file_access_;
// Component to measure data use.
#if !defined(OS_IOS)
data_use_measurement::DataUseMeasurement data_use_measurement_;
#endif
bool experimental_web_platform_features_enabled_;
// Aggregates and reports network usage.
data_usage::DataUseAggregator* data_use_aggregator_;
// Controls whether network usage is reported as being off the record.
bool is_data_usage_off_the_record_;
DISALLOW_COPY_AND_ASSIGN(ChromeNetworkDelegate);
};
#endif // CHROME_BROWSER_NET_CHROME_NETWORK_DELEGATE_H_
|