Index: blimp/client/core/blimp_client_context_impl.cc |
diff --git a/blimp/client/core/blimp_client_context_impl.cc b/blimp/client/core/blimp_client_context_impl.cc |
index 115fd075678d20dca13bda6318348a8395742519..aac482ff06c6eb97f096af830f75105783a299c3 100644 |
--- a/blimp/client/core/blimp_client_context_impl.cc |
+++ b/blimp/client/core/blimp_client_context_impl.cc |
@@ -4,9 +4,13 @@ |
#include "blimp/client/core/blimp_client_context_impl.h" |
+#include "base/bind.h" |
#include "base/memory/ptr_util.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/supports_user_data.h" |
+#include "base/threading/sequenced_task_runner_handle.h" |
#include "blimp/client/core/contents/blimp_contents_impl.h" |
+#include "blimp/client/core/session/cross_thread_network_event_observer.h" |
#include "blimp/client/public/blimp_client_context_delegate.h" |
#if defined(OS_ANDROID) |
@@ -33,9 +37,35 @@ BlimpClientContext* BlimpClientContext::Create() { |
return new BlimpClientContextImpl(); |
} |
-BlimpClientContextImpl::BlimpClientContextImpl() : BlimpClientContext() {} |
+BlimpClientContextImpl::BlimpClientContextImpl() |
+ : BlimpClientContext(), io_thread_("BlimpIOThread"), weak_factory_(this) { |
+ base::Thread::Options options; |
+ options.message_loop_type = base::MessageLoop::TYPE_IO; |
+ io_thread_.StartWithOptions(options); |
+ blimp_connection_statistics_ = new BlimpConnectionStatistics(); |
+ net_components_.reset(new ClientNetworkComponents( |
+ base::WrapUnique(new CrossThreadNetworkEventObserver( |
+ weak_factory_.GetWeakPtr(), base::SequencedTaskRunnerHandle::Get())), |
+ base::WrapUnique(blimp_connection_statistics_))); |
+ |
+ RegisterFeatures(); |
+ |
+ // Initialize must only be posted after the RegisterFeature calls have |
+ // completed. |
+ io_thread_.task_runner()->PostTask( |
+ FROM_HERE, base::Bind(&ClientNetworkComponents::Initialize, |
+ base::Unretained(net_components_.get()))); |
+} |
+ |
+BlimpClientContextImpl::~BlimpClientContextImpl() { |
+ io_thread_.task_runner()->DeleteSoon(FROM_HERE, net_components_.release()); |
+} |
-BlimpClientContextImpl::~BlimpClientContextImpl() {} |
+void BlimpClientContextImpl::RegisterFeatures() { |
+ thread_pipe_manager_ = base::WrapUnique( |
+ new ThreadPipeManager(io_thread_.task_runner(), |
+ net_components_->GetBrowserConnectionHandler())); |
+} |
#if defined(OS_ANDROID) |
@@ -71,5 +101,9 @@ std::unique_ptr<BlimpContents> BlimpClientContextImpl::CreateBlimpContents() { |
return blimp_contents; |
} |
+void BlimpClientContextImpl::OnConnected() {} |
+ |
+void BlimpClientContextImpl::OnDisconnected(int result) {} |
+ |
} // namespace client |
} // namespace blimp |