Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: chrome_frame/test/test_server.h

Issue 10868027: Attempt to fix flake in FullTabModeIE_TestPostReissue by avoiding loopback address. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: another try with net tests Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/test/net/fake_external_tab.cc ('k') | chrome_frame/test/test_server.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 CHROME_FRAME_TEST_TEST_SERVER_H_ 5 #ifndef CHROME_FRAME_TEST_TEST_SERVER_H_
6 #define CHROME_FRAME_TEST_TEST_SERVER_H_ 6 #define CHROME_FRAME_TEST_TEST_SERVER_H_
7 7
8 // Implementation of an HTTP server for tests. 8 // Implementation of an HTTP server for tests.
9 // To instantiate the server, make sure you have a message loop on the 9 // To instantiate the server, make sure you have a message loop on the
10 // current thread and then create an instance of the SimpleWebServer class. 10 // current thread and then create an instance of the SimpleWebServer class.
11 // The server uses two basic concepts, a request and a response. 11 // The server uses two basic concepts, a request and a response.
12 // The Response interface represents an item (e.g. a document) available from 12 // The Response interface represents an item (e.g. a document) available from
13 // the server. A Request object represents a request from a client (e.g. a 13 // the server. A Request object represents a request from a client (e.g. a
14 // browser). There are several basic Response classes implemented in this file, 14 // browser). There are several basic Response classes implemented in this file,
15 // all derived from the Response interface. 15 // all derived from the Response interface.
16 // 16 //
17 // Here's a simple example that starts a web server that can serve up 17 // Here's a simple example that starts a web server that can serve up
18 // a single document (http://localhost:1337/foo). 18 // a single document (http://<server.host()>:1337/foo).
19 // All other requests will get a 404. 19 // All other requests will get a 404.
20 // 20 //
21 // MessageLoopForUI loop; 21 // MessageLoopForUI loop;
22 // test_server::SimpleWebServer server(1337); 22 // test_server::SimpleWebServer server(1337);
23 // test_server::SimpleResponse document("/foo", "Hello World!"); 23 // test_server::SimpleResponse document("/foo", "Hello World!");
24 // test_server.AddResponse(&document); 24 // test_server.AddResponse(&document);
25 // loop.MessageLoop::Run(); 25 // loop.MessageLoop::Run();
26 // 26 //
27 // To close the web server, just go to http://localhost:1337/quit. 27 // To close the web server, just go to http://<server.host()>:1337/quit.
28 // 28 //
29 // All Response classes count how many times they have been accessed. Just 29 // All Response classes count how many times they have been accessed. Just
30 // call Response::accessed(). 30 // call Response::accessed().
31 // 31 //
32 // To implement a custom response object (e.g. to match against a request 32 // To implement a custom response object (e.g. to match against a request
33 // based on some data, serve up dynamic content or take some action on the 33 // based on some data, serve up dynamic content or take some action on the
34 // server), just inherit from one of the response classes or directly from the 34 // server), just inherit from one of the response classes or directly from the
35 // Response interface and add your response object to the server's list of 35 // Response interface and add your response object to the server's list of
36 // response objects. 36 // response objects.
37 37
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 }; 275 };
276 276
277 // typedef for a list of connections. Used by SimpleWebServer. 277 // typedef for a list of connections. Used by SimpleWebServer.
278 typedef std::list<Connection*> ConnectionList; 278 typedef std::list<Connection*> ConnectionList;
279 279
280 // Implementation of a simple http server. 280 // Implementation of a simple http server.
281 // Before creating an instance of the server, make sure the current thread 281 // Before creating an instance of the server, make sure the current thread
282 // has a message loop. 282 // has a message loop.
283 class SimpleWebServer : public net::StreamListenSocket::Delegate { 283 class SimpleWebServer : public net::StreamListenSocket::Delegate {
284 public: 284 public:
285 // Constructs a server listening at the given port on a local IPv4 address.
286 // An address on a NIC is preferred over the loopback address.
285 explicit SimpleWebServer(int port); 287 explicit SimpleWebServer(int port);
288
289 // Constructs a server listening at the given address:port.
290 SimpleWebServer(const std::string& address, int port);
286 virtual ~SimpleWebServer(); 291 virtual ~SimpleWebServer();
287 292
288 void AddResponse(Response* response); 293 void AddResponse(Response* response);
289 294
290 // Ownership of response objects is by default assumed to be outside 295 // Ownership of response objects is by default assumed to be outside
291 // of the SimpleWebServer class. 296 // of the SimpleWebServer class.
292 // However, if the caller doesn't wish to maintain a list of response objects 297 // However, if the caller doesn't wish to maintain a list of response objects
293 // but rather let this class hold the only references to those objects, 298 // but rather let this class hold the only references to those objects,
294 // the caller can call this method to delete the objects as part of 299 // the caller can call this method to delete the objects as part of
295 // the cleanup process. 300 // the cleanup process.
296 void DeleteAllResponses(); 301 void DeleteAllResponses();
297 302
298 // StreamListenSocket::Delegate overrides. 303 // StreamListenSocket::Delegate overrides.
299 virtual void DidAccept(net::StreamListenSocket* server, 304 virtual void DidAccept(net::StreamListenSocket* server,
300 net::StreamListenSocket* connection); 305 net::StreamListenSocket* connection);
301 virtual void DidRead(net::StreamListenSocket* connection, 306 virtual void DidRead(net::StreamListenSocket* connection,
302 const char* data, 307 const char* data,
303 int len); 308 int len);
304 virtual void DidClose(net::StreamListenSocket* sock); 309 virtual void DidClose(net::StreamListenSocket* sock);
305 310
311 // Returns the host on which the server is listening. This is suitable for
312 // use in URLs for resources served by this instance.
313 const std::string& host() const {
314 return host_;
315 }
316
306 const ConnectionList& connections() const { 317 const ConnectionList& connections() const {
307 return connections_; 318 return connections_;
308 } 319 }
309 320
310 protected: 321 protected:
311 class QuitResponse : public SimpleResponse { 322 class QuitResponse : public SimpleResponse {
312 public: 323 public:
313 QuitResponse() 324 QuitResponse()
314 : SimpleResponse("/quit", "So long and thanks for all the fish.") { 325 : SimpleResponse("/quit", "So long and thanks for all the fish.") {
315 } 326 }
316 327
317 virtual void WriteContents(net::StreamListenSocket* socket) const { 328 virtual void WriteContents(net::StreamListenSocket* socket) const {
318 SimpleResponse::WriteContents(socket); 329 SimpleResponse::WriteContents(socket);
319 MessageLoop::current()->Quit(); 330 MessageLoop::current()->Quit();
320 } 331 }
321 }; 332 };
322 333
323 Response* FindResponse(const Request& request) const; 334 Response* FindResponse(const Request& request) const;
324 Connection* FindConnection(const net::StreamListenSocket* socket) const; 335 Connection* FindConnection(const net::StreamListenSocket* socket) const;
325 336
326 protected: 337 std::string host_;
327 scoped_refptr<net::StreamListenSocket> server_; 338 scoped_refptr<net::StreamListenSocket> server_;
328 ConnectionList connections_; 339 ConnectionList connections_;
329 std::list<Response*> responses_; 340 std::list<Response*> responses_;
330 QuitResponse quit_; 341 QuitResponse quit_;
331 342
332 private: 343 private:
344 void Construct(const std::string& address, int port);
333 DISALLOW_COPY_AND_ASSIGN(SimpleWebServer); 345 DISALLOW_COPY_AND_ASSIGN(SimpleWebServer);
334 }; 346 };
335 347
336 // Simple class holding incoming HTTP request. Can send the HTTP response 348 // Simple class holding incoming HTTP request. Can send the HTTP response
337 // at different rate - small chunks, on regular interval. 349 // at different rate - small chunks, on regular interval.
338 class ConfigurableConnection : public base::RefCounted<ConfigurableConnection> { 350 class ConfigurableConnection : public base::RefCounted<ConfigurableConnection> {
339 public: 351 public:
340 struct SendOptions { 352 struct SendOptions {
341 enum Speed { IMMEDIATE, DELAYED, IMMEDIATE_HEADERS_DELAYED_CONTENT }; 353 enum Speed { IMMEDIATE, DELAYED, IMMEDIATE_HEADERS_DELAYED_CONTENT };
342 SendOptions() : speed_(IMMEDIATE), chunk_size_(0), timeout_(0) { } 354 SendOptions() : speed_(IMMEDIATE), chunk_size_(0), timeout_(0) { }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 437
426 scoped_refptr<net::StreamListenSocket> server_; 438 scoped_refptr<net::StreamListenSocket> server_;
427 ConnectionList connection_list_; 439 ConnectionList connection_list_;
428 440
429 DISALLOW_COPY_AND_ASSIGN(HTTPTestServer); 441 DISALLOW_COPY_AND_ASSIGN(HTTPTestServer);
430 }; 442 };
431 443
432 } // namespace test_server 444 } // namespace test_server
433 445
434 #endif // CHROME_FRAME_TEST_TEST_SERVER_H_ 446 #endif // CHROME_FRAME_TEST_TEST_SERVER_H_
OLDNEW
« no previous file with comments | « chrome_frame/test/net/fake_external_tab.cc ('k') | chrome_frame/test/test_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698