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 b769c3954ecbd169076a81e85e4f2ff9447ec5a6..16bf1264840d3c066f7f928327216c2a492822b1 100644 |
--- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
+++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
@@ -224,9 +224,7 @@ void CastChannelAsyncApiFunction::SetResultFromChannelInfo( |
SetResult(channel_info.ToValue()); |
} |
-CastChannelOpenFunction::CastChannelOpenFunction() |
- : new_channel_id_(0) { |
-} |
+CastChannelOpenFunction::CastChannelOpenFunction() {} |
CastChannelOpenFunction::~CastChannelOpenFunction() { } |
@@ -287,62 +285,50 @@ bool CastChannelOpenFunction::Prepare() { |
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( |
- extension_->id(), *ip_endpoint_, channel_auth_, |
- ExtensionsBrowserClient::Get()->GetNetLog(), |
- base::TimeDelta::FromMilliseconds(connect_info.timeout.get() |
- ? *connect_info.timeout |
- : kDefaultConnectTimeoutMillis), |
- liveness_timeout_ > base::TimeDelta(), api_->GetLogger(), |
- connect_info.capabilities.get() ? *connect_info.capabilities |
- : CastDeviceCapability::NONE); |
- } |
- new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket)); |
- |
- // Construct read delegates. |
- std::unique_ptr<CastTransport::Delegate> delegate( |
- base::MakeUnique<CastMessageHandler>( |
- base::Bind(&CastChannelAPI::SendEvent, api_->AsWeakPtr(), |
- extension_->id()), |
- socket, api_->GetLogger())); |
- if (socket->keep_alive()) { |
- // Wrap read delegate in a KeepAliveDelegate for timeout handling. |
- KeepAliveDelegate* keep_alive = |
- new KeepAliveDelegate(socket, api_->GetLogger(), std::move(delegate), |
- ping_interval_, liveness_timeout_); |
- std::unique_ptr<base::Timer> injected_timer = |
- api_->GetInjectedTimeoutTimerForTest(); |
- if (injected_timer) { |
- keep_alive->SetTimersForTest(base::MakeUnique<base::Timer>(false, false), |
- std::move(injected_timer)); |
- } |
- delegate.reset(keep_alive); |
- } |
+ if (test_socket) |
+ cast_socket_service_->SetSocketForTest(std::move(test_socket)); |
- socket->Connect(std::move(delegate), |
- base::Bind(&CastChannelOpenFunction::OnOpen, this)); |
-} |
+ std::unique_ptr<base::Timer> injected_timer = |
+ api_->GetInjectedTimeoutTimerForTest(); |
+ if (injected_timer) |
+ cast_socket_service_->SetPingTimeoutTimerForTest(std::move(injected_timer)); |
-void CastChannelOpenFunction::OnOpen(ChannelError result) { |
+ const ConnectInfo& connect_info = params_->connect_info; |
+ base::TimeDelta connect_timeout = base::TimeDelta::FromMilliseconds( |
+ connect_info.timeout.get() ? *connect_info.timeout |
+ : kDefaultConnectTimeoutMillis); |
+ int capabilities = connect_info.capabilities.get() |
+ ? *connect_info.capabilities |
+ : CastDeviceCapability::NONE; |
+ cast_socket_service_->OpenSocket( |
+ *ip_endpoint_, channel_auth_, ExtensionsBrowserClient::Get()->GetNetLog(), |
+ connect_timeout, ping_interval_, liveness_timeout_, api_->GetLogger(), |
+ capabilities, base::Bind(&CastChannelOpenFunction::OnOpen, this)); |
+} |
+ |
+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()->ClearLastErrors(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); |
+ |
+ std::unique_ptr<CastTransport::Delegate> delegate( |
+ base::MakeUnique<CastMessageHandler>( |
+ base::Bind(&CastChannelAPI::SendEvent, api_->AsWeakPtr(), |
+ extension_->id()), |
+ socket, api_->GetLogger())); |
mark a. foltz
2017/06/12 21:14:09
You might want to pass the logger as an argument t
zhaobin
2017/06/20 01:37:42
Code removed. api_->GetLogger() is moved back to C
|
+ cast_socket_service_->RegisterDelegate(channel_id, std::move(delegate)); |
+ |
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(); |