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

Unified Diff: net/socket/socket_test_util.cc

Issue 353713005: Implements new, more robust design for communicating between SSLConnectJobs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added checks to determine if false start connections fail, and moved location of enable_job_waiting… Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: net/socket/socket_test_util.cc
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index f993801adeb2814aede788bcf82c693bfa99696f..bb966aa6d6b372d63f7219fc8632cc3276ea894b 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -653,6 +653,8 @@ MockClientSocketFactory::MockClientSocketFactory() {}
MockClientSocketFactory::~MockClientSocketFactory() {}
+bool MockClientSocketFactory::leader_connected_ = false;
+
void MockClientSocketFactory::AddSocketDataProvider(
SocketDataProvider* data) {
mock_data_.Add(data);
@@ -668,6 +670,14 @@ void MockClientSocketFactory::ResetNextMockIndexes() {
mock_ssl_data_.ResetNextIndex();
}
+void MockClientSocketFactory::LeaderConnected() {
+ leader_connected_ = true;
+}
+
+bool MockClientSocketFactory::IsLeaderConnected() {
+ return leader_connected_;
+}
+
scoped_ptr<DatagramClientSocket>
MockClientSocketFactory::CreateDatagramClientSocket(
DatagramSocket::BindType bind_type,
@@ -699,15 +709,23 @@ scoped_ptr<SSLClientSocket> MockClientSocketFactory::CreateSSLClientSocket(
const HostPortPair& host_and_port,
const SSLConfig& ssl_config,
const SSLClientSocketContext& context) {
- return scoped_ptr<SSLClientSocket>(
+ scoped_ptr<MockSSLClientSocket> socket(
new MockSSLClientSocket(transport_socket.Pass(),
- host_and_port, ssl_config,
+ host_and_port,
+ ssl_config,
mock_ssl_data_.GetNext()));
+ ssl_client_sockets_.push_back(socket.get());
+ return socket.PassAs<SSLClientSocket>();
}
void MockClientSocketFactory::ClearSSLSessionCache() {
}
+std::vector<MockSSLClientSocket*>
+MockClientSocketFactory::GetSSLClientSockets() {
+ return ssl_client_sockets_;
+}
+
const char MockClientSocket::kTlsUnique[] = "MOCK_TLSUNIQ";
MockClientSocket::MockClientSocket(const BoundNetLog& net_log)
@@ -762,6 +780,20 @@ void MockClientSocket::GetSSLCertRequestInfo(
SSLCertRequestInfo* cert_request_info) {
}
+bool MockClientSocket::InSessionCache() const {
+ return false;
+}
+
+void MockClientSocket::WatchSessionForCompletion(
+ const base::Closure& cb) const {
+}
+
+void MockClientSocket::SetSocketFailureCallback(const base::Closure& cb) {
+}
+
+void MockClientSocket::OnSocketFailure() {
+}
+
int MockClientSocket::ExportKeyingMaterial(const base::StringPiece& label,
bool has_context,
const base::StringPiece& context,
@@ -1314,9 +1346,12 @@ MockSSLClientSocket::MockSSLClientSocket(
const SSLConfig& ssl_config,
SSLSocketDataProvider* data)
: MockClientSocket(
- // Have to use the right BoundNetLog for LoadTimingInfo regression
- // tests.
- transport_socket->socket()->NetLog()),
+ // Have to use the right BoundNetLog for LoadTimingInfo regression
+ // tests.
+ transport_socket->socket()->NetLog()),
+ process_pending_jobs_callback_(
+ base::Bind(&SSLConnectJobMessenger::OnJobSucceeded,
+ base::Unretained(new SSLConnectJobMessenger))),
transport_(transport_socket.Pass()),
data_(data),
is_npn_state_set_(false),
@@ -1342,9 +1377,24 @@ int MockSSLClientSocket::Write(IOBuffer* buf, int buf_len,
}
int MockSSLClientSocket::Connect(const CompletionCallback& callback) {
+ if (SSLConnectJob::GetEnableJobWaiting()) {
+ // The socket should only be starting to connect if the leader has already
+ // connected -- unless the socket is the leader.
+ if (!MockClientSocketFactory::IsLeaderConnected())
+ good_ordering_ = false;
+ else
+ good_ordering_ = true;
+ }
int rv = transport_->socket()->Connect(
base::Bind(&ConnectCallback, base::Unretained(this), callback));
if (rv == OK) {
+ if (SSLConnectJob::GetEnableJobWaiting()) {
+ if (data_->is_leader_) {
+ good_ordering_ = true;
+ MockClientSocketFactory::LeaderConnected();
+ }
+ process_pending_jobs_callback_.Run();
+ }
if (data_->connect.result == OK)
connected_ = true;
if (data_->connect.mode == ASYNC) {
@@ -1399,6 +1449,23 @@ void MockSSLClientSocket::GetSSLCertRequestInfo(
}
}
+bool MockSSLClientSocket::InSessionCache() const {
+ if (data_->is_in_session_cache_)
+ return true;
+ return false;
wtc 2014/07/08 01:25:41 This is simply return data_->is_in_session_cache
mshelley 2014/07/09 19:50:59 Done.
+}
+
+void MockSSLClientSocket::WatchSessionForCompletion(
+ const base::Closure& cb) const {
+ process_pending_jobs_callback_ = cb;
+}
+
+void MockSSLClientSocket::SetSocketFailureCallback(const base::Closure& cb) {
+}
+
+void MockSSLClientSocket::OnSocketFailure() {
+}
+
SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto(
std::string* proto, std::string* server_protos) {
*proto = data_->next_proto;
@@ -1441,6 +1508,10 @@ ServerBoundCertService* MockSSLClientSocket::GetServerBoundCertService() const {
return data_->server_bound_cert_service;
}
+bool MockSSLClientSocket::IsGoodOrdering() const {
+ return good_ordering_;
+}
+
void MockSSLClientSocket::OnReadComplete(const MockRead& data) {
NOTIMPLEMENTED();
}

Powered by Google App Engine
This is Rietveld 408576698