summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-29 08:45:47 +0000
committerkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-29 08:45:47 +0000
commit0958c3d5447541feaaca2de8421b3a3908e94b99 (patch)
treeb724c7e100e02940bcb7a87e714ecec7902b7af0 /net
parent336721ebed61ccc340425a603fa794f546494bb7 (diff)
downloadchromium_src-0958c3d5447541feaaca2de8421b3a3908e94b99.zip
chromium_src-0958c3d5447541feaaca2de8421b3a3908e94b99.tar.gz
chromium_src-0958c3d5447541feaaca2de8421b3a3908e94b99.tar.bz2
Allow PUT and POST with empty body in URLFetcher.
This is needed to upload an empty file using Google Documents List API version 3.0. Also, it is properly supported in the underlying net/ layer (see, e.g., HttpNetworkTransaction::BuildRequestHeaders). BUG=134261, 132968 TEST=net_unittests --gtest_filter='*URLFetcherEmptyPostTest*' Review URL: https://chromiumcodereview.appspot.com/10656043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@144886 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/url_request/url_fetcher_core.cc1
-rw-r--r--net/url_request/url_fetcher_impl_unittest.cc41
2 files changed, 41 insertions, 1 deletions
diff --git a/net/url_request/url_fetcher_core.cc b/net/url_request/url_fetcher_core.cc
index b90d82b..6041e0c 100644
--- a/net/url_request/url_fetcher_core.cc
+++ b/net/url_request/url_fetcher_core.cc
@@ -688,7 +688,6 @@ void URLFetcherCore::StartURLRequest() {
case URLFetcher::POST:
case URLFetcher::PUT:
- DCHECK(!upload_content_.empty() || is_chunked_upload_);
DCHECK(!upload_content_type_.empty());
request_->set_method(
diff --git a/net/url_request/url_fetcher_impl_unittest.cc b/net/url_request/url_fetcher_impl_unittest.cc
index b7eba37..2a2086f 100644
--- a/net/url_request/url_fetcher_impl_unittest.cc
+++ b/net/url_request/url_fetcher_impl_unittest.cc
@@ -173,6 +173,16 @@ class URLFetcherPostTest : public URLFetcherTest {
virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
};
+// Version of URLFetcherTest that does a POST instead with empty upload body
+class URLFetcherEmptyPostTest : public URLFetcherTest {
+ public:
+ // URLFetcherTest override.
+ virtual void CreateFetcher(const GURL& url) OVERRIDE;
+
+ // URLFetcherDelegate
+ virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
+};
+
// Version of URLFetcherTest that tests download progress reports.
class URLFetcherDownloadProgressTest : public URLFetcherTest {
public:
@@ -409,6 +419,27 @@ void URLFetcherPostTest::OnURLFetchComplete(const URLFetcher* source) {
URLFetcherTest::OnURLFetchComplete(source);
}
+void URLFetcherEmptyPostTest::CreateFetcher(const GURL& url) {
+ fetcher_ = new URLFetcherImpl(url, URLFetcher::POST, this);
+ fetcher_->SetRequestContext(new TestURLRequestContextGetter(
+ io_message_loop_proxy()));
+ fetcher_->SetUploadData("text/plain", "");
+ fetcher_->Start();
+}
+
+void URLFetcherEmptyPostTest::OnURLFetchComplete(const URLFetcher* source) {
+ EXPECT_TRUE(source->GetStatus().is_success());
+ EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK
+
+ std::string data;
+ EXPECT_TRUE(source->GetResponseAsString(&data));
+ EXPECT_TRUE(data.empty());
+
+ CleanupAfterFetchComplete();
+ // Do not call the super class method URLFetcherTest::OnURLFetchComplete,
+ // since it expects a non-empty response.
+}
+
void URLFetcherDownloadProgressTest::CreateFetcher(const GURL& url) {
fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this);
fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter(
@@ -789,6 +820,16 @@ TEST_F(URLFetcherPostTest, Basic) {
MessageLoop::current()->Run();
}
+TEST_F(URLFetcherEmptyPostTest, Basic) {
+ TestServer test_server(TestServer::TYPE_HTTP,
+ TestServer::kLocalhost,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+
+ CreateFetcher(test_server.GetURL("echo"));
+ MessageLoop::current()->Run();
+}
+
#if defined(OS_MACOSX)
// SIGSEGV on Mac: http://crbug.com/60426
TEST_F(URLFetcherUploadProgressTest, DISABLED_Basic) {