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

Side by Side Diff: net/http/http_network_layer_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 "net/http/http_network_layer.h" 5 #include "net/http/http_network_layer.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "net/base/net_log.h" 9 #include "net/base/net_log.h"
10 #include "net/cert/mock_cert_verifier.h" 10 #include "net/cert/mock_cert_verifier.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 rv = callback.WaitForResult(); 81 rv = callback.WaitForResult();
82 ASSERT_EQ(OK, rv); 82 ASSERT_EQ(OK, rv);
83 83
84 std::string contents; 84 std::string contents;
85 rv = ReadTransaction(trans.get(), &contents); 85 rv = ReadTransaction(trans.get(), &contents);
86 EXPECT_EQ(OK, rv); 86 EXPECT_EQ(OK, rv);
87 EXPECT_EQ(content, contents); 87 EXPECT_EQ(content, contents);
88 88
89 if (!header.empty()) { 89 if (!header.empty()) {
90 // We also have a server header here that isn't set by the proxy. 90 // We also have a server header here that isn't set by the proxy.
91 EXPECT_TRUE(trans->GetResponseInfo()->headers->HasHeaderValue( 91 EXPECT_TRUE(
92 header, value)); 92 trans->GetResponseInfo()->headers->HasHeaderValue(header, value));
93 } 93 }
94 } 94 }
95 95
96 // Check that |proxy_count| proxies are in the retry list. 96 // Check that |proxy_count| proxies are in the retry list.
97 // These will be, in order, |bad_proxy| and |bad_proxy2|". 97 // These will be, in order, |bad_proxy| and |bad_proxy2|".
98 void TestBadProxies(unsigned int proxy_count, const std::string& bad_proxy, 98 void TestBadProxies(unsigned int proxy_count,
99 const std::string& bad_proxy,
99 const std::string& bad_proxy2) { 100 const std::string& bad_proxy2) {
100 const ProxyRetryInfoMap& retry_info = proxy_service_->proxy_retry_info(); 101 const ProxyRetryInfoMap& retry_info = proxy_service_->proxy_retry_info();
101 ASSERT_EQ(proxy_count, retry_info.size()); 102 ASSERT_EQ(proxy_count, retry_info.size());
102 if (proxy_count > 0) 103 if (proxy_count > 0)
103 ASSERT_TRUE(retry_info.find(bad_proxy) != retry_info.end()); 104 ASSERT_TRUE(retry_info.find(bad_proxy) != retry_info.end());
104 if (proxy_count > 1) 105 if (proxy_count > 1)
105 ASSERT_TRUE(retry_info.find(bad_proxy2) != retry_info.end()); 106 ASSERT_TRUE(retry_info.find(bad_proxy2) != retry_info.end());
106 } 107 }
107 108
108 // Simulates a request through a proxy which returns a bypass, which is then 109 // Simulates a request through a proxy which returns a bypass, which is then
109 // retried through a second proxy that doesn't bypass. 110 // retried through a second proxy that doesn't bypass.
110 // Checks that the expected requests were issued, the expected content was 111 // Checks that the expected requests were issued, the expected content was
111 // received, and the first proxy |bad_proxy| was marked as bad. 112 // received, and the first proxy |bad_proxy| was marked as bad.
112 void TestProxyFallback(const std::string& bad_proxy) { 113 void TestProxyFallback(const std::string& bad_proxy) {
113 MockRead data_reads[] = { 114 MockRead data_reads[] = {
114 MockRead("HTTP/1.1 200 OK\r\n" 115 MockRead(
115 "Chrome-Proxy: bypass=0\r\n\r\n"), 116 "HTTP/1.1 200 OK\r\n"
116 MockRead("Bypass message"), 117 "Chrome-Proxy: bypass=0\r\n\r\n"),
117 MockRead(SYNCHRONOUS, OK), 118 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
118 }; 119 };
119 TestProxyFallbackWithMockReads(bad_proxy, "", data_reads, 120 TestProxyFallbackWithMockReads(
120 arraysize(data_reads), 1u); 121 bad_proxy, "", data_reads, arraysize(data_reads), 1u);
121 } 122 }
122 123
123 void TestProxyFallbackWithMockReads(const std::string& bad_proxy, 124 void TestProxyFallbackWithMockReads(const std::string& bad_proxy,
124 const std::string& bad_proxy2, 125 const std::string& bad_proxy2,
125 MockRead data_reads[], 126 MockRead data_reads[],
126 int data_reads_size, 127 int data_reads_size,
127 unsigned int expected_retry_info_size) { 128 unsigned int expected_retry_info_size) {
128 TestProxyFallbackByMethodWithMockReads(bad_proxy, bad_proxy2, data_reads, 129 TestProxyFallbackByMethodWithMockReads(bad_proxy,
129 data_reads_size, "GET", "content", 130 bad_proxy2,
130 true, expected_retry_info_size); 131 data_reads,
132 data_reads_size,
133 "GET",
134 "content",
135 true,
136 expected_retry_info_size);
131 } 137 }
132 138
133 void TestProxyFallbackByMethodWithMockReads( 139 void TestProxyFallbackByMethodWithMockReads(
134 const std::string& bad_proxy, 140 const std::string& bad_proxy,
135 const std::string& bad_proxy2, 141 const std::string& bad_proxy2,
136 MockRead data_reads[], 142 MockRead data_reads[],
137 int data_reads_size, 143 int data_reads_size,
138 std::string method, 144 std::string method,
139 std::string content, 145 std::string content,
140 bool retry_expected, 146 bool retry_expected,
141 unsigned int expected_retry_info_size) { 147 unsigned int expected_retry_info_size) {
142 std::string trailer = 148 std::string trailer =
143 (method == "HEAD" || method == "PUT" || method == "POST") ? 149 (method == "HEAD" || method == "PUT" || method == "POST")
144 "Content-Length: 0\r\n\r\n" : "\r\n"; 150 ? "Content-Length: 0\r\n\r\n"
145 std::string request = 151 : "\r\n";
146 base::StringPrintf("%s http://www.google.com/ HTTP/1.1\r\n" 152 std::string request = base::StringPrintf(
147 "Host: www.google.com\r\n" 153 "%s http://www.google.com/ HTTP/1.1\r\n"
148 "Proxy-Connection: keep-alive\r\n" 154 "Host: www.google.com\r\n"
149 "%s", method.c_str(), trailer.c_str()); 155 "Proxy-Connection: keep-alive\r\n"
156 "%s",
157 method.c_str(),
158 trailer.c_str());
150 159
151 MockWrite data_writes[] = { 160 MockWrite data_writes[] = {
152 MockWrite(request.c_str()), 161 MockWrite(request.c_str()),
153 }; 162 };
154 163
155 StaticSocketDataProvider data1(data_reads, data_reads_size, 164 StaticSocketDataProvider data1(
156 data_writes, arraysize(data_writes)); 165 data_reads, data_reads_size, data_writes, arraysize(data_writes));
157 mock_socket_factory_.AddSocketDataProvider(&data1); 166 mock_socket_factory_.AddSocketDataProvider(&data1);
158 167
159 // Second data provider returns the expected content. 168 // Second data provider returns the expected content.
160 MockRead data_reads2[3]; 169 MockRead data_reads2[3];
161 size_t data_reads2_index = 0; 170 size_t data_reads2_index = 0;
162 data_reads2[data_reads2_index++] = MockRead("HTTP/1.0 200 OK\r\n" 171 data_reads2[data_reads2_index++] = MockRead(
163 "Server: not-proxy\r\n\r\n"); 172 "HTTP/1.0 200 OK\r\n"
173 "Server: not-proxy\r\n\r\n");
164 if (!content.empty()) 174 if (!content.empty())
165 data_reads2[data_reads2_index++] = MockRead(content.c_str()); 175 data_reads2[data_reads2_index++] = MockRead(content.c_str());
166 data_reads2[data_reads2_index++] = MockRead(SYNCHRONOUS, OK); 176 data_reads2[data_reads2_index++] = MockRead(SYNCHRONOUS, OK);
167 177
168 MockWrite data_writes2[] = { 178 MockWrite data_writes2[] = {
169 MockWrite(request.c_str()), 179 MockWrite(request.c_str()),
170 }; 180 };
171 StaticSocketDataProvider data2(data_reads2, data_reads2_index, 181 StaticSocketDataProvider data2(
172 data_writes2, arraysize(data_writes2)); 182 data_reads2, data_reads2_index, data_writes2, arraysize(data_writes2));
173 mock_socket_factory_.AddSocketDataProvider(&data2); 183 mock_socket_factory_.AddSocketDataProvider(&data2);
174 184
175 // Expect that we get "content" and not "Bypass message", and that there's 185 // Expect that we get "content" and not "Bypass message", and that there's
176 // a "not-proxy" "Server:" header in the final response. 186 // a "not-proxy" "Server:" header in the final response.
177 if (retry_expected) { 187 if (retry_expected) {
178 ExecuteRequestExpectingContentAndHeader(method, content, 188 ExecuteRequestExpectingContentAndHeader(
179 "server", "not-proxy"); 189 method, content, "server", "not-proxy");
180 } else { 190 } else {
181 ExecuteRequestExpectingContentAndHeader(method, content, "", ""); 191 ExecuteRequestExpectingContentAndHeader(method, content, "", "");
182 } 192 }
183 193
184 // We should also observe the bad proxy in the retry list. 194 // We should also observe the bad proxy in the retry list.
185 TestBadProxies(expected_retry_info_size, bad_proxy, bad_proxy2); 195 TestBadProxies(expected_retry_info_size, bad_proxy, bad_proxy2);
186 } 196 }
187 197
188 // Simulates a request through a proxy which returns a bypass, which is then 198 // Simulates a request through a proxy which returns a bypass, which is then
189 // retried through a direct connection to the origin site. 199 // retried through a direct connection to the origin site.
190 // Checks that the expected requests were issued, the expected content was 200 // Checks that the expected requests were issued, the expected content was
191 // received, and the proxy |bad_proxy| was marked as bad. 201 // received, and the proxy |bad_proxy| was marked as bad.
192 void TestProxyFallbackToDirect(const std::string& bad_proxy) { 202 void TestProxyFallbackToDirect(const std::string& bad_proxy) {
193 MockRead data_reads[] = { 203 MockRead data_reads[] = {
194 MockRead("HTTP/1.1 200 OK\r\n" 204 MockRead(
195 "Chrome-Proxy: bypass=0\r\n\r\n"), 205 "HTTP/1.1 200 OK\r\n"
196 MockRead("Bypass message"), 206 "Chrome-Proxy: bypass=0\r\n\r\n"),
197 MockRead(SYNCHRONOUS, OK), 207 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
198 }; 208 };
199 MockWrite data_writes[] = { 209 MockWrite data_writes[] = {
200 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" 210 MockWrite(
201 "Host: www.google.com\r\n" 211 "GET http://www.google.com/ HTTP/1.1\r\n"
202 "Proxy-Connection: keep-alive\r\n\r\n"), 212 "Host: www.google.com\r\n"
213 "Proxy-Connection: keep-alive\r\n\r\n"),
203 }; 214 };
204 StaticSocketDataProvider data1(data_reads, arraysize(data_reads), 215 StaticSocketDataProvider data1(
205 data_writes, arraysize(data_writes)); 216 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
206 mock_socket_factory_.AddSocketDataProvider(&data1); 217 mock_socket_factory_.AddSocketDataProvider(&data1);
207 218
208 // Second data provider returns the expected content. 219 // Second data provider returns the expected content.
209 MockRead data_reads2[] = { 220 MockRead data_reads2[] = {
210 MockRead("HTTP/1.0 200 OK\r\n" 221 MockRead(
211 "Server: not-proxy\r\n\r\n"), 222 "HTTP/1.0 200 OK\r\n"
212 MockRead("content"), 223 "Server: not-proxy\r\n\r\n"),
213 MockRead(SYNCHRONOUS, OK), 224 MockRead("content"), MockRead(SYNCHRONOUS, OK),
214 }; 225 };
215 MockWrite data_writes2[] = { 226 MockWrite data_writes2[] = {
216 MockWrite("GET / HTTP/1.1\r\n" 227 MockWrite(
217 "Host: www.google.com\r\n" 228 "GET / HTTP/1.1\r\n"
218 "Connection: keep-alive\r\n\r\n"), 229 "Host: www.google.com\r\n"
230 "Connection: keep-alive\r\n\r\n"),
219 }; 231 };
220 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), 232 StaticSocketDataProvider data2(data_reads2,
221 data_writes2, arraysize(data_writes2)); 233 arraysize(data_reads2),
234 data_writes2,
235 arraysize(data_writes2));
222 mock_socket_factory_.AddSocketDataProvider(&data2); 236 mock_socket_factory_.AddSocketDataProvider(&data2);
223 237
224 // Expect that we get "content" and not "Bypass message", and that there's 238 // Expect that we get "content" and not "Bypass message", and that there's
225 // a "not-proxy" "Server:" header in the final response. 239 // a "not-proxy" "Server:" header in the final response.
226 ExecuteRequestExpectingContentAndHeader("GET", "content", 240 ExecuteRequestExpectingContentAndHeader(
227 "server", "not-proxy"); 241 "GET", "content", "server", "not-proxy");
228 242
229 // We should also observe the bad proxy in the retry list. 243 // We should also observe the bad proxy in the retry list.
230 TestBadProxies(1u, bad_proxy, ""); 244 TestBadProxies(1u, bad_proxy, "");
231 } 245 }
232 246
233 // Simulates a request through a proxy which returns a bypass, under a 247 // Simulates a request through a proxy which returns a bypass, under a
234 // configuration where there is no valid bypass. |proxy_count| proxies 248 // configuration where there is no valid bypass. |proxy_count| proxies
235 // are expected to be configured. 249 // are expected to be configured.
236 // Checks that the expected requests were issued, the bypass message was the 250 // Checks that the expected requests were issued, the bypass message was the
237 // final received content, and all proxies were marked as bad. 251 // final received content, and all proxies were marked as bad.
238 void TestProxyFallbackFail(unsigned int proxy_count, 252 void TestProxyFallbackFail(unsigned int proxy_count,
239 const std::string& bad_proxy, 253 const std::string& bad_proxy,
240 const std::string& bad_proxy2) { 254 const std::string& bad_proxy2) {
241 MockRead data_reads[] = { 255 MockRead data_reads[] = {
242 MockRead("HTTP/1.1 200 OK\r\n" 256 MockRead(
243 "Chrome-Proxy: bypass=0\r\n\r\n"), 257 "HTTP/1.1 200 OK\r\n"
244 MockRead("Bypass message"), 258 "Chrome-Proxy: bypass=0\r\n\r\n"),
245 MockRead(SYNCHRONOUS, OK), 259 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
246 }; 260 };
247 MockWrite data_writes[] = { 261 MockWrite data_writes[] = {
248 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" 262 MockWrite(
249 "Host: www.google.com\r\n" 263 "GET http://www.google.com/ HTTP/1.1\r\n"
250 "Proxy-Connection: keep-alive\r\n\r\n"), 264 "Host: www.google.com\r\n"
265 "Proxy-Connection: keep-alive\r\n\r\n"),
251 }; 266 };
252 StaticSocketDataProvider data1(data_reads, arraysize(data_reads), 267 StaticSocketDataProvider data1(
253 data_writes, arraysize(data_writes)); 268 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
254 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), 269 StaticSocketDataProvider data2(
255 data_writes, arraysize(data_writes)); 270 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
256 271
257 mock_socket_factory_.AddSocketDataProvider(&data1); 272 mock_socket_factory_.AddSocketDataProvider(&data1);
258 if (proxy_count > 1) 273 if (proxy_count > 1)
259 mock_socket_factory_.AddSocketDataProvider(&data2); 274 mock_socket_factory_.AddSocketDataProvider(&data2);
260 275
261 // Expect that we get "Bypass message", and not "content".. 276 // Expect that we get "Bypass message", and not "content"..
262 ExecuteRequestExpectingContentAndHeader("GET", "Bypass message", "", ""); 277 ExecuteRequestExpectingContentAndHeader("GET", "Bypass message", "", "");
263 278
264 // We should also observe the bad proxy or proxies in the retry list. 279 // We should also observe the bad proxy or proxies in the retry list.
265 TestBadProxies(proxy_count, bad_proxy, bad_proxy2); 280 TestBadProxies(proxy_count, bad_proxy, bad_proxy2);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 ASSERT_TRUE(trans == NULL); 313 ASSERT_TRUE(trans == NULL);
299 314
300 factory_->OnResume(); 315 factory_->OnResume();
301 316
302 rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans); 317 rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans);
303 EXPECT_EQ(OK, rv); 318 EXPECT_EQ(OK, rv);
304 } 319 }
305 320
306 TEST_F(HttpNetworkLayerTest, GET) { 321 TEST_F(HttpNetworkLayerTest, GET) {
307 MockRead data_reads[] = { 322 MockRead data_reads[] = {
308 MockRead("HTTP/1.0 200 OK\r\n\r\n"), 323 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"),
309 MockRead("hello world"), 324 MockRead(SYNCHRONOUS, OK),
310 MockRead(SYNCHRONOUS, OK),
311 }; 325 };
312 MockWrite data_writes[] = { 326 MockWrite data_writes[] = {
313 MockWrite("GET / HTTP/1.1\r\n" 327 MockWrite(
314 "Host: www.google.com\r\n" 328 "GET / HTTP/1.1\r\n"
315 "Connection: keep-alive\r\n" 329 "Host: www.google.com\r\n"
316 "User-Agent: Foo/1.0\r\n\r\n"), 330 "Connection: keep-alive\r\n"
331 "User-Agent: Foo/1.0\r\n\r\n"),
317 }; 332 };
318 StaticSocketDataProvider data(data_reads, arraysize(data_reads), 333 StaticSocketDataProvider data(
319 data_writes, arraysize(data_writes)); 334 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
320 mock_socket_factory_.AddSocketDataProvider(&data); 335 mock_socket_factory_.AddSocketDataProvider(&data);
321 336
322 TestCompletionCallback callback; 337 TestCompletionCallback callback;
323 338
324 HttpRequestInfo request_info; 339 HttpRequestInfo request_info;
325 request_info.url = GURL("http://www.google.com/"); 340 request_info.url = GURL("http://www.google.com/");
326 request_info.method = "GET"; 341 request_info.method = "GET";
327 request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, 342 request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent,
328 "Foo/1.0"); 343 "Foo/1.0");
329 request_info.load_flags = LOAD_NORMAL; 344 request_info.load_flags = LOAD_NORMAL;
(...skipping 27 matching lines...) Expand all
357 TEST_F(HttpNetworkLayerTest, ServerTwoProxyBypassPac) { 372 TEST_F(HttpNetworkLayerTest, ServerTwoProxyBypassPac) {
358 std::string bad_proxy = GetDataReductionProxy(); 373 std::string bad_proxy = GetDataReductionProxy();
359 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 374 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
360 "PROXY " + bad_proxy + "; PROXY good:8080")); 375 "PROXY " + bad_proxy + "; PROXY good:8080"));
361 TestProxyFallback(bad_proxy); 376 TestProxyFallback(bad_proxy);
362 } 377 }
363 378
364 TEST_F(HttpNetworkLayerTest, ServerTwoProxyBypassFixed) { 379 TEST_F(HttpNetworkLayerTest, ServerTwoProxyBypassFixed) {
365 std::string bad_proxy = GetDataReductionProxy(); 380 std::string bad_proxy = GetDataReductionProxy();
366 ConfigureTestDependencies( 381 ConfigureTestDependencies(
367 ProxyService::CreateFixed(bad_proxy +", good:8080")); 382 ProxyService::CreateFixed(bad_proxy + ", good:8080"));
368 TestProxyFallback(bad_proxy); 383 TestProxyFallback(bad_proxy);
369 } 384 }
370 385
371 TEST_F(HttpNetworkLayerTest, BypassAndRetryIdempotentMethods) { 386 TEST_F(HttpNetworkLayerTest, BypassAndRetryIdempotentMethods) {
372 std::string bad_proxy = GetDataReductionProxy(); 387 std::string bad_proxy = GetDataReductionProxy();
373 const struct { 388 const struct {
374 std::string method; 389 std::string method;
375 std::string content; 390 std::string content;
376 bool expected_to_retry; 391 bool expected_to_retry;
377 } tests[] = { 392 } tests[] = {
378 { 393 {
379 "GET", 394 "GET", "content", true,
380 "content", 395 },
381 true, 396 {
382 }, 397 "OPTIONS", "content", true,
383 { 398 },
384 "OPTIONS", 399 {
385 "content", 400 "HEAD", "", true,
386 true, 401 },
387 }, 402 {
388 { 403 "PUT", "", true,
389 "HEAD", 404 },
390 "", 405 {
391 true, 406 "DELETE", "content", true,
392 }, 407 },
393 { 408 {
394 "PUT", 409 "TRACE", "content", true,
395 "", 410 },
396 true, 411 {
397 }, 412 "POST", "Bypass message", false,
398 { 413 },
399 "DELETE", 414 };
400 "content",
401 true,
402 },
403 {
404 "TRACE",
405 "content",
406 true,
407 },
408 {
409 "POST",
410 "Bypass message",
411 false,
412 },
413 };
414 415
415 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 416 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
416 ConfigureTestDependencies( 417 ConfigureTestDependencies(
417 ProxyService::CreateFixed(bad_proxy +", good:8080")); 418 ProxyService::CreateFixed(bad_proxy + ", good:8080"));
418 MockRead data_reads[] = { 419 MockRead data_reads[] = {
419 MockRead("HTTP/1.1 200 OK\r\n" 420 MockRead(
420 "Chrome-Proxy: bypass=0\r\n\r\n"), 421 "HTTP/1.1 200 OK\r\n"
421 MockRead("Bypass message"), 422 "Chrome-Proxy: bypass=0\r\n\r\n"),
422 MockRead(SYNCHRONOUS, OK), 423 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
423 }; 424 };
424 TestProxyFallbackByMethodWithMockReads(bad_proxy, "", data_reads, 425 TestProxyFallbackByMethodWithMockReads(bad_proxy,
426 "",
427 data_reads,
425 arraysize(data_reads), 428 arraysize(data_reads),
426 tests[i].method, 429 tests[i].method,
427 tests[i].content, 430 tests[i].content,
428 tests[i].expected_to_retry, 1u); 431 tests[i].expected_to_retry,
432 1u);
429 } 433 }
430 } 434 }
431 435
432 TEST_F(HttpNetworkLayerTest, ServerOneProxyWithDirectBypassPac) { 436 TEST_F(HttpNetworkLayerTest, ServerOneProxyWithDirectBypassPac) {
433 std::string bad_proxy = GetDataReductionProxy(); 437 std::string bad_proxy = GetDataReductionProxy();
434 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 438 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
435 "PROXY " + bad_proxy + "; DIRECT")); 439 "PROXY " + bad_proxy + "; DIRECT"));
436 TestProxyFallbackToDirect(bad_proxy); 440 TestProxyFallbackToDirect(bad_proxy);
437 } 441 }
438 442
(...skipping 11 matching lines...) Expand all
450 HostPortPair::FromURL(GURL(DATA_REDUCTION_FALLBACK_HOST)).ToString(); 454 HostPortPair::FromURL(GURL(DATA_REDUCTION_FALLBACK_HOST)).ToString();
451 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 455 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
452 "PROXY " + bad_proxy + "; PROXY " + bad_proxy2)); 456 "PROXY " + bad_proxy + "; PROXY " + bad_proxy2));
453 TestProxyFallbackFail(2u, bad_proxy, bad_proxy2); 457 TestProxyFallbackFail(2u, bad_proxy, bad_proxy2);
454 } 458 }
455 459
456 TEST_F(HttpNetworkLayerTest, ServerTwoProxyDoubleBypassFixed) { 460 TEST_F(HttpNetworkLayerTest, ServerTwoProxyDoubleBypassFixed) {
457 std::string bad_proxy = GetDataReductionProxy(); 461 std::string bad_proxy = GetDataReductionProxy();
458 std::string bad_proxy2 = 462 std::string bad_proxy2 =
459 HostPortPair::FromURL(GURL(DATA_REDUCTION_FALLBACK_HOST)).ToString(); 463 HostPortPair::FromURL(GURL(DATA_REDUCTION_FALLBACK_HOST)).ToString();
460 ConfigureTestDependencies(ProxyService::CreateFixed( 464 ConfigureTestDependencies(
461 bad_proxy + ", " + bad_proxy2)); 465 ProxyService::CreateFixed(bad_proxy + ", " + bad_proxy2));
462 TestProxyFallbackFail(2u, bad_proxy, bad_proxy2); 466 TestProxyFallbackFail(2u, bad_proxy, bad_proxy2);
463 } 467 }
464 #endif 468 #endif
465 469
466 TEST_F(HttpNetworkLayerTest, ServerOneProxyNoDirectBypassPac) { 470 TEST_F(HttpNetworkLayerTest, ServerOneProxyNoDirectBypassPac) {
467 std::string bad_proxy = GetDataReductionProxy(); 471 std::string bad_proxy = GetDataReductionProxy();
468 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 472 ConfigureTestDependencies(
469 "PROXY " + bad_proxy)); 473 ProxyService::CreateFixedFromPacResult("PROXY " + bad_proxy));
470 TestProxyFallbackFail(1u, bad_proxy, ""); 474 TestProxyFallbackFail(1u, bad_proxy, "");
471 } 475 }
472 476
473 TEST_F(HttpNetworkLayerTest, ServerOneProxyNoDirectBypassFixed) { 477 TEST_F(HttpNetworkLayerTest, ServerOneProxyNoDirectBypassFixed) {
474 std::string bad_proxy = GetDataReductionProxy(); 478 std::string bad_proxy = GetDataReductionProxy();
475 ConfigureTestDependencies(ProxyService::CreateFixed(bad_proxy)); 479 ConfigureTestDependencies(ProxyService::CreateFixed(bad_proxy));
476 TestProxyFallbackFail(1u, bad_proxy, ""); 480 TestProxyFallbackFail(1u, bad_proxy, "");
477 } 481 }
478 482
479 TEST_F(HttpNetworkLayerTest, ServerFallbackOn5xxError) { 483 TEST_F(HttpNetworkLayerTest, ServerFallbackOn5xxError) {
480 // Verify that "500 Internal Server Error", "502 Bad Gateway", and 484 // Verify that "500 Internal Server Error", "502 Bad Gateway", and
481 // "503 Service Unavailable" via the data reduction proxy induce proxy 485 // "503 Service Unavailable" via the data reduction proxy induce proxy
482 // fallback to a second proxy, if configured. 486 // fallback to a second proxy, if configured.
483 487
484 // To configure this test, we need to wire up a custom proxy service to use 488 // To configure this test, we need to wire up a custom proxy service to use
485 // a pair of proxies. We'll induce fallback via the first and return 489 // a pair of proxies. We'll induce fallback via the first and return
486 // the expected data via the second. 490 // the expected data via the second.
487 std::string data_reduction_proxy( 491 std::string data_reduction_proxy(
488 HostPortPair::FromURL(GURL(SPDY_PROXY_AUTH_ORIGIN)).ToString()); 492 HostPortPair::FromURL(GURL(SPDY_PROXY_AUTH_ORIGIN)).ToString());
489 std::string pac_string = base::StringPrintf( 493 std::string pac_string = base::StringPrintf("PROXY %s; PROXY good:8080",
490 "PROXY %s; PROXY good:8080", data_reduction_proxy.data()); 494 data_reduction_proxy.data());
491 495
492 std::string headers[] = { 496 std::string headers[] = {"HTTP/1.1 500 Internal Server Error\r\n\r\n",
493 "HTTP/1.1 500 Internal Server Error\r\n\r\n", 497 "HTTP/1.1 502 Bad Gateway\r\n\r\n",
494 "HTTP/1.1 502 Bad Gateway\r\n\r\n", 498 "HTTP/1.1 503 Service Unavailable\r\n\r\n"};
495 "HTTP/1.1 503 Service Unavailable\r\n\r\n"
496 };
497 499
498 for (size_t i = 0; i < arraysize(headers); ++i) { 500 for (size_t i = 0; i < arraysize(headers); ++i) {
499 ConfigureTestDependencies( 501 ConfigureTestDependencies(
500 ProxyService::CreateFixedFromPacResult(pac_string)); 502 ProxyService::CreateFixedFromPacResult(pac_string));
501 503
502 MockRead data_reads[] = { 504 MockRead data_reads[] = {
503 MockRead(headers[i].c_str()), 505 MockRead(headers[i].c_str()), MockRead("Bypass message"),
504 MockRead("Bypass message"), 506 MockRead(SYNCHRONOUS, OK),
505 MockRead(SYNCHRONOUS, OK),
506 }; 507 };
507 508
508 MockWrite data_writes[] = { 509 MockWrite data_writes[] = {
509 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" 510 MockWrite(
510 "Host: www.google.com\r\n" 511 "GET http://www.google.com/ HTTP/1.1\r\n"
511 "Proxy-Connection: keep-alive\r\n\r\n"), 512 "Host: www.google.com\r\n"
513 "Proxy-Connection: keep-alive\r\n\r\n"),
512 }; 514 };
513 515
514 StaticSocketDataProvider data1(data_reads, arraysize(data_reads), 516 StaticSocketDataProvider data1(
515 data_writes, arraysize(data_writes)); 517 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
516 mock_socket_factory_.AddSocketDataProvider(&data1); 518 mock_socket_factory_.AddSocketDataProvider(&data1);
517 519
518 // Second data provider returns the expected content. 520 // Second data provider returns the expected content.
519 MockRead data_reads2[] = { 521 MockRead data_reads2[] = {
520 MockRead("HTTP/1.0 200 OK\r\n" 522 MockRead(
521 "Server: not-proxy\r\n\r\n"), 523 "HTTP/1.0 200 OK\r\n"
522 MockRead("content"), 524 "Server: not-proxy\r\n\r\n"),
523 MockRead(SYNCHRONOUS, OK), 525 MockRead("content"), MockRead(SYNCHRONOUS, OK),
524 }; 526 };
525 MockWrite data_writes2[] = { 527 MockWrite data_writes2[] = {
526 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" 528 MockWrite(
527 "Host: www.google.com\r\n" 529 "GET http://www.google.com/ HTTP/1.1\r\n"
528 "Proxy-Connection: keep-alive\r\n\r\n"), 530 "Host: www.google.com\r\n"
531 "Proxy-Connection: keep-alive\r\n\r\n"),
529 }; 532 };
530 533
531 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), 534 StaticSocketDataProvider data2(data_reads2,
532 data_writes2, arraysize(data_writes2)); 535 arraysize(data_reads2),
536 data_writes2,
537 arraysize(data_writes2));
533 mock_socket_factory_.AddSocketDataProvider(&data2); 538 mock_socket_factory_.AddSocketDataProvider(&data2);
534 539
535 TestCompletionCallback callback; 540 TestCompletionCallback callback;
536 541
537 HttpRequestInfo request_info; 542 HttpRequestInfo request_info;
538 request_info.url = GURL("http://www.google.com/"); 543 request_info.url = GURL("http://www.google.com/");
539 request_info.method = "GET"; 544 request_info.method = "GET";
540 request_info.load_flags = LOAD_NORMAL; 545 request_info.load_flags = LOAD_NORMAL;
541 546
542 scoped_ptr<HttpTransaction> trans; 547 scoped_ptr<HttpTransaction> trans;
543 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans); 548 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans);
544 EXPECT_EQ(OK, rv); 549 EXPECT_EQ(OK, rv);
545 550
546 rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); 551 rv = trans->Start(&request_info, callback.callback(), BoundNetLog());
547 if (rv == ERR_IO_PENDING) 552 if (rv == ERR_IO_PENDING)
548 rv = callback.WaitForResult(); 553 rv = callback.WaitForResult();
549 ASSERT_EQ(OK, rv); 554 ASSERT_EQ(OK, rv);
550 555
551 std::string contents; 556 std::string contents;
552 rv = ReadTransaction(trans.get(), &contents); 557 rv = ReadTransaction(trans.get(), &contents);
553 EXPECT_EQ(OK, rv); 558 EXPECT_EQ(OK, rv);
554 559
555 // We should obtain content from the second socket provider write 560 // We should obtain content from the second socket provider write
556 // corresponding to the fallback proxy. 561 // corresponding to the fallback proxy.
557 EXPECT_EQ("content", contents); 562 EXPECT_EQ("content", contents);
558 // We also have a server header here that isn't set by the proxy. 563 // We also have a server header here that isn't set by the proxy.
559 EXPECT_TRUE(trans->GetResponseInfo()->headers->HasHeaderValue( 564 EXPECT_TRUE(trans->GetResponseInfo()->headers->HasHeaderValue("server",
560 "server", "not-proxy")); 565 "not-proxy"));
561 // We should also observe the data reduction proxy in the retry list. 566 // We should also observe the data reduction proxy in the retry list.
562 ASSERT_EQ(1u, proxy_service_->proxy_retry_info().size()); 567 ASSERT_EQ(1u, proxy_service_->proxy_retry_info().size());
563 EXPECT_EQ(data_reduction_proxy, 568 EXPECT_EQ(data_reduction_proxy,
564 (*proxy_service_->proxy_retry_info().begin()).first); 569 (*proxy_service_->proxy_retry_info().begin()).first);
565 } 570 }
566 } 571 }
567 #endif // defined(SPDY_PROXY_AUTH_ORIGIN) 572 #endif // defined(SPDY_PROXY_AUTH_ORIGIN)
568 573
569 TEST_F(HttpNetworkLayerTest, ProxyBypassIgnoredOnDirectConnectionPac) { 574 TEST_F(HttpNetworkLayerTest, ProxyBypassIgnoredOnDirectConnectionPac) {
570 // Verify that a Chrome-Proxy header is ignored when returned from a directly 575 // Verify that a Chrome-Proxy header is ignored when returned from a directly
571 // connected origin server. 576 // connected origin server.
572 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult("DIRECT")); 577 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult("DIRECT"));
573 578
574 MockRead data_reads[] = { 579 MockRead data_reads[] = {
575 MockRead("HTTP/1.1 200 OK\r\n" 580 MockRead(
576 "Chrome-Proxy: bypass=0\r\n\r\n"), 581 "HTTP/1.1 200 OK\r\n"
577 MockRead("Bypass message"), 582 "Chrome-Proxy: bypass=0\r\n\r\n"),
578 MockRead(SYNCHRONOUS, OK), 583 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
579 }; 584 };
580 MockWrite data_writes[] = { 585 MockWrite data_writes[] = {
581 MockWrite("GET / HTTP/1.1\r\n" 586 MockWrite(
582 "Host: www.google.com\r\n" 587 "GET / HTTP/1.1\r\n"
583 "Connection: keep-alive\r\n\r\n"), 588 "Host: www.google.com\r\n"
589 "Connection: keep-alive\r\n\r\n"),
584 }; 590 };
585 StaticSocketDataProvider data1(data_reads, arraysize(data_reads), 591 StaticSocketDataProvider data1(
586 data_writes, arraysize(data_writes)); 592 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
587 mock_socket_factory_.AddSocketDataProvider(&data1); 593 mock_socket_factory_.AddSocketDataProvider(&data1);
588 TestCompletionCallback callback; 594 TestCompletionCallback callback;
589 595
590 HttpRequestInfo request_info; 596 HttpRequestInfo request_info;
591 request_info.url = GURL("http://www.google.com/"); 597 request_info.url = GURL("http://www.google.com/");
592 request_info.method = "GET"; 598 request_info.method = "GET";
593 request_info.load_flags = LOAD_NORMAL; 599 request_info.load_flags = LOAD_NORMAL;
594 600
595 scoped_ptr<HttpTransaction> trans; 601 scoped_ptr<HttpTransaction> trans;
596 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans); 602 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans);
(...skipping 16 matching lines...) Expand all
613 619
614 #if defined(SPDY_PROXY_AUTH_ORIGIN) 620 #if defined(SPDY_PROXY_AUTH_ORIGIN)
615 TEST_F(HttpNetworkLayerTest, ServerFallbackWithProxyTimedBypass) { 621 TEST_F(HttpNetworkLayerTest, ServerFallbackWithProxyTimedBypass) {
616 // Verify that a Chrome-Proxy: bypass=<seconds> header induces proxy 622 // Verify that a Chrome-Proxy: bypass=<seconds> header induces proxy
617 // fallback to a second proxy, if configured. 623 // fallback to a second proxy, if configured.
618 std::string bad_proxy = GetDataReductionProxy(); 624 std::string bad_proxy = GetDataReductionProxy();
619 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 625 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
620 "PROXY " + bad_proxy + "; PROXY good:8080")); 626 "PROXY " + bad_proxy + "; PROXY good:8080"));
621 627
622 MockRead data_reads[] = { 628 MockRead data_reads[] = {
623 MockRead("HTTP/1.1 200 OK\r\n" 629 MockRead(
624 "Connection: keep-alive\r\n" 630 "HTTP/1.1 200 OK\r\n"
625 "Chrome-Proxy: bypass=86400\r\n" 631 "Connection: keep-alive\r\n"
626 "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n"), 632 "Chrome-Proxy: bypass=86400\r\n"
627 MockRead("Bypass message"), 633 "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n"),
628 MockRead(SYNCHRONOUS, OK), 634 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
629 }; 635 };
630 636
631 TestProxyFallbackWithMockReads(bad_proxy, "", data_reads, 637 TestProxyFallbackWithMockReads(
632 arraysize(data_reads), 1u); 638 bad_proxy, "", data_reads, arraysize(data_reads), 1u);
633 EXPECT_EQ(base::TimeDelta::FromSeconds(86400), 639 EXPECT_EQ(base::TimeDelta::FromSeconds(86400),
634 (*proxy_service_->proxy_retry_info().begin()).second.current_delay); 640 (*proxy_service_->proxy_retry_info().begin()).second.current_delay);
635 } 641 }
636 642
637 TEST_F(HttpNetworkLayerTest, ServerFallbackWithWrongViaHeader) { 643 TEST_F(HttpNetworkLayerTest, ServerFallbackWithWrongViaHeader) {
638 // Verify that a Via header that lacks the Chrome-Proxy induces proxy fallback 644 // Verify that a Via header that lacks the Chrome-Proxy induces proxy fallback
639 // to a second proxy, if configured. 645 // to a second proxy, if configured.
640 std::string chrome_proxy = GetDataReductionProxy(); 646 std::string chrome_proxy = GetDataReductionProxy();
641 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 647 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
642 "PROXY " + chrome_proxy + "; PROXY good:8080")); 648 "PROXY " + chrome_proxy + "; PROXY good:8080"));
643 649
644 MockRead data_reads[] = { 650 MockRead data_reads[] = {
645 MockRead("HTTP/1.1 200 OK\r\n" 651 MockRead(
646 "Connection: keep-alive\r\n" 652 "HTTP/1.1 200 OK\r\n"
647 "Via: 1.0 some-other-proxy\r\n\r\n"), 653 "Connection: keep-alive\r\n"
648 MockRead("Bypass message"), 654 "Via: 1.0 some-other-proxy\r\n\r\n"),
649 MockRead(SYNCHRONOUS, OK), 655 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
650 }; 656 };
651 657
652 TestProxyFallbackWithMockReads(chrome_proxy, std::string(), data_reads, 658 TestProxyFallbackWithMockReads(
653 arraysize(data_reads), 1u); 659 chrome_proxy, std::string(), data_reads, arraysize(data_reads), 1u);
654 } 660 }
655 661
656 TEST_F(HttpNetworkLayerTest, ServerFallbackWithNoViaHeader) { 662 TEST_F(HttpNetworkLayerTest, ServerFallbackWithNoViaHeader) {
657 // Verify that the lack of a Via header induces proxy fallback to a second 663 // Verify that the lack of a Via header induces proxy fallback to a second
658 // proxy, if configured. 664 // proxy, if configured.
659 std::string chrome_proxy = GetDataReductionProxy(); 665 std::string chrome_proxy = GetDataReductionProxy();
660 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 666 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
661 "PROXY " + chrome_proxy + "; PROXY good:8080")); 667 "PROXY " + chrome_proxy + "; PROXY good:8080"));
662 668
663 MockRead data_reads[] = { 669 MockRead data_reads[] = {
664 MockRead("HTTP/1.1 200 OK\r\n" 670 MockRead(
665 "Connection: keep-alive\r\n\r\n"), 671 "HTTP/1.1 200 OK\r\n"
666 MockRead("Bypass message"), 672 "Connection: keep-alive\r\n\r\n"),
667 MockRead(SYNCHRONOUS, OK), 673 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
668 }; 674 };
669 675
670 TestProxyFallbackWithMockReads(chrome_proxy, std::string(), data_reads, 676 TestProxyFallbackWithMockReads(
671 arraysize(data_reads), 1u); 677 chrome_proxy, std::string(), data_reads, arraysize(data_reads), 1u);
672 } 678 }
673 679
674 TEST_F(HttpNetworkLayerTest, NoServerFallbackWith304Response) { 680 TEST_F(HttpNetworkLayerTest, NoServerFallbackWith304Response) {
675 // Verify that Chrome will not be induced to bypass the data reduction proxy 681 // Verify that Chrome will not be induced to bypass the data reduction proxy
676 // when the data reduction proxy via header is absent on a 304. 682 // when the data reduction proxy via header is absent on a 304.
677 std::string chrome_proxy = GetDataReductionProxy(); 683 std::string chrome_proxy = GetDataReductionProxy();
678 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 684 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
679 "PROXY " + chrome_proxy + "; PROXY good:8080")); 685 "PROXY " + chrome_proxy + "; PROXY good:8080"));
680 686
681 MockRead data_reads[] = { 687 MockRead data_reads[] = {
682 MockRead("HTTP/1.1 304 Not Modified\r\n" 688 MockRead(
683 "Connection: keep-alive\r\n\r\n"), 689 "HTTP/1.1 304 Not Modified\r\n"
684 MockRead(SYNCHRONOUS, OK), 690 "Connection: keep-alive\r\n\r\n"),
691 MockRead(SYNCHRONOUS, OK),
685 }; 692 };
686 693
687 TestProxyFallbackByMethodWithMockReads(chrome_proxy, std::string(), 694 TestProxyFallbackByMethodWithMockReads(chrome_proxy,
688 data_reads, arraysize(data_reads), 695 std::string(),
689 "GET", std::string(), false, 0); 696 data_reads,
697 arraysize(data_reads),
698 "GET",
699 std::string(),
700 false,
701 0);
690 } 702 }
691 703
692 TEST_F(HttpNetworkLayerTest, NoServerFallbackWithChainedViaHeader) { 704 TEST_F(HttpNetworkLayerTest, NoServerFallbackWithChainedViaHeader) {
693 // Verify that Chrome will not be induced to bypass the data reduction proxy 705 // Verify that Chrome will not be induced to bypass the data reduction proxy
694 // when the data reduction proxy via header is present, even if that header 706 // when the data reduction proxy via header is present, even if that header
695 // is chained. 707 // is chained.
696 std::string chrome_proxy = GetDataReductionProxy(); 708 std::string chrome_proxy = GetDataReductionProxy();
697 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 709 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
698 "PROXY " + chrome_proxy + "; PROXY good:8080")); 710 "PROXY " + chrome_proxy + "; PROXY good:8080"));
699 711
700 MockRead data_reads[] = { 712 MockRead data_reads[] = {
701 MockRead("HTTP/1.1 200 OK\r\n" 713 MockRead(
702 "Connection: keep-alive\r\n" 714 "HTTP/1.1 200 OK\r\n"
703 "Via: 1.1 Chrome-Compression-Proxy, 1.0 some-other-proxy\r\n\r\n"), 715 "Connection: keep-alive\r\n"
704 MockRead("Bypass message"), 716 "Via: 1.1 Chrome-Compression-Proxy, 1.0 some-other-proxy\r\n\r\n"),
705 MockRead(SYNCHRONOUS, OK), 717 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
706 }; 718 };
707 719
708 TestProxyFallbackByMethodWithMockReads(chrome_proxy, std::string(), 720 TestProxyFallbackByMethodWithMockReads(chrome_proxy,
709 data_reads, arraysize(data_reads), 721 std::string(),
710 "GET", "Bypass message", false, 0); 722 data_reads,
723 arraysize(data_reads),
724 "GET",
725 "Bypass message",
726 false,
727 0);
711 } 728 }
712 729
713 TEST_F(HttpNetworkLayerTest, NoServerFallbackWithDeprecatedViaHeader) { 730 TEST_F(HttpNetworkLayerTest, NoServerFallbackWithDeprecatedViaHeader) {
714 // Verify that Chrome will not be induced to bypass the data reduction proxy 731 // Verify that Chrome will not be induced to bypass the data reduction proxy
715 // when the deprecated data reduction proxy via header is present, even if 732 // when the deprecated data reduction proxy via header is present, even if
716 // that header is chained. 733 // that header is chained.
717 std::string chrome_proxy = GetDataReductionProxy(); 734 std::string chrome_proxy = GetDataReductionProxy();
718 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 735 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
719 "PROXY " + chrome_proxy + "; PROXY good:8080")); 736 "PROXY " + chrome_proxy + "; PROXY good:8080"));
720 737
721 MockRead data_reads[] = { 738 MockRead data_reads[] = {
722 MockRead("HTTP/1.1 200 OK\r\n" 739 MockRead(
723 "Connection: keep-alive\r\n" 740 "HTTP/1.1 200 OK\r\n"
724 "Via: 1.1 Chrome Compression Proxy\r\n\r\n"), 741 "Connection: keep-alive\r\n"
725 MockRead("Bypass message"), 742 "Via: 1.1 Chrome Compression Proxy\r\n\r\n"),
726 MockRead(SYNCHRONOUS, OK), 743 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
727 }; 744 };
728 745
729 TestProxyFallbackByMethodWithMockReads(chrome_proxy, std::string(), 746 TestProxyFallbackByMethodWithMockReads(chrome_proxy,
730 data_reads, arraysize(data_reads), 747 std::string(),
731 "GET", "Bypass message", false, 0); 748 data_reads,
749 arraysize(data_reads),
750 "GET",
751 "Bypass message",
752 false,
753 0);
732 } 754 }
733 755
734 #if defined(DATA_REDUCTION_FALLBACK_HOST) 756 #if defined(DATA_REDUCTION_FALLBACK_HOST)
735 TEST_F(HttpNetworkLayerTest, ServerFallbackWithProxyTimedBypassAll) { 757 TEST_F(HttpNetworkLayerTest, ServerFallbackWithProxyTimedBypassAll) {
736 // Verify that a Chrome-Proxy: block=<seconds> header bypasses a 758 // Verify that a Chrome-Proxy: block=<seconds> header bypasses a
737 // a configured Chrome-Proxy and fallback and induces proxy fallback to a 759 // a configured Chrome-Proxy and fallback and induces proxy fallback to a
738 // third proxy, if configured. 760 // third proxy, if configured.
739 std::string bad_proxy = GetDataReductionProxy(); 761 std::string bad_proxy = GetDataReductionProxy();
740 std::string fallback_proxy = GetChromeFallbackProxy(); 762 std::string fallback_proxy = GetChromeFallbackProxy();
741 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult( 763 ConfigureTestDependencies(ProxyService::CreateFixedFromPacResult(
742 "PROXY " + bad_proxy + "; PROXY " + fallback_proxy + 764 "PROXY " + bad_proxy + "; PROXY " + fallback_proxy +
743 "; PROXY good:8080")); 765 "; PROXY good:8080"));
744 766
745 MockRead data_reads[] = { 767 MockRead data_reads[] = {
746 MockRead("HTTP/1.1 200 OK\r\n" 768 MockRead(
747 "Connection: keep-alive\r\n" 769 "HTTP/1.1 200 OK\r\n"
748 "Chrome-Proxy: block=86400\r\n" 770 "Connection: keep-alive\r\n"
749 "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n"), 771 "Chrome-Proxy: block=86400\r\n"
750 MockRead("Bypass message"), 772 "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n"),
751 MockRead(SYNCHRONOUS, OK), 773 MockRead("Bypass message"), MockRead(SYNCHRONOUS, OK),
752 }; 774 };
753 775
754 TestProxyFallbackWithMockReads(bad_proxy, fallback_proxy, data_reads, 776 TestProxyFallbackWithMockReads(
755 arraysize(data_reads), 2u); 777 bad_proxy, fallback_proxy, data_reads, arraysize(data_reads), 2u);
756 EXPECT_EQ(base::TimeDelta::FromSeconds(86400), 778 EXPECT_EQ(base::TimeDelta::FromSeconds(86400),
757 (*proxy_service_->proxy_retry_info().begin()).second.current_delay); 779 (*proxy_service_->proxy_retry_info().begin()).second.current_delay);
758 } 780 }
759 #endif // defined(DATA_REDUCTION_FALLBACK_HOST) 781 #endif // defined(DATA_REDUCTION_FALLBACK_HOST)
760 #endif // defined(SPDY_PROXY_AUTH_ORIGIN) 782 #endif // defined(SPDY_PROXY_AUTH_ORIGIN)
761 783
762 TEST_F(HttpNetworkLayerTest, NetworkVerified) { 784 TEST_F(HttpNetworkLayerTest, NetworkVerified) {
763 MockRead data_reads[] = { 785 MockRead data_reads[] = {
764 MockRead("HTTP/1.0 200 OK\r\n\r\n"), 786 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"),
765 MockRead("hello world"), 787 MockRead(SYNCHRONOUS, OK),
766 MockRead(SYNCHRONOUS, OK),
767 }; 788 };
768 MockWrite data_writes[] = { 789 MockWrite data_writes[] = {
769 MockWrite("GET / HTTP/1.1\r\n" 790 MockWrite(
770 "Host: www.google.com\r\n" 791 "GET / HTTP/1.1\r\n"
771 "Connection: keep-alive\r\n" 792 "Host: www.google.com\r\n"
772 "User-Agent: Foo/1.0\r\n\r\n"), 793 "Connection: keep-alive\r\n"
794 "User-Agent: Foo/1.0\r\n\r\n"),
773 }; 795 };
774 StaticSocketDataProvider data(data_reads, arraysize(data_reads), 796 StaticSocketDataProvider data(
775 data_writes, arraysize(data_writes)); 797 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
776 mock_socket_factory_.AddSocketDataProvider(&data); 798 mock_socket_factory_.AddSocketDataProvider(&data);
777 799
778 TestCompletionCallback callback; 800 TestCompletionCallback callback;
779 801
780 HttpRequestInfo request_info; 802 HttpRequestInfo request_info;
781 request_info.url = GURL("http://www.google.com/"); 803 request_info.url = GURL("http://www.google.com/");
782 request_info.method = "GET"; 804 request_info.method = "GET";
783 request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, 805 request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent,
784 "Foo/1.0"); 806 "Foo/1.0");
785 request_info.load_flags = LOAD_NORMAL; 807 request_info.load_flags = LOAD_NORMAL;
786 808
787 scoped_ptr<HttpTransaction> trans; 809 scoped_ptr<HttpTransaction> trans;
788 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans); 810 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans);
789 EXPECT_EQ(OK, rv); 811 EXPECT_EQ(OK, rv);
790 812
791 rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); 813 rv = trans->Start(&request_info, callback.callback(), BoundNetLog());
792 ASSERT_EQ(OK, callback.GetResult(rv)); 814 ASSERT_EQ(OK, callback.GetResult(rv));
793 815
794 EXPECT_TRUE(trans->GetResponseInfo()->network_accessed); 816 EXPECT_TRUE(trans->GetResponseInfo()->network_accessed);
795 } 817 }
796 818
797 TEST_F(HttpNetworkLayerTest, NetworkUnVerified) { 819 TEST_F(HttpNetworkLayerTest, NetworkUnVerified) {
798 MockRead data_reads[] = { 820 MockRead data_reads[] = {
799 MockRead(ASYNC, ERR_CONNECTION_RESET), 821 MockRead(ASYNC, ERR_CONNECTION_RESET),
800 }; 822 };
801 MockWrite data_writes[] = { 823 MockWrite data_writes[] = {
802 MockWrite("GET / HTTP/1.1\r\n" 824 MockWrite(
803 "Host: www.google.com\r\n" 825 "GET / HTTP/1.1\r\n"
804 "Connection: keep-alive\r\n" 826 "Host: www.google.com\r\n"
805 "User-Agent: Foo/1.0\r\n\r\n"), 827 "Connection: keep-alive\r\n"
828 "User-Agent: Foo/1.0\r\n\r\n"),
806 }; 829 };
807 StaticSocketDataProvider data(data_reads, arraysize(data_reads), 830 StaticSocketDataProvider data(
808 data_writes, arraysize(data_writes)); 831 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes));
809 mock_socket_factory_.AddSocketDataProvider(&data); 832 mock_socket_factory_.AddSocketDataProvider(&data);
810 833
811 TestCompletionCallback callback; 834 TestCompletionCallback callback;
812 835
813 HttpRequestInfo request_info; 836 HttpRequestInfo request_info;
814 request_info.url = GURL("http://www.google.com/"); 837 request_info.url = GURL("http://www.google.com/");
815 request_info.method = "GET"; 838 request_info.method = "GET";
816 request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, 839 request_info.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent,
817 "Foo/1.0"); 840 "Foo/1.0");
818 request_info.load_flags = LOAD_NORMAL; 841 request_info.load_flags = LOAD_NORMAL;
819 842
820 scoped_ptr<HttpTransaction> trans; 843 scoped_ptr<HttpTransaction> trans;
821 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans); 844 int rv = factory_->CreateTransaction(DEFAULT_PRIORITY, &trans);
822 EXPECT_EQ(OK, rv); 845 EXPECT_EQ(OK, rv);
823 846
824 rv = trans->Start(&request_info, callback.callback(), BoundNetLog()); 847 rv = trans->Start(&request_info, callback.callback(), BoundNetLog());
825 ASSERT_EQ(ERR_CONNECTION_RESET, callback.GetResult(rv)); 848 ASSERT_EQ(ERR_CONNECTION_RESET, callback.GetResult(rv));
826 849
827 // If the response info is null, that means that any consumer won't 850 // If the response info is null, that means that any consumer won't
828 // see the network accessed bit set. 851 // see the network accessed bit set.
829 EXPECT_EQ(NULL, trans->GetResponseInfo()); 852 EXPECT_EQ(NULL, trans->GetResponseInfo());
830 } 853 }
831 854
832 } // namespace 855 } // namespace
833 856
834 } // namespace net 857 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698