Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "chrome/browser/api/prefs/pref_member.h" | 10 #include "chrome/browser/api/prefs/pref_member.h" |
| 11 #include "chrome/browser/extensions/event_router_forwarder.h" | 11 #include "chrome/browser/extensions/event_router_forwarder.h" |
| 12 #include "chrome/common/pref_names.h" | |
| 13 #include "chrome/common/url_constants.h" | |
| 14 #include "chrome/test/base/testing_pref_service.h" | |
| 15 #include "chrome/test/base/testing_profile.h" | |
| 16 #include "net/base/completion_callback.h" | |
| 17 #include "net/url_request/url_request.h" | |
| 12 #include "net/url_request/url_request_test_util.h" | 18 #include "net/url_request/url_request_test_util.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 20 |
| 21 namespace { | |
| 22 const std::string kSafeParameter = chrome::kSafeSearchSafeParameter; | |
| 23 const std::string kSsuiParameter = chrome::kSafeSearchSsuiParameter; | |
| 24 const std::string kBothParameters = kSafeParameter + "&" + kSsuiParameter; | |
|
Joao da Silva
2012/10/19 10:00:38
This requires a static initializer to call the str
Sergiu
2012/10/19 12:00:18
Done.
| |
| 25 } | |
| 26 | |
| 15 class ChromeNetworkDelegateTest : public testing::Test { | 27 class ChromeNetworkDelegateTest : public testing::Test { |
| 16 protected: | 28 protected: |
| 17 ChromeNetworkDelegateTest() | 29 ChromeNetworkDelegateTest() |
| 18 : forwarder_(new extensions::EventRouterForwarder()) { | 30 : forwarder_(new extensions::EventRouterForwarder()) { |
| 19 } | 31 } |
| 20 | 32 |
| 21 virtual void SetUp() OVERRIDE { | 33 virtual void SetUp() OVERRIDE { |
| 22 never_throttle_requests_original_value_ = | 34 never_throttle_requests_original_value_ = |
| 23 ChromeNetworkDelegate::g_never_throttle_requests_; | 35 ChromeNetworkDelegate::g_never_throttle_requests_; |
| 24 ChromeNetworkDelegate::g_never_throttle_requests_ = false; | 36 ChromeNetworkDelegate::g_never_throttle_requests_ = false; |
| 25 } | 37 } |
| 26 | 38 |
| 27 virtual void TearDown() OVERRIDE { | 39 virtual void TearDown() OVERRIDE { |
| 28 ChromeNetworkDelegate::g_never_throttle_requests_ = | 40 ChromeNetworkDelegate::g_never_throttle_requests_ = |
| 29 never_throttle_requests_original_value_; | 41 never_throttle_requests_original_value_; |
| 30 } | 42 } |
| 31 | 43 |
| 32 scoped_ptr<ChromeNetworkDelegate> CreateNetworkDelegate() { | 44 scoped_ptr<ChromeNetworkDelegate> CreateNetworkDelegate() { |
| 33 return scoped_ptr<ChromeNetworkDelegate>(new ChromeNetworkDelegate( | 45 return scoped_ptr<ChromeNetworkDelegate>(new ChromeNetworkDelegate( |
| 34 forwarder_.get(), NULL, NULL, NULL, NULL, NULL, &pref_member_, NULL, | 46 forwarder_.get(), NULL, NULL, NULL, NULL, NULL, &pref_member_, NULL, |
| 35 NULL)); | 47 NULL, NULL)); |
| 36 } | 48 } |
| 37 | 49 |
| 38 // Implementation moved here for access to private bits. | 50 // Implementation moved here for access to private bits. |
| 39 void NeverThrottleLogicImpl() { | 51 void NeverThrottleLogicImpl() { |
| 40 scoped_ptr<ChromeNetworkDelegate> delegate(CreateNetworkDelegate()); | 52 scoped_ptr<ChromeNetworkDelegate> delegate(CreateNetworkDelegate()); |
| 41 | 53 |
| 42 TestURLRequestContext context; | 54 TestURLRequestContext context; |
| 43 TestURLRequest extension_request( | 55 TestURLRequest extension_request( |
| 44 GURL("http://example.com/"), NULL, &context); | 56 GURL("http://example.com/"), NULL, &context); |
| 45 extension_request.set_first_party_for_cookies( | 57 extension_request.set_first_party_for_cookies( |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 73 bool never_throttle_requests_original_value_; | 85 bool never_throttle_requests_original_value_; |
| 74 MessageLoopForIO message_loop_; | 86 MessageLoopForIO message_loop_; |
| 75 | 87 |
| 76 scoped_refptr<extensions::EventRouterForwarder> forwarder_; | 88 scoped_refptr<extensions::EventRouterForwarder> forwarder_; |
| 77 BooleanPrefMember pref_member_; | 89 BooleanPrefMember pref_member_; |
| 78 }; | 90 }; |
| 79 | 91 |
| 80 TEST_F(ChromeNetworkDelegateTest, NeverThrottleLogic) { | 92 TEST_F(ChromeNetworkDelegateTest, NeverThrottleLogic) { |
| 81 NeverThrottleLogicImpl(); | 93 NeverThrottleLogicImpl(); |
| 82 } | 94 } |
| 95 | |
| 96 class ChromeNetworkDelegateSafesearchTest : public testing::Test { | |
| 97 public: | |
| 98 scoped_ptr<net::NetworkDelegate> CreateNetworkDelegate() { | |
| 99 return scoped_ptr<net::NetworkDelegate>(new ChromeNetworkDelegate( | |
| 100 forwarder_.get(), NULL, NULL, NULL, NULL, NULL, &enable_referrers_, | |
| 101 NULL, &force_google_safesearch_, NULL)); | |
| 102 } | |
| 103 | |
| 104 void SetSafesearch(bool value) { | |
| 105 force_google_safesearch_.SetValue(value); | |
| 106 } | |
| 107 | |
| 108 void SetDelegate(net::NetworkDelegate* delegate) { | |
| 109 context_.set_network_delegate(delegate); | |
| 110 } | |
| 111 | |
| 112 protected: | |
| 113 ChromeNetworkDelegateSafesearchTest() | |
| 114 : forwarder_(new extensions::EventRouterForwarder()) { | |
| 115 } | |
| 116 | |
| 117 virtual void SetUp() OVERRIDE { | |
| 118 prefs_.RegisterBooleanPref(prefs::kForceSafeSearch, false, | |
| 119 PrefService::UNSYNCABLE_PREF); | |
| 120 force_google_safesearch_.Init(prefs::kForceSafeSearch, | |
| 121 profile_.GetTestingPrefService(), NULL); | |
| 122 prefs_.RegisterBooleanPref(prefs::kEnableReferrers, false, | |
| 123 PrefService::UNSYNCABLE_PREF); | |
| 124 enable_referrers_.Init(prefs::kEnableReferrers, | |
| 125 profile_.GetTestingPrefService(), NULL); | |
| 126 loop_.reset(new MessageLoopForIO()); | |
| 127 } | |
| 128 | |
| 129 // Verifies that the expected string is equal to the query part (between | |
| 130 // ? and #) of the url_string. | |
| 131 void CheckAddedParameters(const std::string& url_string, | |
| 132 std::string expected) { | |
| 133 // Show the URL in the trace so we know where we failed. | |
| 134 SCOPED_TRACE(url_string); | |
| 135 | |
| 136 TestURLRequest request(GURL(url_string), &delegate_, &context_); | |
| 137 | |
| 138 request.Start(); | |
| 139 MessageLoop::current()->RunAllPending(); | |
| 140 | |
| 141 EXPECT_EQ(expected, request.url().query()); | |
| 142 } | |
| 143 | |
| 144 private: | |
| 145 scoped_refptr<extensions::EventRouterForwarder> forwarder_; | |
| 146 TestingProfile profile_; | |
| 147 TestingPrefService prefs_; | |
| 148 BooleanPrefMember enable_referrers_; | |
| 149 BooleanPrefMember force_google_safesearch_; | |
| 150 scoped_ptr<net::URLRequest> request_; | |
| 151 TestURLRequestContext context_; | |
| 152 TestDelegate delegate_; | |
| 153 scoped_ptr<MessageLoopForIO> loop_; | |
| 154 }; | |
| 155 | |
| 156 TEST_F(ChromeNetworkDelegateSafesearchTest, SafesearchOn) { | |
| 157 // Tests with SafeSearch on, request parameters should be rewritten. | |
| 158 SetSafesearch(true); | |
| 159 scoped_ptr<net::NetworkDelegate> delegate(CreateNetworkDelegate()); | |
| 160 SetDelegate(delegate.get()); | |
| 161 | |
| 162 // Test the home page. | |
| 163 CheckAddedParameters("http://google.com/", kBothParameters); | |
| 164 | |
| 165 // Test the search home page. | |
| 166 CheckAddedParameters("http://google.com/webhp", | |
| 167 kBothParameters); | |
| 168 | |
| 169 // Test different valid search pages with parameters. | |
| 170 CheckAddedParameters("http://google.com/search?q=google", | |
| 171 "q=google&" + kBothParameters); | |
| 172 | |
| 173 CheckAddedParameters("http://google.com/?q=google", | |
| 174 "q=google&" + kBothParameters); | |
| 175 | |
| 176 CheckAddedParameters("http://google.com/webhp?q=google", | |
| 177 "q=google&" + kBothParameters); | |
| 178 | |
| 179 // Test the valid pages with safe set to off. | |
| 180 CheckAddedParameters("http://google.com/search?q=google&safe=off", | |
| 181 "q=google&" + kBothParameters); | |
| 182 | |
| 183 CheckAddedParameters("http://google.com/?q=google&safe=off", | |
| 184 "q=google&" + kBothParameters); | |
| 185 | |
| 186 CheckAddedParameters("http://google.com/webhp?q=google&safe=off", | |
| 187 "q=google&" + kBothParameters); | |
| 188 | |
| 189 // Test the home page, different TLDs. | |
| 190 CheckAddedParameters("http://google.de/", kBothParameters); | |
| 191 CheckAddedParameters("http://google.ro/", kBothParameters); | |
| 192 CheckAddedParameters("http://google.nl/", kBothParameters); | |
| 193 | |
| 194 // Test the search home page, different TLD. | |
| 195 CheckAddedParameters("http://google.de/webhp", kBothParameters); | |
| 196 | |
| 197 // Test the home page with parameters, different TLD. | |
| 198 CheckAddedParameters("http://google.de/search?q=google", | |
| 199 "q=google&" + kBothParameters); | |
| 200 | |
| 201 // Test the search page with parameters, different TLD. | |
| 202 CheckAddedParameters("http://google.de/?q=google", | |
| 203 "q=google&" + kBothParameters); | |
| 204 | |
| 205 // Test the search page with the parameters set. | |
| 206 CheckAddedParameters("http://google.de/?q=google&" + kBothParameters, | |
| 207 "q=google&" + kBothParameters); | |
| 208 | |
| 209 // Test some possibly tricky combinations. | |
| 210 CheckAddedParameters("http://google.com/?q=goog&" + kSafeParameter + | |
| 211 "&ssui=one", | |
| 212 "q=goog&" + kBothParameters); | |
| 213 | |
| 214 CheckAddedParameters("http://google.de/?q=goog&unsafe=active&" + | |
| 215 kSsuiParameter, | |
| 216 "q=goog&unsafe=active&" + kSsuiParameter + "&" + | |
| 217 kSafeParameter); | |
| 218 | |
| 219 CheckAddedParameters("http://google.de/?q=goog&safe=off&ssui=off", | |
| 220 "q=goog&" + kSafeParameter + "&" + kSsuiParameter); | |
| 221 | |
| 222 // Test various combinations where we should not add anything. | |
| 223 CheckAddedParameters("http://google.com/?q=goog&" + kSsuiParameter + "&" + | |
| 224 kSafeParameter, | |
| 225 "q=goog&" + kSsuiParameter + "&" + kSafeParameter); | |
| 226 | |
| 227 CheckAddedParameters("http://google.com/?" + kSsuiParameter + "&q=goog&" + | |
| 228 kSafeParameter, | |
| 229 kSsuiParameter + "&q=goog&" + kSafeParameter); | |
| 230 | |
| 231 CheckAddedParameters("http://google.com/?" + kSsuiParameter + "&" + | |
| 232 kSafeParameter + "&q=goog", | |
| 233 kSsuiParameter + "&" + kSafeParameter + "&q=goog"); | |
| 234 | |
| 235 // Test that another website is not affected, without parameters. | |
| 236 CheckAddedParameters("http://google.com/finance", ""); | |
| 237 | |
| 238 // Test that another website is not affected, with parameters. | |
| 239 CheckAddedParameters("http://google.com/finance?q=goog", "q=goog"); | |
| 240 | |
| 241 // Test that another website is not affected with redirects, with parameters. | |
| 242 CheckAddedParameters("http://finance.google.com/?q=goog", "q=goog"); | |
| 243 } | |
| 244 | |
| 245 TEST_F(ChromeNetworkDelegateSafesearchTest, SafesearchOff) { | |
| 246 // Tests with SafeSearch settings off, delegate should not alter requests. | |
| 247 SetSafesearch(false); | |
| 248 scoped_ptr<net::NetworkDelegate> delegate(CreateNetworkDelegate()); | |
| 249 SetDelegate(delegate.get()); | |
| 250 | |
| 251 // Test the home page. | |
| 252 CheckAddedParameters("http://google.com/", ""); | |
| 253 | |
| 254 // Test the search home page. | |
| 255 CheckAddedParameters("http://google.com/webhp", ""); | |
| 256 | |
| 257 // Test the home page with parameters. | |
| 258 CheckAddedParameters("http://google.com/search?q=google", | |
| 259 "q=google"); | |
| 260 | |
| 261 // Test the search page with parameters. | |
| 262 CheckAddedParameters("http://google.com/?q=google", | |
| 263 "q=google"); | |
| 264 | |
| 265 // Test the search webhp page with parameters. | |
| 266 CheckAddedParameters("http://google.com/webhp?q=google", | |
| 267 "q=google"); | |
| 268 | |
| 269 // Test the home page with parameters and safe set to off. | |
| 270 CheckAddedParameters("http://google.com/search?q=google&safe=off", | |
| 271 "q=google&safe=off"); | |
| 272 | |
| 273 // Test the home page with parameters and safe set to active. | |
| 274 CheckAddedParameters("http://google.com/search?q=google&safe=active", | |
| 275 "q=google&safe=active"); | |
| 276 } | |
| OLD | NEW |