Chromium Code Reviews| 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 |