| 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 |