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/synchronization/waitable_event.h" | |
10 #include "content/public/browser/browser_thread.h" | |
9 #include "sync/test/fake_server/fake_server.h" | 11 #include "sync/test/fake_server/fake_server.h" |
10 | 12 |
13 using content::BrowserThread; | |
11 using syncer::HttpPostProviderInterface; | 14 using syncer::HttpPostProviderInterface; |
12 | 15 |
13 namespace fake_server { | 16 namespace fake_server { |
14 | 17 |
15 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory( | 18 FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory( |
16 FakeServer* fake_server) : fake_server_(fake_server) { } | 19 FakeServer* fake_server) : fake_server_(fake_server) { } |
17 | 20 |
18 FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { } | 21 FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { } |
19 | 22 |
20 void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { } | 23 void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { } |
21 | 24 |
22 HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() { | 25 HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() { |
23 FakeServerHttpPostProvider* http = | 26 FakeServerHttpPostProvider* http = |
24 new FakeServerHttpPostProvider(fake_server_); | 27 new FakeServerHttpPostProvider(fake_server_); |
25 http->AddRef(); | 28 http->AddRef(); |
26 return http; | 29 return http; |
27 } | 30 } |
28 | 31 |
29 void FakeServerHttpPostProviderFactory::Destroy( | 32 void FakeServerHttpPostProviderFactory::Destroy( |
30 HttpPostProviderInterface* http) { | 33 HttpPostProviderInterface* http) { |
31 static_cast<FakeServerHttpPostProvider*>(http)->Release(); | 34 static_cast<FakeServerHttpPostProvider*>(http)->Release(); |
32 } | 35 } |
33 | 36 |
34 FakeServerHttpPostProvider::FakeServerHttpPostProvider( | 37 FakeServerHttpPostProvider::FakeServerHttpPostProvider( |
35 FakeServer* fake_server) : fake_server_(fake_server) { } | 38 FakeServer* fake_server) : fake_server_(fake_server), |
39 post_complete_(false, false) { } | |
36 | 40 |
37 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { } | 41 FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { } |
38 | 42 |
39 void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) { | 43 void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) { |
40 // TODO(pvalenzuela): Add assertions on this value. | 44 // TODO(pvalenzuela): Add assertions on this value. |
41 extra_request_headers_.assign(headers); | 45 extra_request_headers_.assign(headers); |
42 } | 46 } |
43 | 47 |
44 void FakeServerHttpPostProvider::SetURL(const char* url, int port) { | 48 void FakeServerHttpPostProvider::SetURL(const char* url, int port) { |
45 // TODO(pvalenzuela): Add assertions on these values. | 49 // TODO(pvalenzuela): Add assertions on these values. |
46 request_url_.assign(url); | 50 request_url_.assign(url); |
47 request_port_ = port; | 51 request_port_ = port; |
48 } | 52 } |
49 | 53 |
50 void FakeServerHttpPostProvider::SetPostPayload(const char* content_type, | 54 void FakeServerHttpPostProvider::SetPostPayload(const char* content_type, |
51 int content_length, | 55 int content_length, |
52 const char* content) { | 56 const char* content) { |
53 request_content_type_.assign(content_type); | 57 request_content_type_.assign(content_type); |
54 request_content_.assign(content, content_length); | 58 request_content_.assign(content, content_length); |
55 } | 59 } |
56 | 60 |
61 void FakeServerHttpPostProvider::OnPostComplete() { | |
62 post_complete_.Signal(); | |
63 } | |
64 | |
57 bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code, | 65 bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code, |
58 int* response_code) { | 66 int* response_code) { |
59 // This assumes that a POST is being made to /command. | 67 // It is assumed that a POST is being made to /command. |
60 *error_code = fake_server_->HandleCommand(request_content_, | 68 base::Closure callback = base::Bind( |
61 response_code, | 69 &FakeServerHttpPostProvider::OnPostComplete, base::Unretained(this)); |
62 &response_); | 70 BrowserThread::PostTask(BrowserThread::UI, |
rlarocque
2014/04/22 18:22:22
If this code is to live in sync/test, then I'm not
pval...(no longer on Chromium)
2014/04/24 01:08:53
Done.
| |
63 return (*error_code == 0); | 71 FROM_HERE, |
72 base::Bind(&FakeServer::HandleCommand, | |
73 base::Unretained(fake_server_), | |
74 base::ConstRef(request_content_), | |
75 base::ConstRef(callback), | |
76 error_code, | |
77 response_code, | |
78 &response_)); | |
79 const int kTimeoutSecs = 5; | |
80 bool signaled = post_complete_.TimedWait( | |
81 base::TimeDelta::FromSeconds(kTimeoutSecs)); | |
82 return signaled && *error_code == 0; | |
64 } | 83 } |
65 | 84 |
66 int FakeServerHttpPostProvider::GetResponseContentLength() const { | 85 int FakeServerHttpPostProvider::GetResponseContentLength() const { |
67 return response_.length(); | 86 return response_.length(); |
68 } | 87 } |
69 | 88 |
70 const char* FakeServerHttpPostProvider::GetResponseContent() const { | 89 const char* FakeServerHttpPostProvider::GetResponseContent() const { |
71 return response_.c_str(); | 90 return response_.c_str(); |
72 } | 91 } |
73 | 92 |
74 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( | 93 const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( |
75 const std::string& name) const { | 94 const std::string& name) const { |
76 return std::string(); | 95 return std::string(); |
77 } | 96 } |
78 | 97 |
79 void FakeServerHttpPostProvider::Abort() { | 98 void FakeServerHttpPostProvider::Abort() { |
80 } | 99 } |
81 | 100 |
82 } // namespace fake_server | 101 } // namespace fake_server |
OLD | NEW |