| 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 #ifndef IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_ | 5 #ifndef IOS_WEB_PUBLIC_TEST_HTTP_SERVER_HTTP_SERVER_H_ |
| 6 #define IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_ | 6 #define IOS_WEB_PUBLIC_TEST_HTTP_SERVER_HTTP_SERVER_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #import "base/mac/scoped_nsobject.h" | 11 #import "base/mac/scoped_nsobject.h" |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "base/synchronization/lock.h" | 14 #include "base/synchronization/lock.h" |
| 15 #import "ios/web/public/test/response_providers/response_provider.h" | 15 #import "ios/web/public/test/http_server/response_provider.h" |
| 16 | 16 |
| 17 @class GCDWebServer; | 17 @class GCDWebServer; |
| 18 | 18 |
| 19 namespace web { | 19 namespace web { |
| 20 namespace test { | 20 namespace test { |
| 21 | 21 |
| 22 // A convience class for wrapping a ResponseProvider so that it can be used | 22 // A convience class for wrapping a ResponseProvider so that it can be used |
| 23 // inside data structures that operate on ref counted objects. This class is a | 23 // inside data structures that operate on ref counted objects. This class is a |
| 24 // ref counted container for a ResponseProvider. | 24 // ref counted container for a ResponseProvider. |
| 25 // This object exists for legacy reasons since a large part of the code base | 25 // This object exists for legacy reasons since a large part of the code base |
| 26 // still uses ResponseProviders that are not ref counted. | 26 // still uses ResponseProviders that are not ref counted. |
| 27 class RefCountedResponseProviderWrapper : | 27 class RefCountedResponseProviderWrapper |
| 28 public base::RefCounted<RefCountedResponseProviderWrapper> { | 28 : public base::RefCounted<RefCountedResponseProviderWrapper> { |
| 29 public: | 29 public: |
| 30 // Main constructor. | 30 // Main constructor. |
| 31 explicit RefCountedResponseProviderWrapper( | 31 explicit RefCountedResponseProviderWrapper( |
| 32 std::unique_ptr<ResponseProvider> response_provider); | 32 std::unique_ptr<ResponseProvider> response_provider); |
| 33 // Returns the ResponseProvider that backs this object. | 33 // Returns the ResponseProvider that backs this object. |
| 34 ResponseProvider* GetResponseProvider() { return response_provider_.get(); } | 34 ResponseProvider* GetResponseProvider() { return response_provider_.get(); } |
| 35 |
| 35 private: | 36 private: |
| 36 friend class base::RefCounted<RefCountedResponseProviderWrapper>; | 37 friend class base::RefCounted<RefCountedResponseProviderWrapper>; |
| 37 // The ResponseProvider that backs this object. | 38 // The ResponseProvider that backs this object. |
| 38 std::unique_ptr<ResponseProvider> response_provider_; | 39 std::unique_ptr<ResponseProvider> response_provider_; |
| 39 virtual ~RefCountedResponseProviderWrapper(); | 40 virtual ~RefCountedResponseProviderWrapper(); |
| 40 }; | 41 }; |
| 41 | 42 |
| 42 // The HttpServer is an in-process web server that is used to service requests. | 43 // The HttpServer is an in-process web server that is used to service requests. |
| 43 // It is a singleton and backed by a GCDWebServer. | 44 // It is a singleton and backed by a GCDWebServer. |
| 44 // HttpServer can be configured to serve requests by registering | 45 // HttpServer can be configured to serve requests by registering |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 // passed in. | 105 // passed in. |
| 105 // It does not rewrite URLs if the |url| can already be serviced by the | 106 // It does not rewrite URLs if the |url| can already be serviced by the |
| 106 // server. | 107 // server. |
| 107 // |url| must be a valid URL. Thread safe. | 108 // |url| must be a valid URL. Thread safe. |
| 108 GURL MakeUrlForHttpServer(const std::string& url) const; | 109 GURL MakeUrlForHttpServer(const std::string& url) const; |
| 109 | 110 |
| 110 // Returns the response provider that can handle the |request|. | 111 // Returns the response provider that can handle the |request|. |
| 111 // Note: No more than one reponse provider can handle the request. | 112 // Note: No more than one reponse provider can handle the request. |
| 112 // Thread safe. | 113 // Thread safe. |
| 113 scoped_refptr<RefCountedResponseProviderWrapper> | 114 scoped_refptr<RefCountedResponseProviderWrapper> |
| 114 GetResponseProviderForRequest( | 115 GetResponseProviderForRequest(const web::ResponseProvider::Request& request); |
| 115 const web::ResponseProvider::Request& request); | |
| 116 | 116 |
| 117 // Lock for serializing access to |provider_|. | 117 // Lock for serializing access to |provider_|. |
| 118 mutable base::Lock provider_list_lock_; | 118 mutable base::Lock provider_list_lock_; |
| 119 // Lock for serializing access to |port_|. | 119 // Lock for serializing access to |port_|. |
| 120 mutable base::Lock port_lock_; | 120 mutable base::Lock port_lock_; |
| 121 // The port that the server is running on. 0 if the server is not running. | 121 // The port that the server is running on. 0 if the server is not running. |
| 122 NSUInteger port_; | 122 NSUInteger port_; |
| 123 // The GCDWebServer backing the HttpServer. | 123 // The GCDWebServer backing the HttpServer. |
| 124 base::scoped_nsobject<GCDWebServer> gcd_web_server_; | 124 base::scoped_nsobject<GCDWebServer> gcd_web_server_; |
| 125 // The list of providers to service a request. | 125 // The list of providers to service a request. |
| 126 std::vector<scoped_refptr<RefCountedResponseProviderWrapper>> providers_; | 126 std::vector<scoped_refptr<RefCountedResponseProviderWrapper>> providers_; |
| 127 DISALLOW_COPY_AND_ASSIGN(HttpServer); | 127 DISALLOW_COPY_AND_ASSIGN(HttpServer); |
| 128 }; | 128 }; |
| 129 | 129 |
| 130 } // namespace test | 130 } // namespace test |
| 131 } // namspace web | 131 } // namspace web |
| 132 | 132 |
| 133 #endif // IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_ | 133 #endif // IOS_WEB_PUBLIC_TEST_HTTP_SERVER_HTTP_SERVER_H_ |
| 134 | |
| OLD | NEW |