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 |