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

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

Issue 25217002: net: Reset UploadDataStream on HttpNetworkTransaction destruction (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 7753 matching lines...) Expand 10 before | Expand all | Expand 10 after
7764 7764
7765 response = trans->GetResponseInfo(); 7765 response = trans->GetResponseInfo();
7766 ASSERT_TRUE(response != NULL); 7766 ASSERT_TRUE(response != NULL);
7767 EXPECT_TRUE(response->headers.get() != NULL); 7767 EXPECT_TRUE(response->headers.get() != NULL);
7768 EXPECT_TRUE(response->auth_challenge.get() == NULL); 7768 EXPECT_TRUE(response->auth_challenge.get() == NULL);
7769 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 7769 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
7770 7770
7771 base::DeleteFile(temp_file, false); 7771 base::DeleteFile(temp_file, false);
7772 } 7772 }
7773 7773
7774 TEST_P(HttpNetworkTransactionTest, CancelDuringInitRequestBody) {
7775 class FakeUploadElementReader : public UploadElementReader {
7776 public:
7777 FakeUploadElementReader() {}
7778 virtual ~FakeUploadElementReader() {}
7779
7780 const CompletionCallback& callback() const { return callback_; }
7781
7782 // UploadElementReader overrides:
7783 virtual int Init(const CompletionCallback& callback) OVERRIDE {
7784 callback_ = callback;
7785 return ERR_IO_PENDING;
7786 }
7787 virtual uint64 GetContentLength() const OVERRIDE { return 0; }
7788 virtual uint64 BytesRemaining() const OVERRIDE { return 0; }
7789 virtual int Read(IOBuffer* buf,
7790 int buf_length,
7791 const CompletionCallback& callback) OVERRIDE {
7792 return ERR_FAILED;
7793 }
7794
7795 private:
7796 CompletionCallback callback_;
7797 };
7798
7799 FakeUploadElementReader* fake_reader = new FakeUploadElementReader;
7800 ScopedVector<UploadElementReader> element_readers;
7801 element_readers.push_back(fake_reader);
7802 UploadDataStream upload_data_stream(element_readers.Pass(), 0);
7803
7804 HttpRequestInfo request;
7805 request.method = "POST";
7806 request.url = GURL("http://www.google.com/upload");
7807 request.upload_data_stream = &upload_data_stream;
7808 request.load_flags = 0;
7809
7810 scoped_ptr<HttpTransaction> trans(
7811 new HttpNetworkTransaction(DEFAULT_PRIORITY,
7812 CreateSession(&session_deps_)));
7813
7814 StaticSocketDataProvider data;
7815 session_deps_.socket_factory->AddSocketDataProvider(&data);
7816
7817 TestCompletionCallback callback1;
mmenke 2013/10/02 01:02:54 nit: There's no callback2, so "callback" should b
hashimoto 2013/10/02 03:45:35 Done.
7818 int rv = trans->Start(&request, callback1.callback(), BoundNetLog());
7819 EXPECT_EQ(ERR_IO_PENDING, rv);
7820 base::MessageLoop::current()->RunUntilIdle();
7821
7822 // Transaction is pending on request body initialization.
7823 ASSERT_FALSE(fake_reader->callback().is_null());
7824
7825 // Return Init()'s result after the transaction gets destroyed.
7826 trans.reset();
7827 fake_reader->callback().Run(OK); // Should not crash.
7828 }
7829
7774 // Tests that changes to Auth realms are treated like auth rejections. 7830 // Tests that changes to Auth realms are treated like auth rejections.
7775 TEST_P(HttpNetworkTransactionTest, ChangeAuthRealms) { 7831 TEST_P(HttpNetworkTransactionTest, ChangeAuthRealms) {
7776 7832
7777 HttpRequestInfo request; 7833 HttpRequestInfo request;
7778 request.method = "GET"; 7834 request.method = "GET";
7779 request.url = GURL("http://www.google.com/"); 7835 request.url = GURL("http://www.google.com/");
7780 request.load_flags = 0; 7836 request.load_flags = 0;
7781 7837
7782 // First transaction will request a resource and receive a Basic challenge 7838 // First transaction will request a resource and receive a Basic challenge
7783 // with realm="first_realm". 7839 // with realm="first_realm".
(...skipping 4382 matching lines...) Expand 10 before | Expand all | Expand 10 after
12166 // established, to let the HTTP request start. 12222 // established, to let the HTTP request start.
12167 ASSERT_EQ(OK, http_callback.WaitForResult()); 12223 ASSERT_EQ(OK, http_callback.WaitForResult());
12168 std::string response_data; 12224 std::string response_data;
12169 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); 12225 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data));
12170 EXPECT_EQ("falafel", response_data); 12226 EXPECT_EQ("falafel", response_data);
12171 12227
12172 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); 12228 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session));
12173 } 12229 }
12174 12230
12175 } // namespace net 12231 } // namespace net
OLDNEW
« net/http/http_network_transaction.cc ('K') | « net/http/http_network_transaction.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698