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

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: Normal browsers are normal no longer (Err...or something) Created 9 years, 1 month 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
« no previous file with comments | « net/url_request/url_request.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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 static const char kData[] = "hello world";
298 TestDelegate d;
299 TestURLRequest req(redirect_url, &d);
300 req.set_context(default_context_);
301 req.set_method(request_method);
302 if (include_data) {
303 req.set_upload(CreateSimpleUploadData(kData).get());
304 HttpRequestHeaders headers;
305 headers.SetHeader(HttpRequestHeaders::kContentLength,
306 base::UintToString(arraysize(kData) - 1));
307 req.SetExtraRequestHeaders(headers);
308 }
309 req.Start();
310 MessageLoop::current()->Run();
311 EXPECT_EQ(redirect_method, req.method());
312 EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status());
313 EXPECT_EQ(OK, req.status().error());
314 if (include_data) {
315 if (request_method == redirect_method) {
316 EXPECT_EQ(kData, d.data_received());
317 } else {
318 EXPECT_NE(kData, d.data_received());
319 }
320 }
321 if (HasFailure())
322 LOG(WARNING) << "Request method was: " << request_method;
323 }
324
286 void HTTPUploadDataOperationTest(const std::string& method) { 325 void HTTPUploadDataOperationTest(const std::string& method) {
287 const int kMsgSize = 20000; // multiple of 10 326 const int kMsgSize = 20000; // multiple of 10
288 const int kIterations = 50; 327 const int kIterations = 50;
289 char *uploadBytes = new char[kMsgSize+1]; 328 char *uploadBytes = new char[kMsgSize+1];
290 char *ptr = uploadBytes; 329 char *ptr = uploadBytes;
291 char marker = 'a'; 330 char marker = 'a';
292 for (int idx = 0; idx < kMsgSize/10; idx++) { 331 for (int idx = 0; idx < kMsgSize/10; idx++) {
293 memcpy(ptr, "----------", 10); 332 memcpy(ptr, "----------", 10);
294 ptr += 10; 333 ptr += 10;
295 if (idx % 100 == 0) { 334 if (idx % 100 == 0) {
(...skipping 2140 matching lines...) Expand 10 before | Expand all | Expand 10 after
2436 EXPECT_FALSE(ContainsString(data, "Content-Length:")); 2475 EXPECT_FALSE(ContainsString(data, "Content-Length:"));
2437 EXPECT_FALSE(ContainsString(data, "Content-Type:")); 2476 EXPECT_FALSE(ContainsString(data, "Content-Type:"));
2438 EXPECT_FALSE(ContainsString(data, "Origin:")); 2477 EXPECT_FALSE(ContainsString(data, "Origin:"));
2439 2478
2440 // These extra request headers should not have been stripped. 2479 // These extra request headers should not have been stripped.
2441 EXPECT_TRUE(ContainsString(data, "Accept:")); 2480 EXPECT_TRUE(ContainsString(data, "Accept:"));
2442 EXPECT_TRUE(ContainsString(data, "Accept-Language:")); 2481 EXPECT_TRUE(ContainsString(data, "Accept-Language:"));
2443 EXPECT_TRUE(ContainsString(data, "Accept-Charset:")); 2482 EXPECT_TRUE(ContainsString(data, "Accept-Charset:"));
2444 } 2483 }
2445 2484
2446 TEST_F(URLRequestTestHTTP, Post307RedirectPost) { 2485 // The following tests check that we handle mutating the request method for
2486 // HTTP redirects as expected. See http://crbug.com/56373.
2487
2488 TEST_F(URLRequestTestHTTP, Redirect301Tests) {
2447 ASSERT_TRUE(test_server_.Start()); 2489 ASSERT_TRUE(test_server_.Start());
2448 2490
2449 const char kData[] = "hello world"; 2491 const GURL url = test_server_.GetURL("files/redirect301-to-echo");
2450 2492
2451 TestDelegate d; 2493 HTTPRedirectMethodTest(url, "POST", "GET", true);
2452 TestURLRequest req(test_server_.GetURL("files/redirect307-to-echo"), &d); 2494 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
2453 req.set_context(default_context_); 2495 }
2454 req.set_method("POST"); 2496
2455 req.set_upload(CreateSimpleUploadData(kData).get()); 2497 TEST_F(URLRequestTestHTTP, Redirect302Tests) {
2456 HttpRequestHeaders headers; 2498 ASSERT_TRUE(test_server_.Start());
2457 headers.SetHeader(HttpRequestHeaders::kContentLength, 2499
2458 base::UintToString(arraysize(kData) - 1)); 2500 const GURL url = test_server_.GetURL("files/redirect302-to-echo");
2459 req.SetExtraRequestHeaders(headers); 2501
2460 req.Start(); 2502 HTTPRedirectMethodTest(url, "POST", "GET", true);
2461 MessageLoop::current()->Run(); 2503 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
2462 EXPECT_EQ("POST", req.method()); 2504 }
2463 EXPECT_EQ(kData, d.data_received()); 2505
2506 TEST_F(URLRequestTestHTTP, Redirect303Tests) {
2507 ASSERT_TRUE(test_server_.Start());
2508
2509 const GURL url = test_server_.GetURL("files/redirect303-to-echo");
2510
2511 HTTPRedirectMethodTest(url, "POST", "GET", true);
2512 HTTPRedirectMethodTest(url, "PUT", "GET", true);
2513 }
2514
2515 TEST_F(URLRequestTestHTTP, Redirect307Tests) {
2516 ASSERT_TRUE(test_server_.Start());
2517
2518 const GURL url = test_server_.GetURL("files/redirect307-to-echo");
2519
2520 HTTPRedirectMethodTest(url, "POST", "POST", true);
2521 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
2464 } 2522 }
2465 2523
2466 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { 2524 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) {
2467 ASSERT_TRUE(test_server_.Start()); 2525 ASSERT_TRUE(test_server_.Start());
2468 2526
2469 const char kData[] = "hello world"; 2527 const char kData[] = "hello world";
2470 2528
2471 TestDelegate d; 2529 TestDelegate d;
2472 TestURLRequest req(test_server_.GetURL("empty.html"), &d); 2530 TestURLRequest req(test_server_.GetURL("empty.html"), &d);
2473 req.set_context(default_context_); 2531 req.set_context(default_context_);
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
3572 req.SetExtraRequestHeaders(headers); 3630 req.SetExtraRequestHeaders(headers);
3573 req.Start(); 3631 req.Start();
3574 MessageLoop::current()->Run(); 3632 MessageLoop::current()->Run();
3575 // If the net tests are being run with ChromeFrame then we need to allow for 3633 // 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 3634 // the 'chromeframe' suffix which is added to the user agent before the
3577 // closing parentheses. 3635 // closing parentheses.
3578 EXPECT_TRUE(StartsWithASCII(d.data_received(), "Lynx (textmode", true)); 3636 EXPECT_TRUE(StartsWithASCII(d.data_received(), "Lynx (textmode", true));
3579 } 3637 }
3580 3638
3581 } // namespace net 3639 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698