OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "blimp/engine/session/blimp_engine_session.h" | 5 #include "blimp/engine/session/blimp_engine_session.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
92 const base::Closure& closure) { | 92 const base::Closure& closure) { |
93 task_runner->PostTask(FROM_HERE, closure); | 93 task_runner->PostTask(FROM_HERE, closure); |
94 } | 94 } |
95 | 95 |
96 // Returns a closure that quits the current (bind-time) MessageLoop. | 96 // Returns a closure that quits the current (bind-time) MessageLoop. |
97 base::Closure QuitCurrentMessageLoopClosure() { | 97 base::Closure QuitCurrentMessageLoopClosure() { |
98 return base::Bind(&PostTask, base::ThreadTaskRunnerHandle::Get(), | 98 return base::Bind(&PostTask, base::ThreadTaskRunnerHandle::Get(), |
99 base::MessageLoop::QuitWhenIdleClosure()); | 99 base::MessageLoop::QuitWhenIdleClosure()); |
100 } | 100 } |
101 | 101 |
102 EngineConnectionManager::EngineTransportType GetTransportType() { | |
103 const std::string kTcpTransport = "tcp"; | |
Kevin M
2016/10/25 18:49:22
Move these into the anonymous namespace and use co
perumaal
2016/10/25 23:02:39
Done.
| |
104 const std::string kGrpcTransport = "grpc"; | |
105 const auto transport_parsed = | |
Kevin M
2016/10/25 18:49:22
std::string
perumaal
2016/10/25 23:02:39
Done.
| |
106 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | |
107 kEngineTransport); | |
108 if (transport_parsed == kTcpTransport || transport_parsed.empty()) { | |
109 return EngineConnectionManager::EngineTransportType::TCP; | |
110 } else if (transport_parsed == kGrpcTransport) { | |
111 return EngineConnectionManager::EngineTransportType::GRPC; | |
112 } | |
113 LOG(FATAL) << "--engine-transport must either be empty or one of tcp, grpc."; | |
Kevin M
2016/10/25 18:49:22
Log the flag names using constants, since we got '
perumaal
2016/10/25 23:02:39
Done.
| |
114 return EngineConnectionManager::EngineTransportType::TCP; | |
115 } | |
116 | |
102 net::IPAddress GetListeningAddress() { | 117 net::IPAddress GetListeningAddress() { |
103 if (base::CommandLine::ForCurrentProcess()->HasSwitch(kAllowNonLocalhost)) { | 118 if (base::CommandLine::ForCurrentProcess()->HasSwitch(kAllowNonLocalhost)) { |
104 return net::IPAddress::IPv4AllZeros(); | 119 return net::IPAddress::IPv4AllZeros(); |
105 } | 120 } |
106 return net::IPAddress::IPv4Localhost(); | 121 return net::IPAddress::IPv4Localhost(); |
107 } | 122 } |
108 | 123 |
109 uint16_t GetListeningPort() { | 124 uint16_t GetListeningPort() { |
110 unsigned port_parsed = 0; | 125 unsigned port_parsed = 0; |
111 if (!base::StringToUint( | 126 if (!base::StringToUint( |
(...skipping 20 matching lines...) Expand all Loading... | |
132 explicit EngineNetworkComponents(net::NetLog* net_log); | 147 explicit EngineNetworkComponents(net::NetLog* net_log); |
133 ~EngineNetworkComponents() override; | 148 ~EngineNetworkComponents() override; |
134 | 149 |
135 // Sets up network components and starts listening for incoming connection. | 150 // Sets up network components and starts listening for incoming connection. |
136 // This should be called after all features have been registered so that | 151 // This should be called after all features have been registered so that |
137 // received messages can be properly handled. | 152 // received messages can be properly handled. |
138 void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 153 void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
139 base::WeakPtr<BlobChannelSender> blob_channel_sender, | 154 base::WeakPtr<BlobChannelSender> blob_channel_sender, |
140 const std::string& client_token); | 155 const std::string& client_token); |
141 | 156 |
142 uint16_t GetPortForTesting() { return port_; } | 157 uint16_t GetPortForTesting() { return GetListeningPort(); } |
Garrett Casto
2016/10/25 18:33:50
I'm surprised that this doesn't break the browser_
Kevin M
2016/10/25 18:49:22
Why make this change? For the e2e tests, this meth
perumaal
2016/10/25 23:02:39
I wanted to minimize the usage of port numbers as
| |
143 | 158 |
144 BrowserConnectionHandler* connection_handler() { | 159 BrowserConnectionHandler* connection_handler() { |
145 return &connection_handler_; | 160 return &connection_handler_; |
146 } | 161 } |
147 | 162 |
148 BlobChannelService* blob_channel_service() { | 163 BlobChannelService* blob_channel_service() { |
149 return blob_channel_service_.get(); | 164 return blob_channel_service_.get(); |
150 } | 165 } |
151 | 166 |
152 private: | 167 private: |
153 // ConnectionHandler implementation. | 168 // ConnectionHandler implementation. |
154 void HandleConnection(std::unique_ptr<BlimpConnection> connection) override; | 169 void HandleConnection(std::unique_ptr<BlimpConnection> connection) override; |
155 | 170 |
156 // ConnectionErrorObserver implementation. | 171 // ConnectionErrorObserver implementation. |
157 // Signals the engine session that an authenticated connection was | 172 // Signals the engine session that an authenticated connection was |
158 // terminated. | 173 // terminated. |
159 void OnConnectionError(int error) override; | 174 void OnConnectionError(int error) override; |
160 | 175 |
161 net::NetLog* net_log_; | 176 net::NetLog* net_log_; |
162 uint16_t port_ = 0; | |
163 | 177 |
164 BrowserConnectionHandler connection_handler_; | 178 BrowserConnectionHandler connection_handler_; |
165 std::unique_ptr<EngineAuthenticationHandler> authentication_handler_; | 179 std::unique_ptr<EngineAuthenticationHandler> authentication_handler_; |
166 std::unique_ptr<EngineConnectionManager> connection_manager_; | 180 std::unique_ptr<EngineConnectionManager> connection_manager_; |
167 std::unique_ptr<BlobChannelService> blob_channel_service_; | 181 std::unique_ptr<BlobChannelService> blob_channel_service_; |
168 base::Closure quit_closure_; | 182 base::Closure quit_closure_; |
169 | 183 |
170 DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents); | 184 DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents); |
171 }; | 185 }; |
172 | 186 |
173 EngineNetworkComponents::EngineNetworkComponents(net::NetLog* net_log) | 187 EngineNetworkComponents::EngineNetworkComponents(net::NetLog* net_log) |
174 : net_log_(net_log), quit_closure_(QuitCurrentMessageLoopClosure()) {} | 188 : net_log_(net_log), quit_closure_(QuitCurrentMessageLoopClosure()) {} |
175 | 189 |
176 EngineNetworkComponents::~EngineNetworkComponents() { | 190 EngineNetworkComponents::~EngineNetworkComponents() { |
177 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 191 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
178 } | 192 } |
179 | 193 |
180 void EngineNetworkComponents::Initialize( | 194 void EngineNetworkComponents::Initialize( |
181 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | 195 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
182 base::WeakPtr<BlobChannelSender> blob_channel_sender, | 196 base::WeakPtr<BlobChannelSender> blob_channel_sender, |
183 const std::string& client_token) { | 197 const std::string& client_token) { |
184 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 198 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
185 DCHECK(!connection_manager_); | 199 DCHECK(!connection_manager_); |
186 // Plumb authenticated connections from the authentication handler | 200 // Plumb authenticated connections from the authentication handler |
187 // to |this| (which will then pass it to |connection_handler_|. | 201 // to |this| (which will then pass it to |connection_handler_|. |
188 authentication_handler_ = | 202 authentication_handler_ = |
189 base::MakeUnique<EngineAuthenticationHandler>(this, client_token); | 203 base::MakeUnique<EngineAuthenticationHandler>(this, client_token); |
190 | 204 |
191 // Plumb unauthenticated connections to |authentication_handler_|. | 205 // Plumb unauthenticated connections to |authentication_handler_|. |
192 connection_manager_ = | 206 connection_manager_ = base::MakeUnique<EngineConnectionManager>( |
193 base::MakeUnique<EngineConnectionManager>(authentication_handler_.get()); | 207 authentication_handler_.get(), net_log_); |
194 | 208 |
195 blob_channel_service_ = | 209 blob_channel_service_ = |
196 base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner); | 210 base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner); |
197 | 211 |
198 // Adds BlimpTransports to connection_manager_. | 212 // Adds BlimpTransports to connection_manager_. |
199 net::IPEndPoint address(GetListeningAddress(), GetListeningPort()); | 213 net::IPEndPoint address(GetListeningAddress(), GetListeningPort()); |
200 TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_); | 214 connection_manager_->ConnectTransport(address, GetTransportType()); |
201 connection_manager_->AddTransport(base::WrapUnique(transport)); | |
202 | |
203 transport->GetLocalAddress(&address); | |
204 port_ = address.port(); | |
205 DVLOG(1) << "Engine port #: " << port_; | |
206 } | 215 } |
207 | 216 |
208 void EngineNetworkComponents::HandleConnection( | 217 void EngineNetworkComponents::HandleConnection( |
209 std::unique_ptr<BlimpConnection> connection) { | 218 std::unique_ptr<BlimpConnection> connection) { |
210 // Observe |connection| for disconnection events. | 219 // Observe |connection| for disconnection events. |
211 connection->AddConnectionErrorObserver(this); | 220 connection->AddConnectionErrorObserver(this); |
212 connection_handler_.HandleConnection(std::move(connection)); | 221 connection_handler_.HandleConnection(std::move(connection)); |
213 } | 222 } |
214 | 223 |
215 void EngineNetworkComponents::OnConnectionError(int error) { | 224 void EngineNetworkComponents::OnConnectionError(int error) { |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
566 parent->AddChild(content); | 575 parent->AddChild(content); |
567 content->Show(); | 576 content->Show(); |
568 | 577 |
569 tab_ = base::MakeUnique<Tab>(std::move(new_contents), target_tab_id, | 578 tab_ = base::MakeUnique<Tab>(std::move(new_contents), target_tab_id, |
570 &render_widget_feature_, | 579 &render_widget_feature_, |
571 navigation_message_sender_.get()); | 580 navigation_message_sender_.get()); |
572 } | 581 } |
573 | 582 |
574 } // namespace engine | 583 } // namespace engine |
575 } // namespace blimp | 584 } // namespace blimp |
OLD | NEW |