| 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..9314b52799817539261a776eec8afe2db29e3c8c 100644
|
| --- a/blimp/engine/session/blimp_engine_session.cc
|
| +++ b/blimp/engine/session/blimp_engine_session.cc
|
| @@ -127,20 +127,25 @@ class EngineNetworkComponents : public ConnectionHandler,
|
| public ConnectionErrorObserver {
|
| public:
|
| // |net_log|: The log to use for network-related events.
|
| - // |quit_closure|: A closure which will terminate the engine when
|
| - // invoked.
|
| - EngineNetworkComponents(net::NetLog* net_log,
|
| - const base::Closure& quit_closure);
|
| + explicit EngineNetworkComponents(net::NetLog* net_log);
|
| ~EngineNetworkComponents() override;
|
|
|
| // 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,
|
| + 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.
|
| @@ -152,39 +157,42 @@ class EngineNetworkComponents : public ConnectionHandler,
|
| void OnConnectionError(int error) override;
|
|
|
| net::NetLog* net_log_;
|
| - 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_;
|
| + base::Closure quit_closure_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(EngineNetworkComponents);
|
| };
|
|
|
| -EngineNetworkComponents::EngineNetworkComponents(
|
| - net::NetLog* net_log,
|
| - const base::Closure& quit_closure)
|
| - : net_log_(net_log),
|
| - quit_closure_(quit_closure),
|
| - connection_handler_(new BrowserConnectionHandler) {}
|
| +EngineNetworkComponents::EngineNetworkComponents(net::NetLog* net_log)
|
| + : net_log_(net_log), quit_closure_(QuitCurrentMessageLoopClosure()) {}
|
|
|
| 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
|
| // to |this| (which will then pass it to |connection_handler_|.
|
| authentication_handler_ =
|
| - base::WrapUnique(new EngineAuthenticationHandler(this, client_token));
|
| + base::MakeUnique<EngineAuthenticationHandler>(this, client_token);
|
|
|
| // Plumb unauthenticated connections to |authentication_handler_|.
|
| 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 +207,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 +215,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,
|
| @@ -223,9 +226,7 @@ BlimpEngineSession::BlimpEngineSession(
|
| settings_manager_(settings_manager),
|
| settings_feature_(settings_manager_),
|
| render_widget_feature_(settings_manager_),
|
| - net_components_(
|
| - new EngineNetworkComponents(net_log,
|
| - QuitCurrentMessageLoopClosure())) {
|
| + net_components_(new EngineNetworkComponents(net_log)) {
|
| DCHECK(engine_config_);
|
| DCHECK(settings_manager_);
|
|
|
| @@ -237,11 +238,12 @@ BlimpEngineSession::BlimpEngineSession(
|
| std::unique_ptr<HeliumBlobSenderDelegate> helium_blob_delegate(
|
| new HeliumBlobSenderDelegate);
|
| blob_delegate_ = helium_blob_delegate.get();
|
| - 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());
|
| + blob_channel_sender_ = base::MakeUnique<BlobChannelSenderImpl>(
|
| + base::MakeUnique<InMemoryBlobCache>(), std::move(helium_blob_delegate));
|
| + blob_channel_sender_weak_factory_ =
|
| + base::MakeUnique<base::WeakPtrFactory<BlobChannelSenderImpl>>(
|
| + blob_channel_sender_.get());
|
| +
|
| device::GeolocationProvider::SetGeolocationDelegate(
|
| geolocation_feature_.CreateGeolocationDelegate());
|
| }
|
| @@ -295,9 +297,15 @@ void BlimpEngineSession::Initialize() {
|
| content::BrowserThread::IO, FROM_HERE,
|
| base::Bind(&EngineNetworkComponents::Initialize,
|
| base::Unretained(net_components_.get()),
|
| + base::ThreadTaskRunnerHandle::Get(),
|
| + blob_channel_sender_weak_factory_->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 +319,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_ =
|
|
|