| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "sync/test/fake_server/fake_server_http_post_provider.h" | 5 #include "sync/test/fake_server/fake_server_http_post_provider.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" |
| 10 #include "base/location.h" |
| 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/sequenced_task_runner.h" |
| 13 #include "base/synchronization/waitable_event.h" |
| 9 #include "sync/test/fake_server/fake_server.h" | 14 #include "sync/test/fake_server/fake_server.h" |
| 10 | 15 |
| 11 using syncer::HttpPostProviderInterface; | 16 using syncer::HttpPostProviderInterface; |
| 12 | 17 |
| 13 namespace fake_server { | 18 namespace fake_server { |
| 14 | 19 |
| 15 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory( | 20 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory( |
| 16 FakeServer* fake_server) : fake_server_(fake_server) { } | 21 FakeServer* fake_server, |
| 22 scoped_refptr<base::SequencedTaskRunner> task_runner) |
| 23 : fake_server_(fake_server), task_runner_(task_runner) { } |
| 17 | 24 |
| 18 FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { } | 25 FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { } |
| 19 | 26 |
| 20 void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { } | 27 void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { } |
| 21 | 28 |
| 22 HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() { | 29 HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() { |
| 23 FakeServerHttpPostProvider* http = | 30 FakeServerHttpPostProvider* http = |
| 24 new FakeServerHttpPostProvider(fake_server_); | 31 new FakeServerHttpPostProvider(fake_server_, task_runner_); |
| 25 http->AddRef(); | 32 http->AddRef(); |
| 26 return http; | 33 return http; |
| 27 } | 34 } |
| 28 | 35 |
| 29 void FakeServerHttpPostProviderFactory::Destroy( | 36 void FakeServerHttpPostProviderFactory::Destroy( |
| 30 HttpPostProviderInterface* http) { | 37 HttpPostProviderInterface* http) { |
| 31 static_cast<FakeServerHttpPostProvider*>(http)->Release(); | 38 static_cast<FakeServerHttpPostProvider*>(http)->Release(); |
| 32 } | 39 } |
| 33 | 40 |
| 34 FakeServerHttpPostProvider::FakeServerHttpPostProvider( | 41 FakeServerHttpPostProvider::FakeServerHttpPostProvider( |
| 35 FakeServer* fake_server) : fake_server_(fake_server) { } | 42 FakeServer* fake_server, |
| 43 scoped_refptr<base::SequencedTaskRunner> task_runner) |
| 44 : fake_server_(fake_server), |
| 45 task_runner_(task_runner), |
| 46 post_complete_(false, false) { } |
| 36 | 47 |
| 37 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { } | 48 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { } |
| 38 | 49 |
| 39 void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) { | 50 void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) { |
| 40 // TODO(pvalenzuela): Add assertions on this value. | 51 // TODO(pvalenzuela): Add assertions on this value. |
| 41 extra_request_headers_.assign(headers); | 52 extra_request_headers_.assign(headers); |
| 42 } | 53 } |
| 43 | 54 |
| 44 void FakeServerHttpPostProvider::SetURL(const char* url, int port) { | 55 void FakeServerHttpPostProvider::SetURL(const char* url, int port) { |
| 45 // TODO(pvalenzuela): Add assertions on these values. | 56 // TODO(pvalenzuela): Add assertions on these values. |
| 46 request_url_.assign(url); | 57 request_url_.assign(url); |
| 47 request_port_ = port; | 58 request_port_ = port; |
| 48 } | 59 } |
| 49 | 60 |
| 50 void FakeServerHttpPostProvider::SetPostPayload(const char* content_type, | 61 void FakeServerHttpPostProvider::SetPostPayload(const char* content_type, |
| 51 int content_length, | 62 int content_length, |
| 52 const char* content) { | 63 const char* content) { |
| 53 request_content_type_.assign(content_type); | 64 request_content_type_.assign(content_type); |
| 54 request_content_.assign(content, content_length); | 65 request_content_.assign(content, content_length); |
| 55 } | 66 } |
| 56 | 67 |
| 68 void FakeServerHttpPostProvider::OnPostComplete(int error_code, |
| 69 int response_code, |
| 70 const std::string& response) { |
| 71 post_error_code_ = error_code; |
| 72 post_response_code_ = response_code; |
| 73 response_ = response; |
| 74 post_complete_.Signal(); |
| 75 } |
| 76 |
| 57 bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code, | 77 bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code, |
| 58 int* response_code) { | 78 int* response_code) { |
| 59 // This assumes that a POST is being made to /command. | 79 // It is assumed that a POST is being made to /command. |
| 60 *error_code = fake_server_->HandleCommand(request_content_, | 80 FakeServer::HandleCommandCallback callback = base::Bind( |
| 61 response_code, | 81 &FakeServerHttpPostProvider::OnPostComplete, base::Unretained(this)); |
| 62 &response_); | 82 task_runner_->PostNonNestableTask(FROM_HERE, |
| 63 return (*error_code == 0); | 83 base::Bind(&FakeServer::HandleCommand, |
| 84 base::Unretained(fake_server_), |
| 85 base::ConstRef(request_content_), |
| 86 base::ConstRef(callback))); |
| 87 post_complete_.Wait(); |
| 88 *error_code = post_error_code_; |
| 89 *response_code = post_response_code_; |
| 90 return *error_code == 0; |
| 64 } | 91 } |
| 65 | 92 |
| 66 int FakeServerHttpPostProvider::GetResponseContentLength() const { | 93 int FakeServerHttpPostProvider::GetResponseContentLength() const { |
| 67 return response_.length(); | 94 return response_.length(); |
| 68 } | 95 } |
| 69 | 96 |
| 70 const char* FakeServerHttpPostProvider::GetResponseContent() const { | 97 const char* FakeServerHttpPostProvider::GetResponseContent() const { |
| 71 return response_.c_str(); | 98 return response_.c_str(); |
| 72 } | 99 } |
| 73 | 100 |
| 74 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( | 101 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( |
| 75 const std::string& name) const { | 102 const std::string& name) const { |
| 76 return std::string(); | 103 return std::string(); |
| 77 } | 104 } |
| 78 | 105 |
| 79 void FakeServerHttpPostProvider::Abort() { | 106 void FakeServerHttpPostProvider::Abort() { |
| 80 } | 107 } |
| 81 | 108 |
| 82 } // namespace fake_server | 109 } // namespace fake_server |
| OLD | NEW |