Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "chrome/test/chromedriver/net/test_http_server.h" | 5 #include "chrome/test/chromedriver/net/test_http_server.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "net/base/ip_endpoint.h" | 13 #include "net/base/ip_endpoint.h" |
| 14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
| 15 #include "net/server/http_server_request_info.h" | 15 #include "net/server/http_server_request_info.h" |
| 16 #include "net/socket/tcp_listen_socket.h" | |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 17 |
| 19 TestHttpServer::TestHttpServer() | 18 TestHttpServer::TestHttpServer() |
| 20 : thread_("ServerThread"), | 19 : thread_("ServerThread"), |
| 21 all_closed_event_(false, true), | 20 all_closed_event_(false, true), |
| 22 request_action_(kAccept), | 21 request_action_(kAccept), |
| 23 message_action_(kEchoMessage) { | 22 message_action_(kEchoMessage) { |
| 24 } | 23 } |
| 25 | 24 |
| 26 TestHttpServer::~TestHttpServer() { | 25 TestHttpServer::~TestHttpServer() { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 case kAccept: | 87 case kAccept: |
| 89 server_->AcceptWebSocket(connection_id, info); | 88 server_->AcceptWebSocket(connection_id, info); |
| 90 break; | 89 break; |
| 91 case kNotFound: | 90 case kNotFound: |
| 92 server_->Send404(connection_id); | 91 server_->Send404(connection_id); |
| 93 break; | 92 break; |
| 94 case kClose: | 93 case kClose: |
| 95 // net::HttpServer doesn't allow us to close connection during callback. | 94 // net::HttpServer doesn't allow us to close connection during callback. |
| 96 base::MessageLoop::current()->PostTask( | 95 base::MessageLoop::current()->PostTask( |
| 97 FROM_HERE, | 96 FROM_HERE, |
| 98 base::Bind(&net::HttpServer::Close, server_, connection_id)); | 97 base::Bind(&net::HttpServer::Close, server_->AsWeakPtr(), |
| 98 connection_id)); | |
| 99 break; | 99 break; |
| 100 } | 100 } |
| 101 } | 101 } |
| 102 | 102 |
| 103 void TestHttpServer::OnWebSocketMessage(int connection_id, | 103 void TestHttpServer::OnWebSocketMessage(int connection_id, |
| 104 const std::string& data) { | 104 const std::string& data) { |
| 105 WebSocketMessageAction action; | 105 WebSocketMessageAction action; |
| 106 { | 106 { |
| 107 base::AutoLock lock(action_lock_); | 107 base::AutoLock lock(action_lock_); |
| 108 action = message_action_; | 108 action = message_action_; |
| 109 } | 109 } |
| 110 switch (action) { | 110 switch (action) { |
| 111 case kEchoMessage: | 111 case kEchoMessage: |
| 112 server_->SendOverWebSocket(connection_id, data); | 112 server_->SendOverWebSocket(connection_id, data); |
| 113 break; | 113 break; |
| 114 case kCloseOnMessage: | 114 case kCloseOnMessage: |
| 115 // net::HttpServer doesn't allow us to close connection during callback. | 115 // net::HttpServer doesn't allow us to close connection during callback. |
| 116 base::MessageLoop::current()->PostTask( | 116 base::MessageLoop::current()->PostTask( |
| 117 FROM_HERE, | 117 FROM_HERE, |
| 118 base::Bind(&net::HttpServer::Close, server_, connection_id)); | 118 base::Bind(&net::HttpServer::Close, server_->AsWeakPtr(), |
| 119 connection_id)); | |
| 119 break; | 120 break; |
| 120 } | 121 } |
| 121 } | 122 } |
| 122 | 123 |
| 123 void TestHttpServer::OnClose(int connection_id) { | 124 void TestHttpServer::OnClose(int connection_id) { |
| 124 connections_.erase(connection_id); | 125 connections_.erase(connection_id); |
| 125 if (connections_.empty()) | 126 if (connections_.empty()) |
| 126 all_closed_event_.Signal(); | 127 all_closed_event_.Signal(); |
| 127 } | 128 } |
| 128 | 129 |
| 129 void TestHttpServer::StartOnServerThread(bool* success, | 130 void TestHttpServer::StartOnServerThread(bool* success, |
| 130 base::WaitableEvent* event) { | 131 base::WaitableEvent* event) { |
| 131 net::TCPListenSocketFactory factory("127.0.0.1", 0); | 132 server_.reset(net::HttpServer::Create("127.0.0.1", 0, this)); |
| 132 server_ = new net::HttpServer(factory, this); | 133 EXPECT_NE(NULL, server_.get()); |
|
mmenke
2014/05/23 19:20:58
If this fails, we'll crash 2 lines down.
Suggest:
byungchul
2014/05/30 00:19:02
Removed.
| |
| 133 | 134 |
| 134 net::IPEndPoint address; | 135 net::IPEndPoint address; |
| 135 int error = server_->GetLocalAddress(&address); | 136 int error = server_->GetLocalAddress(&address); |
| 136 EXPECT_EQ(net::OK, error); | 137 EXPECT_EQ(net::OK, error); |
| 137 if (error == net::OK) { | 138 if (error == net::OK) { |
| 138 base::AutoLock lock(url_lock_); | 139 base::AutoLock lock(url_lock_); |
| 139 web_socket_url_ = GURL(base::StringPrintf("ws://127.0.0.1:%d", | 140 web_socket_url_ = GURL(base::StringPrintf("ws://127.0.0.1:%d", |
| 140 address.port())); | 141 address.port())); |
| 141 } else { | 142 } else { |
| 142 server_ = NULL; | 143 server_.reset(NULL); |
| 143 } | 144 } |
| 144 *success = server_.get(); | 145 *success = server_.get(); |
| 145 event->Signal(); | 146 event->Signal(); |
| 146 } | 147 } |
| 147 | 148 |
| 148 void TestHttpServer::StopOnServerThread(base::WaitableEvent* event) { | 149 void TestHttpServer::StopOnServerThread(base::WaitableEvent* event) { |
| 149 if (server_.get()) | 150 server_.reset(NULL); |
| 150 server_ = NULL; | |
| 151 event->Signal(); | 151 event->Signal(); |
| 152 } | 152 } |
| OLD | NEW |