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 #import "ios/web/public/test/http_server.h" | 5 #import "ios/web/public/test/http_server.h" |
6 | 6 |
7 #import <Foundation/Foundation.h> | 7 #import <Foundation/Foundation.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 30 matching lines...) Expand all Loading... |
41 }]; | 41 }]; |
42 return web::ResponseProvider::Request(url, method, | 42 return web::ResponseProvider::Request(url, method, |
43 base::SysNSStringToUTF8(body), headers); | 43 base::SysNSStringToUTF8(body), headers); |
44 } | 44 } |
45 | 45 |
46 } // namespace | 46 } // namespace |
47 | 47 |
48 namespace web { | 48 namespace web { |
49 namespace test { | 49 namespace test { |
50 | 50 |
51 | |
52 RefCountedResponseProviderWrapper::RefCountedResponseProviderWrapper( | 51 RefCountedResponseProviderWrapper::RefCountedResponseProviderWrapper( |
53 ResponseProvider* response_provider) { | 52 std::unique_ptr<ResponseProvider> response_provider) |
54 response_provider_.reset(response_provider); | 53 : response_provider_(std::move(response_provider)) {} |
55 } | |
56 | 54 |
57 RefCountedResponseProviderWrapper::~RefCountedResponseProviderWrapper() {} | 55 RefCountedResponseProviderWrapper::~RefCountedResponseProviderWrapper() {} |
58 | 56 |
59 // static | 57 // static |
60 HttpServer& HttpServer::GetSharedInstance() { | 58 HttpServer& HttpServer::GetSharedInstance() { |
61 static web::test::HttpServer* shared_instance = nullptr; | 59 static web::test::HttpServer* shared_instance = nullptr; |
62 static dispatch_once_t once; | 60 static dispatch_once_t once; |
63 dispatch_once(&once, ^{ | 61 dispatch_once(&once, ^{ |
64 shared_instance = new HttpServer(); | 62 shared_instance = new HttpServer(); |
65 }); | 63 }); |
66 return *shared_instance; | 64 return *shared_instance; |
67 } | 65 } |
68 | 66 |
69 // static | 67 // static |
70 HttpServer& HttpServer::GetSharedInstanceWithResponseProviders( | 68 HttpServer& HttpServer::GetSharedInstanceWithResponseProviders( |
71 const ProviderList& response_providers) { | 69 ProviderList response_providers) { |
72 DCHECK([NSThread isMainThread]); | 70 DCHECK([NSThread isMainThread]); |
73 HttpServer& server = HttpServer::GetSharedInstance(); | 71 HttpServer& server = HttpServer::GetSharedInstance(); |
74 for (const auto& response_provider : response_providers) { | 72 // Use non-const reference as the response_provider ownership is transfered. |
75 server.AddResponseProvider(response_provider); | 73 for (std::unique_ptr<ResponseProvider>& provider : response_providers) |
76 } | 74 server.AddResponseProvider(std::move(provider)); |
77 return server; | 75 return server; |
78 } | 76 } |
79 | 77 |
80 void HttpServer::InitHttpServer() { | 78 void HttpServer::InitHttpServer() { |
81 DCHECK(gcd_web_server_); | 79 DCHECK(gcd_web_server_); |
82 // Note: This block is called from an arbitrary GCD thread. | 80 // Note: This block is called from an arbitrary GCD thread. |
83 id process_request = | 81 id process_request = |
84 ^GCDWebServerResponse*(GCDWebServerDataRequest* request) { | 82 ^GCDWebServerResponse*(GCDWebServerDataRequest* request) { |
85 ResponseProvider::Request provider_request = | 83 ResponseProvider::Request provider_request = |
86 ResponseProviderRequestFromGCDWebServerRequest(request); | 84 ResponseProviderRequestFromGCDWebServerRequest(request); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 ref_counted_response_provider.get()->GetResponseProvider(); | 184 ref_counted_response_provider.get()->GetResponseProvider(); |
187 if (response_provider->CanHandleRequest(request)) { | 185 if (response_provider->CanHandleRequest(request)) { |
188 DCHECK(!result) << | 186 DCHECK(!result) << |
189 "No more than one response provider can handle the same request."; | 187 "No more than one response provider can handle the same request."; |
190 result = ref_counted_response_provider; | 188 result = ref_counted_response_provider; |
191 } | 189 } |
192 } | 190 } |
193 return result; | 191 return result; |
194 } | 192 } |
195 | 193 |
196 void HttpServer::AddResponseProvider(ResponseProvider* response_provider) { | 194 void HttpServer::AddResponseProvider( |
| 195 std::unique_ptr<ResponseProvider> response_provider) { |
197 DCHECK([NSThread isMainThread]); | 196 DCHECK([NSThread isMainThread]); |
198 DCHECK(IsRunning()) << "Can add a response provider only when the server is " | 197 DCHECK(IsRunning()) << "Can add a response provider only when the server is " |
199 << "running."; | 198 << "running."; |
200 base::AutoLock autolock(provider_list_lock_); | 199 base::AutoLock autolock(provider_list_lock_); |
201 scoped_refptr<RefCountedResponseProviderWrapper> | 200 scoped_refptr<RefCountedResponseProviderWrapper> |
202 ref_counted_response_provider( | 201 ref_counted_response_provider( |
203 new RefCountedResponseProviderWrapper(response_provider)); | 202 new RefCountedResponseProviderWrapper(std::move(response_provider))); |
204 providers_.push_back(ref_counted_response_provider); | 203 providers_.push_back(ref_counted_response_provider); |
205 } | 204 } |
206 | 205 |
207 void HttpServer::RemoveResponseProvider(ResponseProvider* response_provider) { | 206 void HttpServer::RemoveResponseProvider(ResponseProvider* response_provider) { |
208 DCHECK([NSThread isMainThread]); | 207 DCHECK([NSThread isMainThread]); |
209 base::AutoLock autolock(provider_list_lock_); | 208 base::AutoLock autolock(provider_list_lock_); |
210 auto found_iter = providers_.end(); | 209 auto found_iter = providers_.end(); |
211 for (auto it = providers_.begin(); it != providers_.end(); ++it) { | 210 for (auto it = providers_.begin(); it != providers_.end(); ++it) { |
212 if ((*it)->GetResponseProvider() == response_provider) { | 211 if ((*it)->GetResponseProvider() == response_provider) { |
213 found_iter = it; | 212 found_iter = it; |
(...skipping 16 matching lines...) Expand all Loading... |
230 port_ = port; | 229 port_ = port; |
231 } | 230 } |
232 | 231 |
233 NSUInteger HttpServer::GetPort() const { | 232 NSUInteger HttpServer::GetPort() const { |
234 base::AutoLock autolock(port_lock_); | 233 base::AutoLock autolock(port_lock_); |
235 return port_; | 234 return port_; |
236 } | 235 } |
237 | 236 |
238 } // namespace test | 237 } // namespace test |
239 } // namespace web | 238 } // namespace web |
OLD | NEW |