Index: chrome/browser/net/chrome_network_delegate_unittest.cc |
diff --git a/chrome/browser/net/chrome_network_delegate_unittest.cc b/chrome/browser/net/chrome_network_delegate_unittest.cc |
index 3c4aaa156f0122a75115c62f962a72e4fcba9db8..e92393e4fe0bcaabe917f02d00c9509020130e59 100644 |
--- a/chrome/browser/net/chrome_network_delegate_unittest.cc |
+++ b/chrome/browser/net/chrome_network_delegate_unittest.cc |
@@ -9,6 +9,13 @@ |
#include "base/message_loop.h" |
#include "chrome/browser/api/prefs/pref_member.h" |
#include "chrome/browser/extensions/event_router_forwarder.h" |
+#include "chrome/common/pref_names.h" |
+#include "chrome/common/url_constants.h" |
+#include "chrome/test/base/testing_pref_service.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "content/public/test/test_browser_thread.h" |
+#include "net/base/completion_callback.h" |
+#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -32,7 +39,7 @@ class ChromeNetworkDelegateTest : public testing::Test { |
scoped_ptr<ChromeNetworkDelegate> CreateNetworkDelegate() { |
return scoped_ptr<ChromeNetworkDelegate>(new ChromeNetworkDelegate( |
forwarder_.get(), NULL, NULL, NULL, NULL, NULL, &pref_member_, NULL, |
- NULL)); |
+ NULL, NULL)); |
} |
// Implementation moved here for access to private bits. |
@@ -80,3 +87,198 @@ class ChromeNetworkDelegateTest : public testing::Test { |
TEST_F(ChromeNetworkDelegateTest, NeverThrottleLogic) { |
NeverThrottleLogicImpl(); |
} |
+ |
+class ChromeNetworkDelegateSafeSearchTest : public testing::Test { |
+ public: |
+ scoped_ptr<net::NetworkDelegate> CreateNetworkDelegate() { |
+ return scoped_ptr<net::NetworkDelegate>(new ChromeNetworkDelegate( |
+ forwarder_.get(), NULL, NULL, NULL, NULL, NULL, &enable_referrers_, |
+ NULL, &force_google_safe_search_, NULL)); |
+ } |
+ |
+ void SetSafeSearch(bool value) { |
+ force_google_safe_search_.SetValue(value); |
+ } |
+ |
+ void SetDelegate(net::NetworkDelegate* delegate) { |
+ context_.set_network_delegate(delegate); |
+ } |
+ |
+ protected: |
+ ChromeNetworkDelegateSafeSearchTest() |
+ : forwarder_(new extensions::EventRouterForwarder()) { |
+ } |
+ |
+ virtual void SetUp() OVERRIDE { |
+ io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO, |
+ &message_loop_)); |
+ prefs_.RegisterBooleanPref(prefs::kForceSafeSearch, false, |
+ PrefService::UNSYNCABLE_PREF); |
+ force_google_safe_search_.Init(prefs::kForceSafeSearch, |
+ profile_.GetTestingPrefService(), NULL); |
+ prefs_.RegisterBooleanPref(prefs::kEnableReferrers, false, |
+ PrefService::UNSYNCABLE_PREF); |
+ enable_referrers_.Init(prefs::kEnableReferrers, |
+ profile_.GetTestingPrefService(), NULL); |
+ } |
+ |
+ // Does a request using the |url_string| URL and verifies that the expected |
+ // string is equal to the query part (between ? and #) of the final url of |
+ // that request. |
+ void CheckAddedParameters(const std::string& url_string, |
+ const std::string& expected_query_parameters) { |
+ // Show the URL in the trace so we know where we failed. |
+ SCOPED_TRACE(url_string); |
+ |
+ TestURLRequest request(GURL(url_string), &delegate_, &context_); |
+ |
+ request.Start(); |
+ MessageLoop::current()->RunUntilIdle(); |
+ |
+ EXPECT_EQ(expected_query_parameters, request.url().query()); |
+ } |
+ |
+ private: |
+ scoped_refptr<extensions::EventRouterForwarder> forwarder_; |
+ TestingProfile profile_; |
+ TestingPrefService prefs_; |
+ BooleanPrefMember enable_referrers_; |
+ BooleanPrefMember force_google_safe_search_; |
+ scoped_ptr<net::URLRequest> request_; |
+ TestURLRequestContext context_; |
+ TestDelegate delegate_; |
+ MessageLoopForIO message_loop_; |
+ scoped_ptr<content::TestBrowserThread> io_thread_; |
+}; |
+ |
+TEST_F(ChromeNetworkDelegateSafeSearchTest, SafeSearchOn) { |
+ // Tests with SafeSearch on, request parameters should be rewritten. |
+ const std::string kSafeParameter = chrome::kSafeSearchSafeParameter; |
+ const std::string kSsuiParameter = chrome::kSafeSearchSsuiParameter; |
+ const std::string kBothParameters = kSafeParameter + "&" + kSsuiParameter; |
+ SetSafeSearch(true); |
+ scoped_ptr<net::NetworkDelegate> delegate(CreateNetworkDelegate()); |
+ SetDelegate(delegate.get()); |
+ |
+ // Test the home page. |
+ CheckAddedParameters("http://google.com/", kBothParameters); |
+ |
+ // Test the search home page. |
+ CheckAddedParameters("http://google.com/webhp", |
+ kBothParameters); |
+ |
+ // Test different valid search pages with parameters. |
+ CheckAddedParameters("http://google.com/search?q=google", |
+ "q=google&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/?q=google", |
+ "q=google&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/webhp?q=google", |
+ "q=google&" + kBothParameters); |
+ |
+ // Test the valid pages with safe set to off. |
+ CheckAddedParameters("http://google.com/search?q=google&safe=off", |
+ "q=google&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/?q=google&safe=off", |
+ "q=google&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/webhp?q=google&safe=off", |
+ "q=google&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/webhp?q=google&%73afe=off", |
+ "q=google&%73afe=off&" + kBothParameters); |
+ |
+ // Test the home page, different TLDs. |
+ CheckAddedParameters("http://google.de/", kBothParameters); |
+ CheckAddedParameters("http://google.ro/", kBothParameters); |
+ CheckAddedParameters("http://google.nl/", kBothParameters); |
+ |
+ // Test the search home page, different TLD. |
+ CheckAddedParameters("http://google.de/webhp", kBothParameters); |
+ |
+ // Test the search page with parameters, different TLD. |
+ CheckAddedParameters("http://google.de/search?q=google", |
+ "q=google&" + kBothParameters); |
+ |
+ // Test the home page with parameters, different TLD. |
+ CheckAddedParameters("http://google.de/?q=google", |
+ "q=google&" + kBothParameters); |
+ |
+ // Test the search page with the parameters set. |
+ CheckAddedParameters("http://google.de/?q=google&" + kBothParameters, |
+ "q=google&" + kBothParameters); |
+ |
+ // Test some possibly tricky combinations. |
+ CheckAddedParameters("http://google.com/?q=goog&" + kSafeParameter + |
+ "&ssui=one", |
+ "q=goog&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.de/?q=goog&unsafe=active&" + |
+ kSsuiParameter, |
+ "q=goog&unsafe=active&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.de/?q=goog&safe=off&ssui=off", |
+ "q=goog&" + kBothParameters); |
+ |
+ // Test various combinations where we should not add anything. |
+ CheckAddedParameters("http://google.com/?q=goog&" + kSsuiParameter + "&" + |
+ kSafeParameter, |
+ "q=goog&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/?" + kSsuiParameter + "&q=goog&" + |
+ kSafeParameter, |
+ "q=goog&" + kBothParameters); |
+ |
+ CheckAddedParameters("http://google.com/?" + kSsuiParameter + "&" + |
+ kSafeParameter + "&q=goog", |
+ "q=goog&" + kBothParameters); |
+ |
+ // Test that another website is not affected, without parameters. |
+ CheckAddedParameters("http://google.com/finance", ""); |
+ |
+ // Test that another website is not affected, with parameters. |
+ CheckAddedParameters("http://google.com/finance?q=goog", "q=goog"); |
+ |
+ // Test that another website is not affected with redirects, with parameters. |
+ CheckAddedParameters("http://finance.google.com/?q=goog", "q=goog"); |
+ |
+ // Test with percent-encoded data (%26 is &) |
+ CheckAddedParameters("http://google.com/?q=%26%26%26&" + kSsuiParameter + |
+ "&" + kSafeParameter + "¶m=%26%26%26", |
+ "q=%26%26%26¶m=%26%26%26&" + kBothParameters); |
+} |
+ |
+TEST_F(ChromeNetworkDelegateSafeSearchTest, SafeSearchOff) { |
+ // Tests with SafeSearch settings off, delegate should not alter requests. |
+ SetSafeSearch(false); |
+ scoped_ptr<net::NetworkDelegate> delegate(CreateNetworkDelegate()); |
+ SetDelegate(delegate.get()); |
+ |
+ // Test the home page. |
+ CheckAddedParameters("http://google.com/", ""); |
+ |
+ // Test the search home page. |
+ CheckAddedParameters("http://google.com/webhp", ""); |
+ |
+ // Test the home page with parameters. |
+ CheckAddedParameters("http://google.com/search?q=google", |
+ "q=google"); |
+ |
+ // Test the search page with parameters. |
+ CheckAddedParameters("http://google.com/?q=google", |
+ "q=google"); |
+ |
+ // Test the search webhp page with parameters. |
+ CheckAddedParameters("http://google.com/webhp?q=google", |
+ "q=google"); |
+ |
+ // Test the home page with parameters and safe set to off. |
+ CheckAddedParameters("http://google.com/search?q=google&safe=off", |
+ "q=google&safe=off"); |
+ |
+ // Test the home page with parameters and safe set to active. |
+ CheckAddedParameters("http://google.com/search?q=google&safe=active", |
+ "q=google&safe=active"); |
+} |