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_H_ |
6 #define IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_ | 6 #define IOS_WEB_PUBLIC_TEST_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/memory/scoped_vector.h" | |
15 #include "base/synchronization/lock.h" | 14 #include "base/synchronization/lock.h" |
16 #include "ios/web/public/test/response_providers/response_provider.h" | 15 #include "ios/web/public/test/response_providers/response_provider.h" |
17 | 16 |
18 @class GCDWebServer; | 17 @class GCDWebServer; |
19 | 18 |
20 namespace web { | 19 namespace web { |
21 namespace test { | 20 namespace test { |
22 | 21 |
23 // 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 |
24 // 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 |
25 // ref counted container for a ResponseProvider. | 24 // ref counted container for a ResponseProvider. |
26 // 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 |
27 // still uses ResponseProviders that are not ref counted. | 26 // still uses ResponseProviders that are not ref counted. |
28 class RefCountedResponseProviderWrapper : | 27 class RefCountedResponseProviderWrapper : |
29 public base::RefCounted<RefCountedResponseProviderWrapper> { | 28 public base::RefCounted<RefCountedResponseProviderWrapper> { |
30 public: | 29 public: |
31 // Main constructor. | 30 // Main constructor. |
32 explicit RefCountedResponseProviderWrapper( | 31 explicit RefCountedResponseProviderWrapper( |
33 ResponseProvider* response_provider); | 32 std::unique_ptr<ResponseProvider> response_provider); |
34 // Returns the ResponseProvider that backs this object. | 33 // Returns the ResponseProvider that backs this object. |
35 ResponseProvider* GetResponseProvider() { return response_provider_.get(); } | 34 ResponseProvider* GetResponseProvider() { return response_provider_.get(); } |
36 private: | 35 private: |
37 friend class base::RefCounted<RefCountedResponseProviderWrapper>; | 36 friend class base::RefCounted<RefCountedResponseProviderWrapper>; |
38 // The ResponseProvider that backs this object. | 37 // The ResponseProvider that backs this object. |
39 std::unique_ptr<ResponseProvider> response_provider_; | 38 std::unique_ptr<ResponseProvider> response_provider_; |
40 virtual ~RefCountedResponseProviderWrapper(); | 39 virtual ~RefCountedResponseProviderWrapper(); |
41 }; | 40 }; |
42 | 41 |
43 // The HttpServer is an in-process web server that is used to service requests. | 42 // The HttpServer is an in-process web server that is used to service requests. |
44 // It is a singleton and backed by a GCDWebServer. | 43 // It is a singleton and backed by a GCDWebServer. |
45 // HttpServer can be configured to serve requests by registering | 44 // HttpServer can be configured to serve requests by registering |
46 // web::ResponseProviders. | 45 // web::ResponseProviders. |
47 // This class is not thread safe on the whole and only certain methods are | 46 // This class is not thread safe on the whole and only certain methods are |
48 // thread safe. | 47 // thread safe. |
49 class HttpServer { | 48 class HttpServer { |
50 public: | 49 public: |
51 typedef ScopedVector<ResponseProvider> ProviderList; | 50 typedef std::vector<std::unique_ptr<ResponseProvider>> ProviderList; |
52 | 51 |
53 // Returns the shared HttpServer instance. Thread safe. | 52 // Returns the shared HttpServer instance. Thread safe. |
54 static HttpServer& GetSharedInstance(); | 53 static HttpServer& GetSharedInstance(); |
55 // Returns the shared HttpServer instance and registers the response providers | 54 // Returns the shared HttpServer instance and registers the response providers |
56 // as well. Takes ownership of the response providers. Must be called from the | 55 // as well. Takes ownership of the response providers. Must be called from the |
57 // main thread. | 56 // main thread. |
58 static HttpServer& GetSharedInstanceWithResponseProviders( | 57 static HttpServer& GetSharedInstanceWithResponseProviders( |
59 const ProviderList& response_providers); | 58 ProviderList response_providers); |
60 | 59 |
61 // A convenience method for the longer form of | 60 // A convenience method for the longer form of |
62 // |web::test::HttpServer::GetSharedInstance().MakeUrlForHttpServer| | 61 // |web::test::HttpServer::GetSharedInstance().MakeUrlForHttpServer| |
63 static GURL MakeUrl(const std::string& url); | 62 static GURL MakeUrl(const std::string& url); |
64 | 63 |
65 // Starts the server on the default port 8080. CHECKs if the server can not be | 64 // Starts the server on the default port 8080. CHECKs if the server can not be |
66 // started. | 65 // started. |
67 // Must be called from the main thread. | 66 // Must be called from the main thread. |
68 void StartOrDie(); | 67 void StartOrDie(); |
69 // Starts the server on |port|. Returns true on success, false otherwise. | 68 // Starts the server on |port|. Returns true on success, false otherwise. |
70 // Must be called from the main thread. | 69 // Must be called from the main thread. |
71 bool StartOnPort(NSUInteger port); | 70 bool StartOnPort(NSUInteger port); |
72 // Stops the server and prevents it from accepting new requests. | 71 // Stops the server and prevents it from accepting new requests. |
73 // Must be called from the main thread. | 72 // Must be called from the main thread. |
74 void Stop(); | 73 void Stop(); |
75 // Returns true if the server is running. | 74 // Returns true if the server is running. |
76 // Must be called from the main thread. | 75 // Must be called from the main thread. |
77 bool IsRunning() const; | 76 bool IsRunning() const; |
78 | 77 |
79 // Adds a ResponseProvider. Takes ownership of the ResponseProvider. | 78 // Adds a ResponseProvider. Takes ownership of the ResponseProvider. |
80 // Note for using URLs inside of the |response_provider|: | 79 // Note for using URLs inside of the |response_provider|: |
81 // The HttpServer cannot run on default HTTP port 80, so URLs used in | 80 // The HttpServer cannot run on default HTTP port 80, so URLs used in |
82 // ResponseProviders must be converted at runtime after the HttpServer's port | 81 // ResponseProviders must be converted at runtime after the HttpServer's port |
83 // is determined. Please use |MakeUrl| to handle converting URLs. | 82 // is determined. Please use |MakeUrl| to handle converting URLs. |
84 // Must be called from the main thread. | 83 // Must be called from the main thread. |
85 void AddResponseProvider(ResponseProvider* response_provider); | 84 void AddResponseProvider(std::unique_ptr<ResponseProvider> response_provider); |
86 // Removes the |response_provider|. Must be called from the main thread. | 85 // Removes the |response_provider|. Must be called from the main thread. |
87 void RemoveResponseProvider(ResponseProvider* response_provider); | 86 void RemoveResponseProvider(ResponseProvider* response_provider); |
88 // Removes all the response providers. Must be called from the main thread. | 87 // Removes all the response providers. Must be called from the main thread. |
89 void RemoveAllResponseProviders(); | 88 void RemoveAllResponseProviders(); |
90 | 89 |
91 private: | 90 private: |
92 // Initializes the server by registering for a GCDWebServer servlet. Must be | 91 // Initializes the server by registering for a GCDWebServer servlet. Must be |
93 // called from the main thread. | 92 // called from the main thread. |
94 void InitHttpServer(); | 93 void InitHttpServer(); |
95 HttpServer(); | 94 HttpServer(); |
(...skipping 29 matching lines...) Expand all Loading... |
125 // The list of providers to service a request. | 124 // The list of providers to service a request. |
126 std::vector<scoped_refptr<RefCountedResponseProviderWrapper>> providers_; | 125 std::vector<scoped_refptr<RefCountedResponseProviderWrapper>> providers_; |
127 DISALLOW_COPY_AND_ASSIGN(HttpServer); | 126 DISALLOW_COPY_AND_ASSIGN(HttpServer); |
128 }; | 127 }; |
129 | 128 |
130 } // namespace test | 129 } // namespace test |
131 } // namspace web | 130 } // namspace web |
132 | 131 |
133 #endif // IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_ | 132 #endif // IOS_WEB_PUBLIC_TEST_HTTP_SERVER_H_ |
134 | 133 |
OLD | NEW |