OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <shlobj.h> | 8 #include <shlobj.h> |
9 #include <windows.h> | 9 #include <windows.h> |
10 #endif | 10 #endif |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
276 | 276 |
277 class URLRequestTestHTTP : public URLRequestTest { | 277 class URLRequestTestHTTP : public URLRequestTest { |
278 public: | 278 public: |
279 URLRequestTestHTTP() | 279 URLRequestTestHTTP() |
280 : test_server_(TestServer::TYPE_HTTP, | 280 : test_server_(TestServer::TYPE_HTTP, |
281 FilePath(FILE_PATH_LITERAL( | 281 FilePath(FILE_PATH_LITERAL( |
282 "net/data/url_request_unittest"))) { | 282 "net/data/url_request_unittest"))) { |
283 } | 283 } |
284 | 284 |
285 protected: | 285 protected: |
286 // Requests |redirect_url|, which must return a HTTP 3xx redirect. | |
287 // |request_method| is the method to use for the initial request. | |
288 // |redirect_method| is the method that is expected to be used for the second | |
289 // request, after redirection. | |
290 // If |include_data| is true, data is uploaded with the request. The | |
291 // response body is expected to match it exactly, if and only if | |
292 // |request_method| == |redirect_method|. | |
293 void HTTPRedirectMethodTest(const GURL& redirect_url, | |
294 const std::string& request_method, | |
295 const std::string& redirect_method, | |
296 bool include_data) { | |
297 LOG(WARNING) << "Request method: " << request_method; | |
willchan no longer on Chromium
2011/10/25 15:11:36
Is this necessary?
mmenke
2011/10/25 15:36:06
I don't mind removing it, but if any check fails o
willchan no longer on Chromium
2011/10/25 15:49:13
How about only printing it out if there's a test f
mmenke
2011/10/25 16:09:42
Done.
| |
298 const char kData[] = "hello world"; | |
willchan no longer on Chromium
2011/10/25 15:11:36
static
mmenke
2011/10/25 15:36:06
Done. Not sure why this file doesn't just use con
willchan no longer on Chromium
2011/10/25 15:49:13
Would need to be const char* const if we wanted to
| |
299 TestDelegate d; | |
300 TestURLRequest req(redirect_url, &d); | |
301 req.set_context(default_context_); | |
302 req.set_method(request_method); | |
303 if (include_data) { | |
304 req.set_upload(CreateSimpleUploadData(kData).get()); | |
305 HttpRequestHeaders headers; | |
306 headers.SetHeader(HttpRequestHeaders::kContentLength, | |
307 base::UintToString(arraysize(kData) - 1)); | |
308 req.SetExtraRequestHeaders(headers); | |
309 } | |
310 req.Start(); | |
311 MessageLoop::current()->Run(); | |
312 EXPECT_EQ(redirect_method, req.method()); | |
313 EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status()); | |
314 EXPECT_EQ(OK, req.status().error()); | |
315 if (include_data) { | |
316 if (request_method == redirect_method) { | |
317 EXPECT_EQ(kData, d.data_received()); | |
318 } else { | |
319 EXPECT_NE(kData, d.data_received()); | |
320 } | |
321 } | |
322 } | |
323 | |
286 void HTTPUploadDataOperationTest(const std::string& method) { | 324 void HTTPUploadDataOperationTest(const std::string& method) { |
287 const int kMsgSize = 20000; // multiple of 10 | 325 const int kMsgSize = 20000; // multiple of 10 |
288 const int kIterations = 50; | 326 const int kIterations = 50; |
289 char *uploadBytes = new char[kMsgSize+1]; | 327 char *uploadBytes = new char[kMsgSize+1]; |
290 char *ptr = uploadBytes; | 328 char *ptr = uploadBytes; |
291 char marker = 'a'; | 329 char marker = 'a'; |
292 for (int idx = 0; idx < kMsgSize/10; idx++) { | 330 for (int idx = 0; idx < kMsgSize/10; idx++) { |
293 memcpy(ptr, "----------", 10); | 331 memcpy(ptr, "----------", 10); |
294 ptr += 10; | 332 ptr += 10; |
295 if (idx % 100 == 0) { | 333 if (idx % 100 == 0) { |
(...skipping 2140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2436 EXPECT_FALSE(ContainsString(data, "Content-Length:")); | 2474 EXPECT_FALSE(ContainsString(data, "Content-Length:")); |
2437 EXPECT_FALSE(ContainsString(data, "Content-Type:")); | 2475 EXPECT_FALSE(ContainsString(data, "Content-Type:")); |
2438 EXPECT_FALSE(ContainsString(data, "Origin:")); | 2476 EXPECT_FALSE(ContainsString(data, "Origin:")); |
2439 | 2477 |
2440 // These extra request headers should not have been stripped. | 2478 // These extra request headers should not have been stripped. |
2441 EXPECT_TRUE(ContainsString(data, "Accept:")); | 2479 EXPECT_TRUE(ContainsString(data, "Accept:")); |
2442 EXPECT_TRUE(ContainsString(data, "Accept-Language:")); | 2480 EXPECT_TRUE(ContainsString(data, "Accept-Language:")); |
2443 EXPECT_TRUE(ContainsString(data, "Accept-Charset:")); | 2481 EXPECT_TRUE(ContainsString(data, "Accept-Charset:")); |
2444 } | 2482 } |
2445 | 2483 |
2446 TEST_F(URLRequestTestHTTP, Post307RedirectPost) { | 2484 // The following tests check that we handle mutating the request method for |
2485 // HTTP redirects as expected. See http://crbug.com/56373. | |
2486 | |
2487 TEST_F(URLRequestTestHTTP, Redirect301Tests) { | |
2447 ASSERT_TRUE(test_server_.Start()); | 2488 ASSERT_TRUE(test_server_.Start()); |
2448 | 2489 |
2449 const char kData[] = "hello world"; | 2490 const GURL url = test_server_.GetURL("files/redirect301-to-echo"); |
2450 | 2491 |
2451 TestDelegate d; | 2492 HTTPRedirectMethodTest(url, "POST", "GET", true); |
2452 TestURLRequest req(test_server_.GetURL("files/redirect307-to-echo"), &d); | 2493 HTTPRedirectMethodTest(url, "PUT", "PUT", true); |
2453 req.set_context(default_context_); | 2494 } |
2454 req.set_method("POST"); | 2495 |
2455 req.set_upload(CreateSimpleUploadData(kData).get()); | 2496 TEST_F(URLRequestTestHTTP, Redirect302Tests) { |
2456 HttpRequestHeaders headers; | 2497 ASSERT_TRUE(test_server_.Start()); |
2457 headers.SetHeader(HttpRequestHeaders::kContentLength, | 2498 |
2458 base::UintToString(arraysize(kData) - 1)); | 2499 const GURL url = test_server_.GetURL("files/redirect302-to-echo"); |
2459 req.SetExtraRequestHeaders(headers); | 2500 |
2460 req.Start(); | 2501 HTTPRedirectMethodTest(url, "POST", "GET", true); |
2461 MessageLoop::current()->Run(); | 2502 HTTPRedirectMethodTest(url, "PUT", "PUT", true); |
2462 EXPECT_EQ("POST", req.method()); | 2503 } |
2463 EXPECT_EQ(kData, d.data_received()); | 2504 |
2505 TEST_F(URLRequestTestHTTP, Redirect303Tests) { | |
2506 ASSERT_TRUE(test_server_.Start()); | |
2507 | |
2508 const GURL url = test_server_.GetURL("files/redirect303-to-echo"); | |
2509 | |
2510 HTTPRedirectMethodTest(url, "POST", "GET", true); | |
2511 HTTPRedirectMethodTest(url, "PUT", "GET", true); | |
2512 } | |
2513 | |
2514 TEST_F(URLRequestTestHTTP, Redirect307Tests) { | |
2515 ASSERT_TRUE(test_server_.Start()); | |
2516 | |
2517 const GURL url = test_server_.GetURL("files/redirect307-to-echo"); | |
2518 | |
2519 HTTPRedirectMethodTest(url, "POST", "POST", true); | |
2520 HTTPRedirectMethodTest(url, "PUT", "PUT", true); | |
2464 } | 2521 } |
2465 | 2522 |
2466 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { | 2523 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { |
2467 ASSERT_TRUE(test_server_.Start()); | 2524 ASSERT_TRUE(test_server_.Start()); |
2468 | 2525 |
2469 const char kData[] = "hello world"; | 2526 const char kData[] = "hello world"; |
2470 | 2527 |
2471 TestDelegate d; | 2528 TestDelegate d; |
2472 TestURLRequest req(test_server_.GetURL("empty.html"), &d); | 2529 TestURLRequest req(test_server_.GetURL("empty.html"), &d); |
2473 req.set_context(default_context_); | 2530 req.set_context(default_context_); |
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3572 req.SetExtraRequestHeaders(headers); | 3629 req.SetExtraRequestHeaders(headers); |
3573 req.Start(); | 3630 req.Start(); |
3574 MessageLoop::current()->Run(); | 3631 MessageLoop::current()->Run(); |
3575 // If the net tests are being run with ChromeFrame then we need to allow for | 3632 // If the net tests are being run with ChromeFrame then we need to allow for |
3576 // the 'chromeframe' suffix which is added to the user agent before the | 3633 // the 'chromeframe' suffix which is added to the user agent before the |
3577 // closing parentheses. | 3634 // closing parentheses. |
3578 EXPECT_TRUE(StartsWithASCII(d.data_received(), "Lynx (textmode", true)); | 3635 EXPECT_TRUE(StartsWithASCII(d.data_received(), "Lynx (textmode", true)); |
3579 } | 3636 } |
3580 | 3637 |
3581 } // namespace net | 3638 } // namespace net |
OLD | NEW |