Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / net / url_request / test_url_fetcher_factory.cc
index 62fbb07..af76576 100644 (file)
@@ -8,9 +8,13 @@
 
 #include "base/bind.h"
 #include "base/compiler_specific.h"
+#include "base/files/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"
 #include "net/http/http_response_headers.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_fetcher_impl.h"
@@ -55,6 +59,7 @@ TestURLFetcher::~TestURLFetcher() {
 
 void TestURLFetcher::SetUploadData(const std::string& upload_content_type,
                                    const std::string& upload_content) {
+  upload_content_type_ = upload_content_type;
   upload_data_ = upload_content;
 }
 
@@ -90,6 +95,10 @@ int TestURLFetcher::GetLoadFlags() const {
 void TestURLFetcher::SetReferrer(const std::string& referrer) {
 }
 
+void TestURLFetcher::SetReferrerPolicy(
+    URLRequest::ReferrerPolicy referrer_policy) {
+}
+
 void TestURLFetcher::SetExtraRequestHeaders(
     const std::string& extra_request_headers) {
   fake_extra_request_headers_.Clear();
@@ -100,11 +109,6 @@ void TestURLFetcher::AddExtraRequestHeader(const std::string& header_line) {
   fake_extra_request_headers_.AddHeaderFromString(header_line);
 }
 
-void TestURLFetcher::GetExtraRequestHeaders(
-    HttpRequestHeaders* headers) const {
-  *headers = fake_extra_request_headers_;
-}
-
 void TestURLFetcher::SetRequestContext(
     URLRequestContextGetter* request_context_getter) {
 }
@@ -141,15 +145,48 @@ void TestURLFetcher::SetAutomaticallyRetryOnNetworkChanges(int max_retries) {
 
 void TestURLFetcher::SaveResponseToFileAtPath(
     const base::FilePath& file_path,
-    scoped_refptr<base::TaskRunner> file_task_runner) {
+    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(
-    scoped_refptr<base::TaskRunner> file_task_runner) {
+    scoped_refptr<base::SequencedTaskRunner> file_task_runner) {
 }
 
 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());
+    // The TestURLFetcher doesn't handle asynchronous writes.
+    DCHECK_EQ(OK, response);
+
+    scoped_refptr<IOBuffer> buffer(new StringIOBuffer(fake_response_string_));
+    response = response_writer_->Write(buffer.get(),
+                                       fake_response_string_.size(),
+                                       CompletionCallback());
+    DCHECK_EQ(static_cast<int>(fake_response_string_.size()), response);
+    response = response_writer_->Finish(CompletionCallback());
+    DCHECK_EQ(OK, response);
+  } 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();
+  }
 }
 
 HttpResponseHeaders* TestURLFetcher::GetResponseHeaders() const {
@@ -212,6 +249,11 @@ bool TestURLFetcher::GetResponseAsFilePath(
   return true;
 }
 
+void TestURLFetcher::GetExtraRequestHeaders(
+    HttpRequestHeaders* headers) const {
+  *headers = fake_extra_request_headers_;
+}
+
 void TestURLFetcher::set_status(const URLRequestStatus& status) {
   fake_status_ = status;
 }
@@ -283,14 +325,26 @@ void TestURLFetcherFactory::SetDelegateForTests(
 FakeURLFetcher::FakeURLFetcher(const GURL& url,
                                URLFetcherDelegate* d,
                                const std::string& response_data,
-                               HttpStatusCode response_code)
+                               HttpStatusCode response_code,
+                               URLRequestStatus::Status status)
     : TestURLFetcher(0, url, d),
       weak_factory_(this) {
-  set_status(URLRequestStatus(
-      // Status is FAILED for HTTP/5xx server errors, and SUCCESS otherwise.
-      response_code >= HTTP_INTERNAL_SERVER_ERROR ? URLRequestStatus::FAILED :
-                                                    URLRequestStatus::SUCCESS,
-      0));
+  Error error = OK;
+  switch(status) {
+    case URLRequestStatus::SUCCESS:
+      // |error| is initialized to OK.
+      break;
+    case URLRequestStatus::IO_PENDING:
+      error = ERR_IO_PENDING;
+      break;
+    case URLRequestStatus::CANCELED:
+      error = ERR_ABORTED;
+      break;
+    case URLRequestStatus::FAILED:
+      error = ERR_FAILED;
+      break;
+  }
+  set_status(URLRequestStatus(status, error));
   set_response_code(response_code);
   SetResponseString(response_data);
 }
@@ -330,11 +384,10 @@ scoped_ptr<FakeURLFetcher> FakeURLFetcherFactory::DefaultFakeURLFetcherCreator(
       const GURL& url,
       URLFetcherDelegate* delegate,
       const std::string& response_data,
-      HttpStatusCode response_code) {
-  return scoped_ptr<FakeURLFetcher>(new FakeURLFetcher(url,
-                                                       delegate,
-                                                       response_data,
-                                                       response_code));
+      HttpStatusCode response_code,
+      URLRequestStatus::Status status) {
+  return scoped_ptr<FakeURLFetcher>(
+      new FakeURLFetcher(url, delegate, response_data, response_code, status));
 }
 
 FakeURLFetcherFactory::~FakeURLFetcherFactory() {}
@@ -356,7 +409,8 @@ URLFetcher* FakeURLFetcherFactory::CreateURLFetcher(
   }
 
   scoped_ptr<FakeURLFetcher> fake_fetcher =
-      creator_.Run(url, d, it->second.first, it->second.second);
+      creator_.Run(url, d, it->second.response_data,
+                   it->second.response_code, it->second.status);
   // TODO: Make URLFetcherFactory::CreateURLFetcher return a scoped_ptr
   return fake_fetcher.release();
 }
@@ -364,9 +418,14 @@ URLFetcher* FakeURLFetcherFactory::CreateURLFetcher(
 void FakeURLFetcherFactory::SetFakeResponse(
     const GURL& url,
     const std::string& response_data,
-    HttpStatusCode response_code) {
+    HttpStatusCode response_code,
+    URLRequestStatus::Status status) {
   // Overwrite existing URL if it already exists.
-  fake_responses_[url] = std::make_pair(response_data, response_code);
+  FakeURLResponse response;
+  response.response_data = response_data;
+  response.response_code = response_code;
+  response.status = status;
+  fake_responses_[url] = response;
 }
 
 void FakeURLFetcherFactory::ClearFakeResponses() {