Chromium Code Reviews| Index: chrome/browser/net/chrome_network_delegate.cc |
| diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc |
| index 828fe6665fb9348faaa06f9ad9780ee62a6c5ed2..d9a76e2b129c6050945e3d945d6ba33eb7060fef 100644 |
| --- a/chrome/browser/net/chrome_network_delegate.cc |
| +++ b/chrome/browser/net/chrome_network_delegate.cc |
| @@ -4,6 +4,7 @@ |
| #include "chrome/browser/net/chrome_network_delegate.h" |
| +#include <string.h> // For strlen |
|
Joao da Silva
2012/10/16 16:26:46
nit: newline
Sergiu
2012/10/17 14:48:58
Done.
|
| #include "base/logging.h" |
| #include "base/base_paths.h" |
| #include "base/path_service.h" |
| @@ -17,6 +18,7 @@ |
| #include "chrome/browser/extensions/event_router_forwarder.h" |
| #include "chrome/browser/extensions/extension_info_map.h" |
| #include "chrome/browser/extensions/extension_process_manager.h" |
| +#include "chrome/browser/google/google_util.h" |
| #include "chrome/browser/net/load_time_stats.h" |
| #include "chrome/browser/performance_monitor/performance_monitor.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| @@ -146,6 +148,7 @@ ChromeNetworkDelegate::ChromeNetworkDelegate( |
| CookieSettings* cookie_settings, |
| BooleanPrefMember* enable_referrers, |
| BooleanPrefMember* enable_do_not_track, |
| + BooleanPrefMember* enable_safesearch, |
| chrome_browser_net::LoadTimeStats* load_time_stats) |
| : event_router_(event_router), |
| profile_(profile), |
| @@ -153,6 +156,7 @@ ChromeNetworkDelegate::ChromeNetworkDelegate( |
| extension_info_map_(extension_info_map), |
| enable_referrers_(enable_referrers), |
| enable_do_not_track_(enable_do_not_track), |
| + enable_safesearch_(enable_safesearch), |
| url_blacklist_manager_(url_blacklist_manager), |
| managed_mode_url_filter_(managed_mode_url_filter), |
| load_time_stats_(load_time_stats) { |
| @@ -172,6 +176,7 @@ void ChromeNetworkDelegate::NeverThrottleRequests() { |
| void ChromeNetworkDelegate::InitializePrefsOnUIThread( |
| BooleanPrefMember* enable_referrers, |
| BooleanPrefMember* enable_do_not_track, |
| + BooleanPrefMember* enable_safesearch, |
| PrefService* pref_service) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| enable_referrers->Init(prefs::kEnableReferrers, pref_service, NULL); |
| @@ -180,6 +185,10 @@ void ChromeNetworkDelegate::InitializePrefsOnUIThread( |
| enable_do_not_track->Init(prefs::kEnableDoNotTrack, pref_service, NULL); |
| enable_do_not_track->MoveToThread(BrowserThread::IO); |
| } |
| + if (enable_safesearch) { |
| + enable_safesearch->Init(prefs::kSafeSearchEnabled, pref_service, NULL); |
| + enable_safesearch->MoveToThread(BrowserThread::IO); |
| + } |
| } |
| // static |
| @@ -220,6 +229,44 @@ int ChromeNetworkDelegate::OnBeforeURLRequest( |
| request->set_referrer(std::string()); |
| if (enable_do_not_track_ && enable_do_not_track_->GetValue()) |
| request->SetExtraRequestHeaderByName(kDNTHeader, "1", true /* override */); |
| + |
| + // Enforce SafeSearch. |
| + 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.
|
| + const bool is_search_url = google_util::IsGoogleSearchUrl( |
| + request->url().spec()); |
| + const bool is_homepage_url = google_util::IsGoogleHomePageUrl( |
| + 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.
|
| + 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
|
| + (is_search_url || is_homepage_url)) { |
| + std::string query = request->url().query(); |
| + std::string append_param; |
| + |
| + 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.
|
| + append_param = chrome::kSSearchParamsSingle; |
| + } else { |
| + append_param = chrome::kSSearchParamsMultiple; |
| + } |
| + // 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.
|
| + // or have a & before them so that we don't accept &bogussafe=active. |
| + 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.
|
| + 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.
|
| + query.rfind(chrome::kSSearchParamsMultiple) != std::string::npos) |
| + 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.
|
| + // Add this parameter at the end of this query since it will override the |
| + // other parameters. |
| + query.append(append_param); |
| + |
| + GURL::Replacements replacements; |
| + replacements.SetQueryStr(query); |
| + *new_url = request->url().ReplaceComponents(replacements); |
| + // Add it to the set so that we know that it can't be altered by an |
| + // extension. |
| + mod_by_managed_mode_.insert(request); |
|
Joao da Silva
2012/10/16 16:26:46
Suggestion: instead of using this std::set, why no
|
| + |
| + return net::OK; |
| + } |
| + } |
| + |
| return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest( |
| profile_, extension_info_map_.get(), request, callback, new_url); |
| } |
| @@ -251,8 +298,14 @@ int ChromeNetworkDelegate::OnHeadersReceived( |
| void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, |
| const GURL& new_location) { |
| - ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect( |
| - profile_, extension_info_map_.get(), request, new_location); |
| + // 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).
|
| + // it through the extension so that it doesn't get overwritten. |
| + 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
|
| + 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.
|
| + } else { |
| + ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRedirect( |
| + profile_, extension_info_map_.get(), request, new_location); |
| + } |
| } |