OLD | NEW |
| (Empty) |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "blimp/client/core/session/client_network_components.h" | |
6 | |
7 #include <utility> | |
8 | |
9 #include "base/logging.h" | |
10 #include "base/memory/ptr_util.h" | |
11 #include "blimp/net/ssl_client_transport.h" | |
12 #include "net/base/net_errors.h" | |
13 | |
14 namespace blimp { | |
15 namespace client { | |
16 | |
17 ClientNetworkComponents::ClientNetworkComponents( | |
18 std::unique_ptr<NetworkEventObserver> network_observer) | |
19 : connection_handler_(), network_observer_(std::move(network_observer)) {} | |
20 | |
21 ClientNetworkComponents::~ClientNetworkComponents() { | |
22 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
23 } | |
24 | |
25 void ClientNetworkComponents::Initialize() { | |
26 io_thread_checker_.DetachFromThread(); | |
27 DCHECK(!connection_manager_); | |
28 connection_manager_ = base::MakeUnique<ClientConnectionManager>(this); | |
29 } | |
30 | |
31 void ClientNetworkComponents::ConnectWithAssignment( | |
32 const Assignment& assignment) { | |
33 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
34 DCHECK(connection_manager_); | |
35 | |
36 connection_manager_->set_client_auth_token(assignment.client_auth_token); | |
37 const char* transport_type = "UNKNOWN"; | |
38 switch (assignment.transport_protocol) { | |
39 case Assignment::SSL: | |
40 DCHECK(assignment.cert); | |
41 connection_manager_->AddTransport(base::MakeUnique<SSLClientTransport>( | |
42 assignment.engine_endpoint, std::move(assignment.cert), nullptr)); | |
43 transport_type = "SSL"; | |
44 break; | |
45 case Assignment::TCP: | |
46 connection_manager_->AddTransport(base::MakeUnique<TCPClientTransport>( | |
47 assignment.engine_endpoint, nullptr)); | |
48 transport_type = "TCP"; | |
49 break; | |
50 case Assignment::GRPC: | |
51 // TODO(perumaal): Unimplemented as yet. | |
52 // connection_manager_->AddTransport( | |
53 // base::MakeUnique<GrpcClientTransport>(endpoint)); | |
54 transport_type = "GRPC"; | |
55 NOTIMPLEMENTED(); | |
56 break; | |
57 case Assignment::UNKNOWN: | |
58 LOG(FATAL) << "Unknown transport type."; | |
59 break; | |
60 } | |
61 | |
62 VLOG(1) << "Connecting to " << assignment.engine_endpoint.ToString() << " (" | |
63 << transport_type << ")"; | |
64 | |
65 connection_manager_->Connect(); | |
66 } | |
67 | |
68 BrowserConnectionHandler* | |
69 ClientNetworkComponents::GetBrowserConnectionHandler() { | |
70 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
71 return &connection_handler_; | |
72 } | |
73 | |
74 void ClientNetworkComponents::HandleConnection( | |
75 std::unique_ptr<BlimpConnection> connection) { | |
76 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
77 VLOG(1) << "Connection established."; | |
78 connection->AddConnectionErrorObserver(this); | |
79 connection_handler_.HandleConnection(std::move(connection)); | |
80 network_observer_->OnConnected(); | |
81 } | |
82 | |
83 void ClientNetworkComponents::OnConnectionError(int result) { | |
84 DCHECK(io_thread_checker_.CalledOnValidThread()); | |
85 if (result >= 0) { | |
86 VLOG(1) << "Disconnected with reason: " << result; | |
87 } else { | |
88 VLOG(1) << "Connection error: " << net::ErrorToString(result); | |
89 } | |
90 network_observer_->OnDisconnected(result); | |
91 } | |
92 | |
93 } // namespace client | |
94 } // namespace blimp | |
OLD | NEW |