| Index: extensions/browser/api/cast_channel/cast_channel_api.cc
|
| diff --git a/extensions/browser/api/cast_channel/cast_channel_api.cc b/extensions/browser/api/cast_channel/cast_channel_api.cc
|
| index 44844998823895d8847dae9ad8b29b703039a578..ae250d7df3c22410d334f436d2a565a1b183466a 100644
|
| --- a/extensions/browser/api/cast_channel/cast_channel_api.cc
|
| +++ b/extensions/browser/api/cast_channel/cast_channel_api.cc
|
| @@ -216,9 +216,7 @@ void CastChannelAsyncApiFunction::SetResultFromChannelInfo(
|
| SetResult(channel_info.ToValue());
|
| }
|
|
|
| -CastChannelOpenFunction::CastChannelOpenFunction()
|
| - : new_channel_id_(0) {
|
| -}
|
| +CastChannelOpenFunction::CastChannelOpenFunction() {}
|
|
|
| CastChannelOpenFunction::~CastChannelOpenFunction() { }
|
|
|
| @@ -278,21 +276,10 @@ void CastChannelOpenFunction::AsyncWorkStart() {
|
| DCHECK(api_);
|
| DCHECK(ip_endpoint_.get());
|
| const ConnectInfo& connect_info = params_->connect_info;
|
| - CastSocket* socket;
|
| +
|
| std::unique_ptr<CastSocket> test_socket = api_->GetSocketForTest();
|
| - if (test_socket.get()) {
|
| - socket = test_socket.release();
|
| - } else {
|
| - socket = new CastSocketImpl(
|
| - *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(),
|
| - base::TimeDelta::FromMilliseconds(connect_info.timeout.get()
|
| - ? *connect_info.timeout
|
| - : kDefaultConnectTimeoutMillis),
|
| - liveness_timeout_, ping_interval_, api_->GetLogger(),
|
| - connect_info.capabilities.get() ? *connect_info.capabilities
|
| - : CastDeviceCapability::NONE);
|
| - }
|
| - new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket));
|
| + if (test_socket.get())
|
| + cast_socket_service_->SetSocketForTest(std::move(test_socket));
|
|
|
| auto* observer = cast_socket_service_->GetObserver(extension_->id());
|
| if (!observer) {
|
| @@ -303,25 +290,30 @@ void CastChannelOpenFunction::AsyncWorkStart() {
|
| api_->GetLogger()));
|
| }
|
|
|
| - socket->AddObserver(observer);
|
| - // Construct read delegates.
|
| - socket->Connect(base::Bind(&CastChannelOpenFunction::OnOpen, this));
|
| + cast_socket_service_->OpenSocket(
|
| + *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(),
|
| + base::TimeDelta::FromMilliseconds(connect_info.timeout.get()
|
| + ? *connect_info.timeout
|
| + : kDefaultConnectTimeoutMillis),
|
| + liveness_timeout_, ping_interval_, api_->GetLogger(),
|
| + connect_info.capabilities.get() ? *connect_info.capabilities
|
| + : CastDeviceCapability::NONE,
|
| + base::Bind(&CastChannelOpenFunction::OnOpen, this), observer);
|
| }
|
|
|
| -void CastChannelOpenFunction::OnOpen(ChannelError result) {
|
| +void CastChannelOpenFunction::OnOpen(int channel_id, ChannelError result) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| VLOG(1) << "Connect finished, OnOpen invoked.";
|
| // TODO: If we failed to open the CastSocket, we may want to clean up here,
|
| // rather than relying on the extension to call close(). This can be done by
|
| // calling RemoveSocket() and api_->GetLogger()->ClearLastError(channel_id).
|
| if (result != ChannelError::UNKNOWN) {
|
| - CastSocket* socket = cast_socket_service_->GetSocket(new_channel_id_);
|
| + CastSocket* socket = cast_socket_service_->GetSocket(channel_id);
|
| CHECK(socket);
|
| SetResultFromSocket(*socket);
|
| } else {
|
| // The socket is being destroyed.
|
| - SetResultFromError(new_channel_id_,
|
| - api::cast_channel::CHANNEL_ERROR_UNKNOWN);
|
| + SetResultFromError(channel_id, api::cast_channel::CHANNEL_ERROR_UNKNOWN);
|
| }
|
|
|
| AsyncWorkCompleted();
|
|
|