Chromium Code Reviews| Index: blimp/engine/session/blimp_engine_session.cc |
| diff --git a/blimp/engine/session/blimp_engine_session.cc b/blimp/engine/session/blimp_engine_session.cc |
| index b8f00a7372345612bd7d0f7b5fac7179932ce26e..1d6fffd4cca78deda0f15b20950f94f9626edc21 100644 |
| --- a/blimp/engine/session/blimp_engine_session.cc |
| +++ b/blimp/engine/session/blimp_engine_session.cc |
| @@ -136,11 +136,19 @@ class EngineNetworkComponents : public ConnectionHandler, |
| // Sets up network components and starts listening for incoming connection. |
| // This should be called after all features have been registered so that |
| // received messages can be properly handled. |
| - void Initialize(const std::string& client_token); |
| + void Initialize(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
|
Wez
2016/08/19 19:15:50
nit: Consider replacing the quit_closure ctor para
Kevin M
2016/08/19 21:43:33
I just made NetworkComponents compute the quit clo
|
| + base::WeakPtr<BlobChannelSender> blob_channel_sender, |
| + const std::string& client_token); |
| uint16_t GetPortForTesting() { return port_; } |
| - BrowserConnectionHandler* GetBrowserConnectionHandler(); |
| + BrowserConnectionHandler* connection_handler() { |
| + return &connection_handler_; |
| + } |
| + |
| + BlobChannelService* blob_channel_service() { |
| + return blob_channel_service_.get(); |
| + } |
| private: |
| // ConnectionHandler implementation. |
| @@ -155,9 +163,10 @@ class EngineNetworkComponents : public ConnectionHandler, |
| base::Closure quit_closure_; |
| uint16_t port_ = 0; |
| - std::unique_ptr<BrowserConnectionHandler> connection_handler_; |
| + BrowserConnectionHandler connection_handler_; |
| std::unique_ptr<EngineAuthenticationHandler> authentication_handler_; |
| std::unique_ptr<EngineConnectionManager> connection_manager_; |
| + std::unique_ptr<BlobChannelService> blob_channel_service_; |
| DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents); |
| }; |
| @@ -166,14 +175,16 @@ EngineNetworkComponents::EngineNetworkComponents( |
| net::NetLog* net_log, |
| const base::Closure& quit_closure) |
| : net_log_(net_log), |
| - quit_closure_(quit_closure), |
| - connection_handler_(new BrowserConnectionHandler) {} |
| + quit_closure_(quit_closure) {} |
| EngineNetworkComponents::~EngineNetworkComponents() { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| } |
| -void EngineNetworkComponents::Initialize(const std::string& client_token) { |
| +void EngineNetworkComponents::Initialize( |
| + scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, |
| + base::WeakPtr<BlobChannelSender> blob_channel_sender, |
| + const std::string& client_token) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| DCHECK(!connection_manager_); |
| // Plumb authenticated connections from the authentication handler |
| @@ -185,6 +196,9 @@ void EngineNetworkComponents::Initialize(const std::string& client_token) { |
| connection_manager_ = base::WrapUnique( |
| new EngineConnectionManager(authentication_handler_.get())); |
| + blob_channel_service_ = |
| + base::MakeUnique<BlobChannelService>(blob_channel_sender, ui_task_runner); |
| + |
| // Adds BlimpTransports to connection_manager_. |
| net::IPEndPoint address(GetIPv4AnyAddress(), GetListeningPort()); |
| TCPEngineTransport* transport = new TCPEngineTransport(address, net_log_); |
| @@ -199,7 +213,7 @@ void EngineNetworkComponents::HandleConnection( |
| std::unique_ptr<BlimpConnection> connection) { |
| // Observe |connection| for disconnection events. |
| connection->AddConnectionErrorObserver(this); |
| - connection_handler_->HandleConnection(std::move(connection)); |
| + connection_handler_.HandleConnection(std::move(connection)); |
| } |
| void EngineNetworkComponents::OnConnectionError(int error) { |
| @@ -207,11 +221,6 @@ void EngineNetworkComponents::OnConnectionError(int error) { |
| quit_closure_.Run(); |
| } |
| -BrowserConnectionHandler* |
| -EngineNetworkComponents::GetBrowserConnectionHandler() { |
| - return connection_handler_.get(); |
| -} |
| - |
| BlimpEngineSession::BlimpEngineSession( |
| std::unique_ptr<BlimpBrowserContext> browser_context, |
| net::NetLog* net_log, |
| @@ -240,8 +249,6 @@ BlimpEngineSession::BlimpEngineSession( |
| blob_channel_sender_ = base::WrapUnique( |
| new BlobChannelSenderImpl(base::WrapUnique(new InMemoryBlobCache), |
| std::move(helium_blob_delegate))); |
| - blob_channel_service_ = |
| - base::MakeUnique<BlobChannelService>(blob_channel_sender_.get()); |
| device::GeolocationProvider::SetGeolocationDelegate( |
| geolocation_feature_.CreateGeolocationDelegate()); |
| } |
| @@ -295,9 +302,15 @@ void BlimpEngineSession::Initialize() { |
| content::BrowserThread::IO, FROM_HERE, |
| base::Bind(&EngineNetworkComponents::Initialize, |
| base::Unretained(net_components_.get()), |
| + base::ThreadTaskRunnerHandle::Get(), |
| + blob_channel_sender_->GetWeakPtr(), |
| engine_config_->client_token())); |
| } |
| +BlobChannelService* BlimpEngineSession::GetBlobChannelService() { |
| + return net_components_->blob_channel_service(); |
| +} |
| + |
| void BlimpEngineSession::GetEnginePortForTesting( |
| const GetPortCallback& callback) { |
| content::BrowserThread::PostTaskAndReplyWithResult( |
| @@ -311,7 +324,7 @@ void BlimpEngineSession::RegisterFeatures() { |
| thread_pipe_manager_.reset( |
| new ThreadPipeManager(content::BrowserThread::GetTaskRunnerForThread( |
| content::BrowserThread::IO), |
| - net_components_->GetBrowserConnectionHandler())); |
| + net_components_->connection_handler())); |
| // Register features' message senders and receivers. |
| tab_control_message_sender_ = |