| 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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 } | 120 } |
| 121 | 121 |
| 122 } // namespace | 122 } // namespace |
| 123 | 123 |
| 124 // EngineNetworkComponents is created by the BlimpEngineSession on the UI | 124 // EngineNetworkComponents is created by the BlimpEngineSession on the UI |
| 125 // thread, and then used and destroyed on the IO thread. | 125 // thread, and then used and destroyed on the IO thread. |
| 126 class EngineNetworkComponents : public ConnectionHandler, | 126 class EngineNetworkComponents : public ConnectionHandler, |
| 127 public ConnectionErrorObserver { | 127 public ConnectionErrorObserver { |
| 128 public: | 128 public: |
| 129 // |net_log|: The log to use for network-related events. | 129 // |net_log|: The log to use for network-related events. |
| 130 // |quit_closure|: A closure which will terminate the engine when | 130 explicit EngineNetworkComponents(net::NetLog* net_log); |
| 131 // invoked. | |
| 132 EngineNetworkComponents(net::NetLog* net_log, | |
| 133 const base::Closure& quit_closure); | |
| 134 ~EngineNetworkComponents() override; | 131 ~EngineNetworkComponents() override; |
| 135 | 132 |
| 136 // Sets up network components and starts listening for incoming connection. | 133 // Sets up network components and starts listening for incoming connection. |
| 137 // This should be called after all features have been registered so that | 134 // This should be called after all features have been registered so that |
| 138 // received messages can be properly handled. | 135 // received messages can be properly handled. |
| 139 void Initialize(const std::string& client_token); | 136 void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
| 137 base::WeakPtr<BlobChannelSender> blob_channel_sender, |
| 138 const std::string& client_token); |
| 140 | 139 |
| 141 uint16_t GetPortForTesting() { return port_; } | 140 uint16_t GetPortForTesting() { return port_; } |
| 142 | 141 |
| 143 BrowserConnectionHandler* GetBrowserConnectionHandler(); | 142 BrowserConnectionHandler* connection_handler() { |
| 143 return &connection_handler_; |
| 144 } |
| 145 |
| 146 BlobChannelService* blob_channel_service() { |
| 147 return blob_channel_service_.get(); |
| 148 } |
| 144 | 149 |
| 145 private: | 150 private: |
| 146 // ConnectionHandler implementation. | 151 // ConnectionHandler implementation. |
| 147 void HandleConnection(std::unique_ptr<BlimpConnection> connection) override; | 152 void HandleConnection(std::unique_ptr<BlimpConnection> connection) override; |
| 148 | 153 |
| 149 // ConnectionErrorObserver implementation. | 154 // ConnectionErrorObserver implementation. |
| 150 // Signals the engine session that an authenticated connection was | 155 // Signals the engine session that an authenticated connection was |
| 151 // terminated. | 156 // terminated. |
| 152 void OnConnectionError(int error) override; | 157 void OnConnectionError(int error) override; |
| 153 | 158 |
| 154 net::NetLog* net_log_; | 159 net::NetLog* net_log_; |
| 155 base::Closure quit_closure_; | |
| 156 uint16_t port_ = 0; | 160 uint16_t port_ = 0; |
| 157 | 161 |
| 158 std::unique_ptr<BrowserConnectionHandler> connection_handler_; | 162 BrowserConnectionHandler connection_handler_; |
| 159 std::unique_ptr<EngineAuthenticationHandler> authentication_handler_; | 163 std::unique_ptr<EngineAuthenticationHandler> authentication_handler_; |
| 160 std::unique_ptr<EngineConnectionManager> connection_manager_; | 164 std::unique_ptr<EngineConnectionManager> connection_manager_; |
| 165 std::unique_ptr<BlobChannelService> blob_channel_service_; |
| 166 base::Closure quit_closure_; |
| 161 | 167 |
| 162 DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents); | 168 DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents); |
| 163 }; | 169 }; |
| 164 | 170 |
| 165 EngineNetworkComponents::EngineNetworkComponents( | 171 EngineNetworkComponents::EngineNetworkComponents(net::NetLog* net_log) |
| 166 net::NetLog* net_log, | 172 : net_log_(net_log), quit_closure_(QuitCurrentMessageLoopClosure()) {} |
| 167 const base::Closure& quit_closure) | |
| 168 : net_log_(net_log), | |
| 169 quit_closure_(quit_closure), | |
| 170 connection_handler_(new BrowserConnectionHandler) {} | |
| 171 | 173 |
| 172 EngineNetworkComponents::~EngineNetworkComponents() { | 174 EngineNetworkComponents::~EngineNetworkComponents() { |
| 173 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 175 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 174 } | 176 } |
| 175 | 177 |
| 176 void EngineNetworkComponents::Initialize(const std::string& client_token) { | 178 void EngineNetworkComponents::Initialize( |
| 179 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
| 180 base::WeakPtr<BlobChannelSender> blob_channel_sender, |
| 181 const std::string& client_token) { |
| 177 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 182 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 178 DCHECK(!connection_manager_); | 183 DCHECK(!connection_manager_); |
| 179 // Plumb authenticated connections from the authentication handler | 184 // Plumb authenticated connections from the authentication handler |
| 180 // to |this| (which will then pass it to |connection_handler_|. | 185 // to |this| (which will then pass it to |connection_handler_|. |
| 181 authentication_handler_ = | 186 authentication_handler_ = |
| 182 base::WrapUnique(new EngineAuthenticationHandler(this, client_token)); | 187 base::MakeUnique<EngineAuthenticationHandler>(this, client_token); |
| 183 | 188 |
| 184 // Plumb unauthenticated connections to |authentication_handler_|. | 189 // Plumb unauthenticated connections to |authentication_handler_|. |
| 185 connection_manager_ = base::WrapUnique( | 190 connection_manager_ = base::WrapUnique( |
| 186 new EngineConnectionManager(authentication_handler_.get())); | 191 new EngineConnectionManager(authentication_handler_.get())); |
| 187 | 192 |
| 193 blob_channel_service_ = |
| 194 base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner); |
| 195 |
| 188 // Adds BlimpTransports to connection_manager_. | 196 // Adds BlimpTransports to connection_manager_. |
| 189 net::IPEndPoint address(GetIPv4AnyAddress(), GetListeningPort()); | 197 net::IPEndPoint address(GetIPv4AnyAddress(), GetListeningPort()); |
| 190 TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_); | 198 TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_); |
| 191 connection_manager_->AddTransport(base::WrapUnique(transport)); | 199 connection_manager_->AddTransport(base::WrapUnique(transport)); |
| 192 | 200 |
| 193 transport->GetLocalAddress(&address); | 201 transport->GetLocalAddress(&address); |
| 194 port_ = address.port(); | 202 port_ = address.port(); |
| 195 DVLOG(1) << "Engine port #: " << port_; | 203 DVLOG(1) << "Engine port #: " << port_; |
| 196 } | 204 } |
| 197 | 205 |
| 198 void EngineNetworkComponents::HandleConnection( | 206 void EngineNetworkComponents::HandleConnection( |
| 199 std::unique_ptr<BlimpConnection> connection) { | 207 std::unique_ptr<BlimpConnection> connection) { |
| 200 // Observe |connection| for disconnection events. | 208 // Observe |connection| for disconnection events. |
| 201 connection->AddConnectionErrorObserver(this); | 209 connection->AddConnectionErrorObserver(this); |
| 202 connection_handler_->HandleConnection(std::move(connection)); | 210 connection_handler_.HandleConnection(std::move(connection)); |
| 203 } | 211 } |
| 204 | 212 |
| 205 void EngineNetworkComponents::OnConnectionError(int error) { | 213 void EngineNetworkComponents::OnConnectionError(int error) { |
| 206 DVLOG(1) << "EngineNetworkComponents::OnConnectionError(" << error << ")"; | 214 DVLOG(1) << "EngineNetworkComponents::OnConnectionError(" << error << ")"; |
| 207 quit_closure_.Run(); | 215 quit_closure_.Run(); |
| 208 } | 216 } |
| 209 | 217 |
| 210 BrowserConnectionHandler* | |
| 211 EngineNetworkComponents::GetBrowserConnectionHandler() { | |
| 212 return connection_handler_.get(); | |
| 213 } | |
| 214 | |
| 215 BlimpEngineSession::BlimpEngineSession( | 218 BlimpEngineSession::BlimpEngineSession( |
| 216 std::unique_ptr<BlimpBrowserContext> browser_context, | 219 std::unique_ptr<BlimpBrowserContext> browser_context, |
| 217 net::NetLog* net_log, | 220 net::NetLog* net_log, |
| 218 BlimpEngineConfig* engine_config, | 221 BlimpEngineConfig* engine_config, |
| 219 SettingsManager* settings_manager) | 222 SettingsManager* settings_manager) |
| 220 : screen_(new BlimpScreen), | 223 : screen_(new BlimpScreen), |
| 221 browser_context_(std::move(browser_context)), | 224 browser_context_(std::move(browser_context)), |
| 222 engine_config_(engine_config), | 225 engine_config_(engine_config), |
| 223 settings_manager_(settings_manager), | 226 settings_manager_(settings_manager), |
| 224 settings_feature_(settings_manager_), | 227 settings_feature_(settings_manager_), |
| 225 render_widget_feature_(settings_manager_), | 228 render_widget_feature_(settings_manager_), |
| 226 net_components_( | 229 net_components_(new EngineNetworkComponents(net_log)) { |
| 227 new EngineNetworkComponents(net_log, | |
| 228 QuitCurrentMessageLoopClosure())) { | |
| 229 DCHECK(engine_config_); | 230 DCHECK(engine_config_); |
| 230 DCHECK(settings_manager_); | 231 DCHECK(settings_manager_); |
| 231 | 232 |
| 232 screen_->UpdateDisplayScaleAndSize( | 233 screen_->UpdateDisplayScaleAndSize( |
| 233 kDefaultScaleFactor, | 234 kDefaultScaleFactor, |
| 234 gfx::Size(kDefaultDisplayWidth, kDefaultDisplayHeight)); | 235 gfx::Size(kDefaultDisplayWidth, kDefaultDisplayHeight)); |
| 235 render_widget_feature_.SetDelegate(kDummyTabId, this); | 236 render_widget_feature_.SetDelegate(kDummyTabId, this); |
| 236 | 237 |
| 237 std::unique_ptr<HeliumBlobSenderDelegate> helium_blob_delegate( | 238 std::unique_ptr<HeliumBlobSenderDelegate> helium_blob_delegate( |
| 238 new HeliumBlobSenderDelegate); | 239 new HeliumBlobSenderDelegate); |
| 239 blob_delegate_ = helium_blob_delegate.get(); | 240 blob_delegate_ = helium_blob_delegate.get(); |
| 240 blob_channel_sender_ = base::WrapUnique( | 241 blob_channel_sender_ = base::MakeUnique<BlobChannelSenderImpl>( |
| 241 new BlobChannelSenderImpl(base::WrapUnique(new InMemoryBlobCache), | 242 base::MakeUnique<InMemoryBlobCache>(), std::move(helium_blob_delegate)); |
| 242 std::move(helium_blob_delegate))); | 243 blob_channel_sender_weak_factory_ = |
| 243 blob_channel_service_ = | 244 base::MakeUnique<base::WeakPtrFactory<BlobChannelSenderImpl>>( |
| 244 base::MakeUnique<BlobChannelService>(blob_channel_sender_.get()); | 245 blob_channel_sender_.get()); |
| 246 |
| 245 device::GeolocationProvider::SetGeolocationDelegate( | 247 device::GeolocationProvider::SetGeolocationDelegate( |
| 246 geolocation_feature_.CreateGeolocationDelegate()); | 248 geolocation_feature_.CreateGeolocationDelegate()); |
| 247 } | 249 } |
| 248 | 250 |
| 249 BlimpEngineSession::~BlimpEngineSession() { | 251 BlimpEngineSession::~BlimpEngineSession() { |
| 250 render_widget_feature_.RemoveDelegate(kDummyTabId); | 252 render_widget_feature_.RemoveDelegate(kDummyTabId); |
| 251 | 253 |
| 252 window_tree_host_->GetInputMethod()->RemoveObserver(this); | 254 window_tree_host_->GetInputMethod()->RemoveObserver(this); |
| 253 | 255 |
| 254 // Ensure that all tabs are torn down first, since teardown will | 256 // Ensure that all tabs are torn down first, since teardown will |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 window_tree_host_->SetBounds(gfx::Rect(screen_->GetPrimaryDisplay().size())); | 290 window_tree_host_->SetBounds(gfx::Rect(screen_->GetPrimaryDisplay().size())); |
| 289 | 291 |
| 290 RegisterFeatures(); | 292 RegisterFeatures(); |
| 291 | 293 |
| 292 // Initialize must only be posted after the RegisterFeature calls have | 294 // Initialize must only be posted after the RegisterFeature calls have |
| 293 // completed. | 295 // completed. |
| 294 content::BrowserThread::PostTask( | 296 content::BrowserThread::PostTask( |
| 295 content::BrowserThread::IO, FROM_HERE, | 297 content::BrowserThread::IO, FROM_HERE, |
| 296 base::Bind(&EngineNetworkComponents::Initialize, | 298 base::Bind(&EngineNetworkComponents::Initialize, |
| 297 base::Unretained(net_components_.get()), | 299 base::Unretained(net_components_.get()), |
| 300 base::ThreadTaskRunnerHandle::Get(), |
| 301 blob_channel_sender_weak_factory_->GetWeakPtr(), |
| 298 engine_config_->client_token())); | 302 engine_config_->client_token())); |
| 299 } | 303 } |
| 300 | 304 |
| 305 BlobChannelService* BlimpEngineSession::GetBlobChannelService() { |
| 306 return net_components_->blob_channel_service(); |
| 307 } |
| 308 |
| 301 void BlimpEngineSession::GetEnginePortForTesting( | 309 void BlimpEngineSession::GetEnginePortForTesting( |
| 302 const GetPortCallback& callback) { | 310 const GetPortCallback& callback) { |
| 303 content::BrowserThread::PostTaskAndReplyWithResult( | 311 content::BrowserThread::PostTaskAndReplyWithResult( |
| 304 content::BrowserThread::IO, FROM_HERE, | 312 content::BrowserThread::IO, FROM_HERE, |
| 305 base::Bind(&EngineNetworkComponents::GetPortForTesting, | 313 base::Bind(&EngineNetworkComponents::GetPortForTesting, |
| 306 base::Unretained(net_components_.get())), | 314 base::Unretained(net_components_.get())), |
| 307 callback); | 315 callback); |
| 308 } | 316 } |
| 309 | 317 |
| 310 void BlimpEngineSession::RegisterFeatures() { | 318 void BlimpEngineSession::RegisterFeatures() { |
| 311 thread_pipe_manager_.reset( | 319 thread_pipe_manager_.reset( |
| 312 new ThreadPipeManager(content::BrowserThread::GetTaskRunnerForThread( | 320 new ThreadPipeManager(content::BrowserThread::GetTaskRunnerForThread( |
| 313 content::BrowserThread::IO), | 321 content::BrowserThread::IO), |
| 314 net_components_->GetBrowserConnectionHandler())); | 322 net_components_->connection_handler())); |
| 315 | 323 |
| 316 // Register features' message senders and receivers. | 324 // Register features' message senders and receivers. |
| 317 tab_control_message_sender_ = | 325 tab_control_message_sender_ = |
| 318 thread_pipe_manager_->RegisterFeature(BlimpMessage::kTabControl, this); | 326 thread_pipe_manager_->RegisterFeature(BlimpMessage::kTabControl, this); |
| 319 navigation_message_sender_ = | 327 navigation_message_sender_ = |
| 320 thread_pipe_manager_->RegisterFeature(BlimpMessage::kNavigation, this); | 328 thread_pipe_manager_->RegisterFeature(BlimpMessage::kNavigation, this); |
| 321 render_widget_feature_.set_render_widget_message_sender( | 329 render_widget_feature_.set_render_widget_message_sender( |
| 322 thread_pipe_manager_->RegisterFeature(BlimpMessage::kRenderWidget, | 330 thread_pipe_manager_->RegisterFeature(BlimpMessage::kRenderWidget, |
| 323 &render_widget_feature_)); | 331 &render_widget_feature_)); |
| 324 render_widget_feature_.set_input_message_sender( | 332 render_widget_feature_.set_input_message_sender( |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 parent->AddChild(content); | 580 parent->AddChild(content); |
| 573 content->Show(); | 581 content->Show(); |
| 574 | 582 |
| 575 tab_ = base::WrapUnique(new Tab(std::move(new_contents), target_tab_id, | 583 tab_ = base::WrapUnique(new Tab(std::move(new_contents), target_tab_id, |
| 576 &render_widget_feature_, | 584 &render_widget_feature_, |
| 577 navigation_message_sender_.get())); | 585 navigation_message_sender_.get())); |
| 578 } | 586 } |
| 579 | 587 |
| 580 } // namespace engine | 588 } // namespace engine |
| 581 } // namespace blimp | 589 } // namespace blimp |
| OLD | NEW |