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

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

Issue 20142003: Remove ref-counting from StreamListenSocket (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressed comments Created 7 years, 3 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
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.
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 private: 100 private:
101 DISALLOW_COPY_AND_ASSIGN(Request); 101 DISALLOW_COPY_AND_ASSIGN(Request);
102 }; 102 };
103 103
104 // Manages request headers for a single request. 104 // Manages request headers for a single request.
105 // For each successful request that's made, the server will keep an instance 105 // For each successful request that's made, the server will keep an instance
106 // of this class so that they can be checked even after the server has been 106 // of this class so that they can be checked even after the server has been
107 // shut down. 107 // shut down.
108 class Connection { 108 class Connection {
109 public: 109 public:
110 explicit Connection(net::StreamListenSocket* sock) : socket_(sock) { 110 explicit Connection(scoped_ptr<net::StreamListenSocket> sock)
111 : socket_(sock.Pass()) {
111 } 112 }
112 113
113 ~Connection() { 114 ~Connection() {
114 } 115 }
115 116
116 bool IsSame(const net::StreamListenSocket* socket) const { 117 bool IsSame(const net::StreamListenSocket* socket) const {
117 return socket_ == socket; 118 return socket_ == socket;
118 } 119 }
119 120
120 const Request& request() const { 121 const Request& request() const {
121 return request_; 122 return request_;
122 } 123 }
123 124
124 Request& request() { 125 Request& request() {
125 return request_; 126 return request_;
126 } 127 }
127 128
128 void OnSocketClosed() { 129 void OnSocketClosed() {
129 socket_ = NULL; 130 socket_.reset();
130 } 131 }
131 132
132 protected: 133 protected:
133 scoped_refptr<net::StreamListenSocket> socket_; 134 scoped_ptr<net::StreamListenSocket> socket_;
134 Request request_; 135 Request request_;
135 136
136 private: 137 private:
137 DISALLOW_COPY_AND_ASSIGN(Connection); 138 DISALLOW_COPY_AND_ASSIGN(Connection);
138 }; 139 };
139 140
140 // Abstract interface with default implementations for some of the methods and 141 // Abstract interface with default implementations for some of the methods and
141 // a counter for how many times the response object has served requests. 142 // a counter for how many times the response object has served requests.
142 class Response { 143 class Response {
143 public: 144 public:
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 // Ownership of response objects is by default assumed to be outside 297 // Ownership of response objects is by default assumed to be outside
297 // of the SimpleWebServer class. 298 // of the SimpleWebServer class.
298 // However, if the caller doesn't wish to maintain a list of response objects 299 // However, if the caller doesn't wish to maintain a list of response objects
299 // but rather let this class hold the only references to those objects, 300 // but rather let this class hold the only references to those objects,
300 // the caller can call this method to delete the objects as part of 301 // the caller can call this method to delete the objects as part of
301 // the cleanup process. 302 // the cleanup process.
302 void DeleteAllResponses(); 303 void DeleteAllResponses();
303 304
304 // StreamListenSocket::Delegate overrides. 305 // StreamListenSocket::Delegate overrides.
305 virtual void DidAccept(net::StreamListenSocket* server, 306 virtual void DidAccept(net::StreamListenSocket* server,
306 net::StreamListenSocket* connection); 307 scoped_ptr<net::StreamListenSocket> connection);
307 virtual void DidRead(net::StreamListenSocket* connection, 308 virtual void DidRead(net::StreamListenSocket* connection,
308 const char* data, 309 const char* data,
309 int len); 310 int len);
310 virtual void DidClose(net::StreamListenSocket* sock); 311 virtual void DidClose(net::StreamListenSocket* sock);
311 312
312 // Returns the host on which the server is listening. This is suitable for 313 // Returns the host on which the server is listening. This is suitable for
313 // use in URLs for resources served by this instance. 314 // use in URLs for resources served by this instance.
314 const std::string& host() const { 315 const std::string& host() const {
315 return host_; 316 return host_;
316 } 317 }
(...skipping 12 matching lines...) Expand all
329 virtual void WriteContents(net::StreamListenSocket* socket) const { 330 virtual void WriteContents(net::StreamListenSocket* socket) const {
330 SimpleResponse::WriteContents(socket); 331 SimpleResponse::WriteContents(socket);
331 base::MessageLoop::current()->Quit(); 332 base::MessageLoop::current()->Quit();
332 } 333 }
333 }; 334 };
334 335
335 Response* FindResponse(const Request& request) const; 336 Response* FindResponse(const Request& request) const;
336 Connection* FindConnection(const net::StreamListenSocket* socket) const; 337 Connection* FindConnection(const net::StreamListenSocket* socket) const;
337 338
338 std::string host_; 339 std::string host_;
339 scoped_refptr<net::StreamListenSocket> server_; 340 scoped_ptr<net::StreamListenSocket> server_;
340 ConnectionList connections_; 341 ConnectionList connections_;
341 std::list<Response*> responses_; 342 std::list<Response*> responses_;
342 QuitResponse quit_; 343 QuitResponse quit_;
343 344
344 private: 345 private:
345 void Construct(const std::string& address, int port); 346 void Construct(const std::string& address, int port);
346 DISALLOW_COPY_AND_ASSIGN(SimpleWebServer); 347 DISALLOW_COPY_AND_ASSIGN(SimpleWebServer);
347 }; 348 };
348 349
349 // Simple class holding incoming HTTP request. Can send the HTTP response 350 // Simple class holding incoming HTTP request. Can send the HTTP response
350 // at different rate - small chunks, on regular interval. 351 // at different rate - small chunks, on regular interval.
351 class ConfigurableConnection : public base::RefCounted<ConfigurableConnection> { 352 class ConfigurableConnection : public base::RefCounted<ConfigurableConnection> {
352 public: 353 public:
353 struct SendOptions { 354 struct SendOptions {
354 enum Speed { IMMEDIATE, DELAYED, IMMEDIATE_HEADERS_DELAYED_CONTENT }; 355 enum Speed { IMMEDIATE, DELAYED, IMMEDIATE_HEADERS_DELAYED_CONTENT };
355 SendOptions() : speed_(IMMEDIATE), chunk_size_(0), timeout_(0) { } 356 SendOptions() : speed_(IMMEDIATE), chunk_size_(0), timeout_(0) { }
356 SendOptions(Speed speed, int chunk_size, int64 timeout) 357 SendOptions(Speed speed, int chunk_size, int64 timeout)
357 : speed_(speed), chunk_size_(chunk_size), timeout_(timeout) { 358 : speed_(speed), chunk_size_(chunk_size), timeout_(timeout) {
358 } 359 }
359 360
360 Speed speed_; 361 Speed speed_;
361 int chunk_size_; 362 int chunk_size_;
362 int64 timeout_; 363 int64 timeout_;
363 }; 364 };
364 365
365 explicit ConfigurableConnection(net::StreamListenSocket* sock) 366 explicit ConfigurableConnection(scoped_ptr<net::StreamListenSocket> sock)
366 : socket_(sock), 367 : socket_(sock.Pass()),
367 cur_pos_(0) {} 368 cur_pos_(0) {}
368 369
369 // Send HTTP response with provided |headers| and |content|. Appends 370 // Send HTTP response with provided |headers| and |content|. Appends
370 // "Context-Length:" header if the |content| is not empty. 371 // "Context-Length:" header if the |content| is not empty.
371 void Send(const std::string& headers, const std::string& content); 372 void Send(const std::string& headers, const std::string& content);
372 373
373 // Send HTTP response with provided |headers| and |content|. Appends 374 // Send HTTP response with provided |headers| and |content|. Appends
374 // "Context-Length:" header if the |content| is not empty. 375 // "Context-Length:" header if the |content| is not empty.
375 // Use the |options| to tweak the network speed behaviour. 376 // Use the |options| to tweak the network speed behaviour.
376 void SendWithOptions(const std::string& headers, const std::string& content, 377 void SendWithOptions(const std::string& headers, const std::string& content,
377 const SendOptions& options); 378 const SendOptions& options);
378 379
379 private: 380 private:
380 friend class HTTPTestServer; 381 friend class HTTPTestServer;
381 // Sends a chunk of the response and queues itself as a task for sending 382 // Sends a chunk of the response and queues itself as a task for sending
382 // next chunk of |data_|. 383 // next chunk of |data_|.
383 void SendChunk(); 384 void SendChunk();
384 385
385 // Closes the connection by releasing this instance's reference on its socket. 386 // Closes the connection by releasing this instance's reference on its socket.
386 void Close(); 387 void Close();
387 388
388 scoped_refptr<net::StreamListenSocket> socket_; 389 scoped_ptr<net::StreamListenSocket> socket_;
389 Request r_; 390 Request r_;
390 SendOptions options_; 391 SendOptions options_;
391 std::string data_; 392 std::string data_;
392 int cur_pos_; 393 int cur_pos_;
393 394
394 DISALLOW_COPY_AND_ASSIGN(ConfigurableConnection); 395 DISALLOW_COPY_AND_ASSIGN(ConfigurableConnection);
395 }; 396 };
396 397
397 // Simple class used as a base class for mock webserver. 398 // Simple class used as a base class for mock webserver.
398 // Override virtual functions Get and Post and use passed ConfigurableConnection 399 // Override virtual functions Get and Post and use passed ConfigurableConnection
(...skipping 26 matching lines...) Expand all
425 426
426 private: 427 private:
427 typedef std::list<scoped_refptr<ConfigurableConnection> > ConnectionList; 428 typedef std::list<scoped_refptr<ConfigurableConnection> > ConnectionList;
428 ConnectionList::iterator FindConnection( 429 ConnectionList::iterator FindConnection(
429 const net::StreamListenSocket* socket); 430 const net::StreamListenSocket* socket);
430 scoped_refptr<ConfigurableConnection> ConnectionFromSocket( 431 scoped_refptr<ConfigurableConnection> ConnectionFromSocket(
431 const net::StreamListenSocket* socket); 432 const net::StreamListenSocket* socket);
432 433
433 // StreamListenSocket::Delegate overrides. 434 // StreamListenSocket::Delegate overrides.
434 virtual void DidAccept(net::StreamListenSocket* server, 435 virtual void DidAccept(net::StreamListenSocket* server,
435 net::StreamListenSocket* socket); 436 scoped_ptr<net::StreamListenSocket> socket);
436 virtual void DidRead(net::StreamListenSocket* socket, 437 virtual void DidRead(net::StreamListenSocket* socket,
437 const char* data, int len); 438 const char* data, int len);
438 virtual void DidClose(net::StreamListenSocket* socket); 439 virtual void DidClose(net::StreamListenSocket* socket);
439 440
440 scoped_refptr<net::StreamListenSocket> server_; 441 scoped_ptr<net::StreamListenSocket> server_;
441 ConnectionList connection_list_; 442 ConnectionList connection_list_;
442 443
443 DISALLOW_COPY_AND_ASSIGN(HTTPTestServer); 444 DISALLOW_COPY_AND_ASSIGN(HTTPTestServer);
444 }; 445 };
445 446
446 } // namespace test_server 447 } // namespace test_server
447 448
448 #endif // CHROME_FRAME_TEST_TEST_SERVER_H_ 449 #endif // CHROME_FRAME_TEST_TEST_SERVER_H_
OLDNEW
« no previous file with comments | « chrome/browser/devtools/browser_list_tabcontents_provider.cc ('k') | chrome_frame/test/test_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698