Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Side by Side Diff: chrome/browser/net/chrome_network_delegate.cc

Issue 11186002: Add a SafeSearch preference, policy and implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add a SafeSearch preference, policy and implementation. Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/chrome_network_delegate.h" 5 #include "chrome/browser/net/chrome_network_delegate.h"
6 6
7 #include <string.h> // For strlen
Joao da Silva 2012/10/16 16:26:46 nit: newline
Sergiu 2012/10/17 14:48:58 Done.
7 #include "base/logging.h" 8 #include "base/logging.h"
8 #include "base/base_paths.h" 9 #include "base/base_paths.h"
9 #include "base/path_service.h" 10 #include "base/path_service.h"
10 #include "chrome/browser/api/prefs/pref_member.h" 11 #include "chrome/browser/api/prefs/pref_member.h"
11 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/content_settings/cookie_settings.h" 13 #include "chrome/browser/content_settings/cookie_settings.h"
13 #include "chrome/browser/content_settings/tab_specific_content_settings.h" 14 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
14 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" 15 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
15 #include "chrome/browser/extensions/api/proxy/proxy_api.h" 16 #include "chrome/browser/extensions/api/proxy/proxy_api.h"
16 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 17 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
17 #include "chrome/browser/extensions/event_router_forwarder.h" 18 #include "chrome/browser/extensions/event_router_forwarder.h"
18 #include "chrome/browser/extensions/extension_info_map.h" 19 #include "chrome/browser/extensions/extension_info_map.h"
19 #include "chrome/browser/extensions/extension_process_manager.h" 20 #include "chrome/browser/extensions/extension_process_manager.h"
21 #include "chrome/browser/google/google_util.h"
20 #include "chrome/browser/net/load_time_stats.h" 22 #include "chrome/browser/net/load_time_stats.h"
21 #include "chrome/browser/performance_monitor/performance_monitor.h" 23 #include "chrome/browser/performance_monitor/performance_monitor.h"
22 #include "chrome/browser/prefs/pref_service.h" 24 #include "chrome/browser/prefs/pref_service.h"
23 #include "chrome/browser/profiles/profile_manager.h" 25 #include "chrome/browser/profiles/profile_manager.h"
24 #include "chrome/browser/task_manager/task_manager.h" 26 #include "chrome/browser/task_manager/task_manager.h"
25 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
26 #include "chrome/common/url_constants.h" 28 #include "chrome/common/url_constants.h"
27 #include "content/public/browser/browser_thread.h" 29 #include "content/public/browser/browser_thread.h"
28 #include "content/public/browser/render_view_host.h" 30 #include "content/public/browser/render_view_host.h"
29 #include "content/public/browser/resource_request_info.h" 31 #include "content/public/browser/resource_request_info.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 141
140 ChromeNetworkDelegate::ChromeNetworkDelegate( 142 ChromeNetworkDelegate::ChromeNetworkDelegate(
141 extensions::EventRouterForwarder* event_router, 143 extensions::EventRouterForwarder* event_router,
142 ExtensionInfoMap* extension_info_map, 144 ExtensionInfoMap* extension_info_map,
143 const policy::URLBlacklistManager* url_blacklist_manager, 145 const policy::URLBlacklistManager* url_blacklist_manager,
144 const ManagedModeURLFilter* managed_mode_url_filter, 146 const ManagedModeURLFilter* managed_mode_url_filter,
145 void* profile, 147 void* profile,
146 CookieSettings* cookie_settings, 148 CookieSettings* cookie_settings,
147 BooleanPrefMember* enable_referrers, 149 BooleanPrefMember* enable_referrers,
148 BooleanPrefMember* enable_do_not_track, 150 BooleanPrefMember* enable_do_not_track,
151 BooleanPrefMember* enable_safesearch,
149 chrome_browser_net::LoadTimeStats* load_time_stats) 152 chrome_browser_net::LoadTimeStats* load_time_stats)
150 : event_router_(event_router), 153 : event_router_(event_router),
151 profile_(profile), 154 profile_(profile),
152 cookie_settings_(cookie_settings), 155 cookie_settings_(cookie_settings),
153 extension_info_map_(extension_info_map), 156 extension_info_map_(extension_info_map),
154 enable_referrers_(enable_referrers), 157 enable_referrers_(enable_referrers),
155 enable_do_not_track_(enable_do_not_track), 158 enable_do_not_track_(enable_do_not_track),
159 enable_safesearch_(enable_safesearch),
156 url_blacklist_manager_(url_blacklist_manager), 160 url_blacklist_manager_(url_blacklist_manager),
157 managed_mode_url_filter_(managed_mode_url_filter), 161 managed_mode_url_filter_(managed_mode_url_filter),
158 load_time_stats_(load_time_stats) { 162 load_time_stats_(load_time_stats) {
159 DCHECK(event_router); 163 DCHECK(event_router);
160 DCHECK(enable_referrers); 164 DCHECK(enable_referrers);
161 DCHECK(!profile || cookie_settings); 165 DCHECK(!profile || cookie_settings);
162 } 166 }
163 167
164 ChromeNetworkDelegate::~ChromeNetworkDelegate() {} 168 ChromeNetworkDelegate::~ChromeNetworkDelegate() {}
165 169
166 // static 170 // static
167 void ChromeNetworkDelegate::NeverThrottleRequests() { 171 void ChromeNetworkDelegate::NeverThrottleRequests() {
168 g_never_throttle_requests_ = true; 172 g_never_throttle_requests_ = true;
169 } 173 }
170 174
171 // static 175 // static
172 void ChromeNetworkDelegate::InitializePrefsOnUIThread( 176 void ChromeNetworkDelegate::InitializePrefsOnUIThread(
173 BooleanPrefMember* enable_referrers, 177 BooleanPrefMember* enable_referrers,
174 BooleanPrefMember* enable_do_not_track, 178 BooleanPrefMember* enable_do_not_track,
179 BooleanPrefMember* enable_safesearch,
175 PrefService* pref_service) { 180 PrefService* pref_service) {
176 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 181 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
177 enable_referrers->Init(prefs::kEnableReferrers, pref_service, NULL); 182 enable_referrers->Init(prefs::kEnableReferrers, pref_service, NULL);
178 enable_referrers->MoveToThread(BrowserThread::IO); 183 enable_referrers->MoveToThread(BrowserThread::IO);
179 if (enable_do_not_track) { 184 if (enable_do_not_track) {
180 enable_do_not_track->Init(prefs::kEnableDoNotTrack, pref_service, NULL); 185 enable_do_not_track->Init(prefs::kEnableDoNotTrack, pref_service, NULL);
181 enable_do_not_track->MoveToThread(BrowserThread::IO); 186 enable_do_not_track->MoveToThread(BrowserThread::IO);
182 } 187 }
188 if (enable_safesearch) {
189 enable_safesearch->Init(prefs::kSafeSearchEnabled, pref_service, NULL);
190 enable_safesearch->MoveToThread(BrowserThread::IO);
191 }
183 } 192 }
184 193
185 // static 194 // static
186 void ChromeNetworkDelegate::AllowAccessToAllFiles() { 195 void ChromeNetworkDelegate::AllowAccessToAllFiles() {
187 g_allow_file_access_ = true; 196 g_allow_file_access_ = true;
188 } 197 }
189 198
190 int ChromeNetworkDelegate::OnBeforeURLRequest( 199 int ChromeNetworkDelegate::OnBeforeURLRequest(
191 net::URLRequest* request, 200 net::URLRequest* request,
192 const net::CompletionCallback& callback, 201 const net::CompletionCallback& callback,
(...skipping 20 matching lines...) Expand all
213 return net::ERR_NETWORK_ACCESS_DENIED; 222 return net::ERR_NETWORK_ACCESS_DENIED;
214 } 223 }
215 #endif 224 #endif
216 225
217 ForwardRequestStatus(REQUEST_STARTED, request, profile_); 226 ForwardRequestStatus(REQUEST_STARTED, request, profile_);
218 227
219 if (!enable_referrers_->GetValue()) 228 if (!enable_referrers_->GetValue())
220 request->set_referrer(std::string()); 229 request->set_referrer(std::string());
221 if (enable_do_not_track_ && enable_do_not_track_->GetValue()) 230 if (enable_do_not_track_ && enable_do_not_track_->GetValue())
222 request->SetExtraRequestHeaderByName(kDNTHeader, "1", true /* override */); 231 request->SetExtraRequestHeaderByName(kDNTHeader, "1", true /* override */);
232
233 // Enforce SafeSearch.
234 if (enable_safesearch_ && enable_safesearch_->GetValue()) {
battre 2012/10/16 16:05:49 how about moving lines 235-264 into a function?
Bernhard Bauer 2012/10/16 16:37:33 Yesplz. That would make unit-testing it a lot easi
Sergiu 2012/10/17 14:48:58 Done.
Sergiu 2012/10/17 14:48:58 Done.
235 const bool is_search_url = google_util::IsGoogleSearchUrl(
236 request->url().spec());
237 const bool is_homepage_url = google_util::IsGoogleHomePageUrl(
238 request->url().spec());
Bernhard Bauer 2012/10/16 16:37:33 Can we add a sanity-DCHECK that |is_search_url| an
Sergiu 2012/10/17 14:48:58 Well, they're not completely, that's the problem.
239 if (mod_by_managed_mode_.find(request) == mod_by_managed_mode_.end() &&
Bernhard Bauer 2012/10/16 16:37:33 Can OnBeforeURLRequest() be called multiple times
Sergiu 2012/10/17 14:48:58 No longer relevant since we changed the way we do
240 (is_search_url || is_homepage_url)) {
241 std::string query = request->url().query();
242 std::string append_param;
243
244 if (is_homepage_url && query.length() == 0) {
Bernhard Bauer 2012/10/16 16:37:33 `query.length() == 0` can be written a bit shorter
Sergiu 2012/10/17 14:48:58 Done.
245 append_param = chrome::kSSearchParamsSingle;
246 } else {
247 append_param = chrome::kSSearchParamsMultiple;
248 }
249 // Make sure that the last our parameters are either the only ones
battre 2012/10/16 16:05:49 nit: grammar in sentence above "the last our"
Sergiu 2012/10/17 14:48:58 Done.
250 // or have a & before them so that we don't accept &bogussafe=active.
251 if ((query.rfind(chrome::kSSearchParamsSingle) != std::string::npos &&
battre 2012/10/16 16:05:49 KSSearch --> this is again an abbreviation that is
Sergiu 2012/10/17 14:48:58 Done.
252 query.length() == strlen(chrome::kSSearchParamsSingle)) ||
battre 2012/10/16 16:05:49 if query contains kSSearchParamsSingle and has the
Sergiu 2012/10/17 14:48:58 Done.
253 query.rfind(chrome::kSSearchParamsMultiple) != std::string::npos)
254 return net::OK;
Joao da Silva 2012/10/16 16:26:46 |request| is not added to mod_by_managed_mode_ in
Bernhard Bauer 2012/10/16 16:37:33 Nit: newline
Sergiu 2012/10/17 14:48:58 Done.
Sergiu 2012/10/17 14:48:58 Changed the way this works, see new patch.
255 // Add this parameter at the end of this query since it will override the
256 // other parameters.
257 query.append(append_param);
258
259 GURL::Replacements replacements;
260 replacements.SetQueryStr(query);
261 *new_url = request->url().ReplaceComponents(replacements);
262 // Add it to the set so that we know that it can't be altered by an
263 // extension.
264 mod_by_managed_mode_.insert(request);
Joao da Silva 2012/10/16 16:26:46 Suggestion: instead of using this std::set, why no
265
266 return net::OK;
267 }
268 }
269
223 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( 270 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest(
224 profile_, extension_info_map_.get(), request, callback, new_url); 271 profile_, extension_info_map_.get(), request, callback, new_url);
225 } 272 }
226 273
227 int ChromeNetworkDelegate::OnBeforeSendHeaders( 274 int ChromeNetworkDelegate::OnBeforeSendHeaders(
228 net::URLRequest* request, 275 net::URLRequest* request,
229 const net::CompletionCallback& callback, 276 const net::CompletionCallback& callback,
230 net::HttpRequestHeaders* headers) { 277 net::HttpRequestHeaders* headers) {
231 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders( 278 return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeSendHeaders(
232 profile_, extension_info_map_.get(), request, callback, headers); 279 profile_, extension_info_map_.get(), request, callback, headers);
(...skipping 11 matching lines...) Expand all
244 const net::CompletionCallback& callback, 291 const net::CompletionCallback& callback,
245 net::HttpResponseHeaders* original_response_headers, 292 net::HttpResponseHeaders* original_response_headers,
246 scoped_refptr<net::HttpResponseHeaders>* override_response_headers) { 293 scoped_refptr<net::HttpResponseHeaders>* override_response_headers) {
247 return ExtensionWebRequestEventRouter::GetInstance()->OnHeadersReceived( 294 return ExtensionWebRequestEventRouter::GetInstance()->OnHeadersReceived(
248 profile_, extension_info_map_.get(), request, callback, 295 profile_, extension_info_map_.get(), request, callback,
249 original_response_headers, override_response_headers); 296 original_response_headers, override_response_headers);
250 } 297 }
251 298
252 void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, 299 void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request,
253 const GURL& new_location) { 300 const GURL& new_location) {
254 ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect( 301 // If the request has been modified by the managed mode then do not route
Pam (message me for reviews) 2012/10/17 11:37:37 "...by policy" rather than "by the managed mode",
Sergiu 2012/10/17 14:48:58 No longer applicable (done).
255 profile_, extension_info_map_.get(), request, new_location); 302 // it through the extension so that it doesn't get overwritten.
303 if (mod_by_managed_mode_.find(request) != mod_by_managed_mode_.end()) {
Joao da Silva 2012/10/16 16:26:46 I'm not sure about this, because the extension wil
Bernhard Bauer 2012/10/16 16:37:33 +1. Can't we just apply the filter after any exten
Pam (message me for reviews) 2012/10/17 11:37:37 Agreed, it's odd to remove these requests from wha
Sergiu 2012/10/17 14:48:58 Please review the new way in which we are doing th
304 mod_by_managed_mode_.erase(request);
battre 2012/10/16 16:05:49 I would consider adding a return statement here an
Sergiu 2012/10/17 14:48:58 Done.
305 } else {
306 ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect(
307 profile_, extension_info_map_.get(), request, new_location);
308 }
256 } 309 }
257 310
258 311
259 void ChromeNetworkDelegate::OnResponseStarted(net::URLRequest* request) { 312 void ChromeNetworkDelegate::OnResponseStarted(net::URLRequest* request) {
260 ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted( 313 ExtensionWebRequestEventRouter::GetInstance()->OnResponseStarted(
261 profile_, extension_info_map_.get(), request); 314 profile_, extension_info_map_.get(), request);
262 ForwardProxyErrors(request, event_router_.get(), profile_); 315 ForwardProxyErrors(request, event_router_.get(), profile_);
263 } 316 }
264 317
265 void ChromeNetworkDelegate::OnRawBytesRead(const net::URLRequest& request, 318 void ChromeNetworkDelegate::OnRawBytesRead(const net::URLRequest& request,
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 #endif 502 #endif
450 return net::OK; 503 return net::OK;
451 } 504 }
452 505
453 void ChromeNetworkDelegate::OnRequestWaitStateChange( 506 void ChromeNetworkDelegate::OnRequestWaitStateChange(
454 const net::URLRequest& request, 507 const net::URLRequest& request,
455 RequestWaitState state) { 508 RequestWaitState state) {
456 if (load_time_stats_) 509 if (load_time_stats_)
457 load_time_stats_->OnRequestWaitStateChange(request, state); 510 load_time_stats_->OnRequestWaitStateChange(request, state);
458 } 511 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698