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 const int kTimeoutSecs = 5; | |
rlarocque
2014/05/02 20:51:21
Is a timeout really necessary?
If there's a bug t
pval...(no longer on Chromium)
2014/05/05 18:33:36
I agree; I can't justify the added complexity.
FY
| |
88 bool signaled = post_complete_.TimedWait( | |
89 base::TimeDelta::FromSeconds(kTimeoutSecs)); | |
90 if (!signaled || *error_code != 0) { | |
91 return false; | |
92 } | |
93 | |
94 *error_code = post_error_code_; | |
95 *response_code = post_response_code_; | |
96 return true; | |
64 } | 97 } |
65 | 98 |
66 int FakeServerHttpPostProvider::GetResponseContentLength() const { | 99 int FakeServerHttpPostProvider::GetResponseContentLength() const { |
67 return response_.length(); | 100 return response_.length(); |
68 } | 101 } |
69 | 102 |
70 const char* FakeServerHttpPostProvider::GetResponseContent() const { | 103 const char* FakeServerHttpPostProvider::GetResponseContent() const { |
71 return response_.c_str(); | 104 return response_.c_str(); |
72 } | 105 } |
73 | 106 |
74 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( | 107 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( |
75 const std::string& name) const { | 108 const std::string& name) const { |
76 return std::string(); | 109 return std::string(); |
77 } | 110 } |
78 | 111 |
79 void FakeServerHttpPostProvider::Abort() { | 112 void FakeServerHttpPostProvider::Abort() { |
80 } | 113 } |
81 | 114 |
82 } // namespace fake_server | 115 } // namespace fake_server |
OLD | NEW |