Index: net/url_request/test_url_fetcher_factory.cc |
diff --git a/net/url_request/test_url_fetcher_factory.cc b/net/url_request/test_url_fetcher_factory.cc |
index d6c66118f32fe8a5e65ae5d6ff4ff8f8bc1d5298..bd4f5e187a36a1d54be6dcb4934acb5a56763f23 100644 |
--- a/net/url_request/test_url_fetcher_factory.cc |
+++ b/net/url_request/test_url_fetcher_factory.cc |
@@ -8,8 +8,10 @@ |
#include "base/bind.h" |
#include "base/compiler_specific.h" |
+#include "base/file_util.h" |
#include "base/memory/weak_ptr.h" |
#include "base/message_loop/message_loop.h" |
+#include "base/threading/thread_restrictions.h" |
#include "net/base/host_port_pair.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
@@ -143,6 +145,12 @@ void TestURLFetcher::SetAutomaticallyRetryOnNetworkChanges(int max_retries) { |
void TestURLFetcher::SaveResponseToFileAtPath( |
const base::FilePath& file_path, |
scoped_refptr<base::SequencedTaskRunner> file_task_runner) { |
+ SetResponseFilePath(file_path); |
+ // Asynchronous IO is not supported, so file_task_runner is ignored. |
+ base::ThreadRestrictions::ScopedAllowIO allow_io; |
+ const size_t written_bytes = base::WriteFile( |
+ file_path, fake_response_string_.c_str(), fake_response_string_.size()); |
+ DCHECK_EQ(written_bytes, fake_response_string_.size()); |
} |
void TestURLFetcher::SaveResponseToTemporaryFile( |
@@ -151,6 +159,12 @@ void TestURLFetcher::SaveResponseToTemporaryFile( |
void TestURLFetcher::SaveResponseWithWriter( |
scoped_ptr<URLFetcherResponseWriter> response_writer) { |
+ // In class URLFetcherCore this method is called by all three: |
+ // GetResponseAsString() / SaveResponseToFileAtPath() / |
+ // SaveResponseToTemporaryFile(). But here (in TestURLFetcher), this method |
+ // is never used by any of these three methods. So, file writing is expected |
+ // to be done in SaveResponseToFileAtPath(), and this method supports only |
+ // URLFetcherStringWriter (for testing of this method only). |
if (fake_response_destination_ == STRING) { |
response_writer_ = response_writer.Pass(); |
int response = response_writer_->Initialize(CompletionCallback()); |
@@ -164,8 +178,13 @@ void TestURLFetcher::SaveResponseWithWriter( |
DCHECK_EQ(static_cast<int>(fake_response_string_.size()), response); |
response = response_writer_->Finish(CompletionCallback()); |
DCHECK_EQ(OK, response); |
- } else { |
+ } else if (fake_response_destination_ == TEMP_FILE) { |
+ // SaveResponseToFileAtPath() should be called instead of this method to |
+ // save file. Asynchronous file writing using URLFetcherFileWriter is not |
+ // supported. |
NOTIMPLEMENTED(); |
+ } else { |
+ NOTREACHED(); |
} |
} |