Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(781)

Side by Side Diff: extensions/browser/api/cast_channel/cast_channel_api.cc

Issue 2925053005: [cast_channel] Implement CastSocketService::OpenSocket() (Closed)
Patch Set: rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/cast_channel/cast_channel_api.h" 5 #include "extensions/browser/api/cast_channel/cast_channel_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <limits> 10 #include <limits>
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 SetResultFromChannelInfo(channel_info); 209 SetResultFromChannelInfo(channel_info);
210 SetError("Channel error = " + base::IntToString(error)); 210 SetError("Channel error = " + base::IntToString(error));
211 } 211 }
212 212
213 void CastChannelAsyncApiFunction::SetResultFromChannelInfo( 213 void CastChannelAsyncApiFunction::SetResultFromChannelInfo(
214 const ChannelInfo& channel_info) { 214 const ChannelInfo& channel_info) {
215 DCHECK_CURRENTLY_ON(BrowserThread::IO); 215 DCHECK_CURRENTLY_ON(BrowserThread::IO);
216 SetResult(channel_info.ToValue()); 216 SetResult(channel_info.ToValue());
217 } 217 }
218 218
219 CastChannelOpenFunction::CastChannelOpenFunction() 219 CastChannelOpenFunction::CastChannelOpenFunction() {}
220 : new_channel_id_(0) {
221 }
222 220
223 CastChannelOpenFunction::~CastChannelOpenFunction() { } 221 CastChannelOpenFunction::~CastChannelOpenFunction() { }
224 222
225 net::IPEndPoint* CastChannelOpenFunction::ParseConnectInfo( 223 net::IPEndPoint* CastChannelOpenFunction::ParseConnectInfo(
226 const ConnectInfo& connect_info) { 224 const ConnectInfo& connect_info) {
227 net::IPAddress ip_address; 225 net::IPAddress ip_address;
228 CHECK(ip_address.AssignFromIPLiteral(connect_info.ip_address)); 226 CHECK(ip_address.AssignFromIPLiteral(connect_info.ip_address));
229 return new net::IPEndPoint(ip_address, 227 return new net::IPEndPoint(ip_address,
230 static_cast<uint16_t>(connect_info.port)); 228 static_cast<uint16_t>(connect_info.port));
231 } 229 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 } 269 }
272 270
273 ip_endpoint_.reset(ParseConnectInfo(connect_info)); 271 ip_endpoint_.reset(ParseConnectInfo(connect_info));
274 return true; 272 return true;
275 } 273 }
276 274
277 void CastChannelOpenFunction::AsyncWorkStart() { 275 void CastChannelOpenFunction::AsyncWorkStart() {
278 DCHECK(api_); 276 DCHECK(api_);
279 DCHECK(ip_endpoint_.get()); 277 DCHECK(ip_endpoint_.get());
280 const ConnectInfo& connect_info = params_->connect_info; 278 const ConnectInfo& connect_info = params_->connect_info;
281 CastSocket* socket; 279
282 std::unique_ptr<CastSocket> test_socket = api_->GetSocketForTest(); 280 std::unique_ptr<CastSocket> test_socket = api_->GetSocketForTest();
283 if (test_socket.get()) { 281 if (test_socket.get())
284 socket = test_socket.release(); 282 cast_socket_service_->SetSocketForTest(std::move(test_socket));
285 } else {
286 socket = new CastSocketImpl(
287 *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(),
288 base::TimeDelta::FromMilliseconds(connect_info.timeout.get()
289 ? *connect_info.timeout
290 : kDefaultConnectTimeoutMillis),
291 liveness_timeout_, ping_interval_, api_->GetLogger(),
292 connect_info.capabilities.get() ? *connect_info.capabilities
293 : CastDeviceCapability::NONE);
294 }
295 new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket));
296 283
297 auto* observer = cast_socket_service_->GetObserver(extension_->id()); 284 auto* observer = cast_socket_service_->GetObserver(extension_->id());
298 if (!observer) { 285 if (!observer) {
299 observer = 286 observer =
300 new CastMessageHandler(base::Bind(&CastChannelAPI::SendEvent, 287 new CastMessageHandler(base::Bind(&CastChannelAPI::SendEvent,
301 api_->AsWeakPtr(), extension_->id()), 288 api_->AsWeakPtr(), extension_->id()),
302 api_->GetLogger()); 289 api_->GetLogger());
303 cast_socket_service_->AddObserver(extension_->id(), 290 cast_socket_service_->AddObserver(extension_->id(),
304 base::WrapUnique(observer)); 291 base::WrapUnique(observer));
305 } 292 }
306 293
307 socket->AddObserver(observer); 294 cast_socket_service_->OpenSocket(
308 // Construct read delegates. 295 *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(),
309 socket->Connect(base::Bind(&CastChannelOpenFunction::OnOpen, this)); 296 base::TimeDelta::FromMilliseconds(connect_info.timeout.get()
297 ? *connect_info.timeout
298 : kDefaultConnectTimeoutMillis),
299 liveness_timeout_, ping_interval_, api_->GetLogger(),
300 connect_info.capabilities.get() ? *connect_info.capabilities
301 : CastDeviceCapability::NONE,
302 base::Bind(&CastChannelOpenFunction::OnOpen, this), observer);
310 } 303 }
311 304
312 void CastChannelOpenFunction::OnOpen(ChannelError result) { 305 void CastChannelOpenFunction::OnOpen(int channel_id, ChannelError result) {
313 DCHECK_CURRENTLY_ON(BrowserThread::IO); 306 DCHECK_CURRENTLY_ON(BrowserThread::IO);
314 VLOG(1) << "Connect finished, OnOpen invoked."; 307 VLOG(1) << "Connect finished, OnOpen invoked.";
315 // TODO: If we failed to open the CastSocket, we may want to clean up here, 308 // TODO: If we failed to open the CastSocket, we may want to clean up here,
316 // rather than relying on the extension to call close(). This can be done by 309 // rather than relying on the extension to call close(). This can be done by
317 // calling RemoveSocket() and api_->GetLogger()->ClearLastError(channel_id). 310 // calling RemoveSocket() and api_->GetLogger()->ClearLastError(channel_id).
318 if (result != ChannelError::UNKNOWN) { 311 if (result != ChannelError::UNKNOWN) {
319 CastSocket* socket = cast_socket_service_->GetSocket(new_channel_id_); 312 CastSocket* socket = cast_socket_service_->GetSocket(channel_id);
320 CHECK(socket); 313 CHECK(socket);
321 SetResultFromSocket(*socket); 314 SetResultFromSocket(*socket);
322 } else { 315 } else {
323 // The socket is being destroyed. 316 // The socket is being destroyed.
324 SetResultFromError(new_channel_id_, 317 SetResultFromError(channel_id, api::cast_channel::CHANNEL_ERROR_UNKNOWN);
325 api::cast_channel::CHANNEL_ERROR_UNKNOWN);
326 } 318 }
327 319
328 AsyncWorkCompleted(); 320 AsyncWorkCompleted();
329 } 321 }
330 322
331 CastChannelSendFunction::CastChannelSendFunction() { } 323 CastChannelSendFunction::CastChannelSendFunction() { }
332 324
333 CastChannelSendFunction::~CastChannelSendFunction() { } 325 CastChannelSendFunction::~CastChannelSendFunction() { }
334 326
335 bool CastChannelSendFunction::Prepare() { 327 bool CastChannelSendFunction::Prepare() {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 OnMessage::Create(channel_info, message_info); 474 OnMessage::Create(channel_info, message_info);
483 std::unique_ptr<Event> event(new Event(events::CAST_CHANNEL_ON_MESSAGE, 475 std::unique_ptr<Event> event(new Event(events::CAST_CHANNEL_ON_MESSAGE,
484 OnMessage::kEventName, 476 OnMessage::kEventName,
485 std::move(results))); 477 std::move(results)));
486 BrowserThread::PostTask( 478 BrowserThread::PostTask(
487 BrowserThread::UI, FROM_HERE, 479 BrowserThread::UI, FROM_HERE,
488 base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); 480 base::Bind(ui_dispatch_cb_, base::Passed(std::move(event))));
489 } 481 }
490 482
491 } // namespace extensions 483 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698