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

Side by Side Diff: net/url_request/url_request_unittest.cc

Issue 8375002: Preserve non-POST methods on 301/302 requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Default to changing method Created 9 years, 2 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) 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
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 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;
298 const char kData[] = "hello world";
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
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
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
OLDNEW
« net/url_request/url_request.cc ('K') | « net/url_request/url_request.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698