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 |