OLD | NEW |
---|---|
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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(), | 287 *ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(), |
288 base::TimeDelta::FromMilliseconds(connect_info.timeout.get() | 288 base::TimeDelta::FromMilliseconds(connect_info.timeout.get() |
289 ? *connect_info.timeout | 289 ? *connect_info.timeout |
290 : kDefaultConnectTimeoutMillis), | 290 : kDefaultConnectTimeoutMillis), |
291 liveness_timeout_, ping_interval_, api_->GetLogger(), | 291 liveness_timeout_, ping_interval_, api_->GetLogger(), |
292 connect_info.capabilities.get() ? *connect_info.capabilities | 292 connect_info.capabilities.get() ? *connect_info.capabilities |
293 : CastDeviceCapability::NONE); | 293 : CastDeviceCapability::NONE); |
294 } | 294 } |
295 new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket)); | 295 new_channel_id_ = cast_socket_service_->AddSocket(base::WrapUnique(socket)); |
296 | 296 |
297 auto* observer = cast_socket_service_->GetObserver(extension_->id()); | |
298 if (!observer) { | |
299 observer = | |
300 new CastMessageHandler(base::Bind(&CastChannelAPI::SendEvent, | |
301 api_->AsWeakPtr(), extension_->id()), | |
302 api_->GetLogger()); | |
303 cast_socket_service_->AddObserver(extension_->id(), | |
304 base::WrapUnique(observer)); | |
mark a. foltz
2017/06/20 01:16:44
Or just pass base::MakeUnique<> here?
zhaobin
2017/06/20 17:50:05
Done.
| |
305 } | |
306 | |
307 socket->AddObserver(observer); | |
297 // Construct read delegates. | 308 // Construct read delegates. |
298 std::unique_ptr<CastTransport::Delegate> delegate( | 309 socket->Connect(base::Bind(&CastChannelOpenFunction::OnOpen, this)); |
299 base::MakeUnique<CastMessageHandler>( | |
300 base::Bind(&CastChannelAPI::SendEvent, api_->AsWeakPtr(), | |
301 extension_->id()), | |
302 socket, api_->GetLogger())); | |
303 socket->Connect(std::move(delegate), | |
304 base::Bind(&CastChannelOpenFunction::OnOpen, this)); | |
305 } | 310 } |
306 | 311 |
307 void CastChannelOpenFunction::OnOpen(ChannelError result) { | 312 void CastChannelOpenFunction::OnOpen(ChannelError result) { |
308 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 313 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
309 VLOG(1) << "Connect finished, OnOpen invoked."; | 314 VLOG(1) << "Connect finished, OnOpen invoked."; |
310 // TODO: If we failed to open the CastSocket, we may want to clean up here, | 315 // TODO: If we failed to open the CastSocket, we may want to clean up here, |
311 // rather than relying on the extension to call close(). This can be done by | 316 // rather than relying on the extension to call close(). This can be done by |
312 // calling RemoveSocket() and api_->GetLogger()->ClearLastError(channel_id). | 317 // calling RemoveSocket() and api_->GetLogger()->ClearLastError(channel_id). |
313 if (result != ChannelError::UNKNOWN) { | 318 if (result != ChannelError::UNKNOWN) { |
314 CastSocket* socket = cast_socket_service_->GetSocket(new_channel_id_); | 319 CastSocket* socket = cast_socket_service_->GetSocket(new_channel_id_); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
425 SetResultFromSocket(*socket); | 430 SetResultFromSocket(*socket); |
426 // This will delete |socket|. | 431 // This will delete |socket|. |
427 cast_socket_service_->RemoveSocket(channel_id); | 432 cast_socket_service_->RemoveSocket(channel_id); |
428 api_->GetLogger()->ClearLastError(channel_id); | 433 api_->GetLogger()->ClearLastError(channel_id); |
429 } | 434 } |
430 AsyncWorkCompleted(); | 435 AsyncWorkCompleted(); |
431 } | 436 } |
432 | 437 |
433 CastChannelOpenFunction::CastMessageHandler::CastMessageHandler( | 438 CastChannelOpenFunction::CastMessageHandler::CastMessageHandler( |
434 const EventDispatchCallback& ui_dispatch_cb, | 439 const EventDispatchCallback& ui_dispatch_cb, |
435 CastSocket* socket, | |
436 scoped_refptr<Logger> logger) | 440 scoped_refptr<Logger> logger) |
437 : ui_dispatch_cb_(ui_dispatch_cb), socket_(socket), logger_(logger) { | 441 : ui_dispatch_cb_(ui_dispatch_cb), logger_(logger) { |
438 DCHECK(socket_); | |
439 DCHECK(logger_); | 442 DCHECK(logger_); |
440 } | 443 } |
441 | 444 |
442 CastChannelOpenFunction::CastMessageHandler::~CastMessageHandler() { | 445 CastChannelOpenFunction::CastMessageHandler::~CastMessageHandler() { |
443 } | 446 } |
444 | 447 |
445 void CastChannelOpenFunction::CastMessageHandler::OnError( | 448 void CastChannelOpenFunction::CastMessageHandler::OnError( |
449 const cast_channel::CastSocket& socket, | |
446 ChannelError error_state) { | 450 ChannelError error_state) { |
447 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 451 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
448 | 452 |
449 ChannelInfo channel_info; | 453 ChannelInfo channel_info; |
450 FillChannelInfo(*socket_, &channel_info); | 454 FillChannelInfo(socket, &channel_info); |
451 channel_info.error_state = api::cast_channel::ToChannelError(error_state); | 455 channel_info.error_state = api::cast_channel::ToChannelError(error_state); |
452 ErrorInfo error_info; | 456 ErrorInfo error_info; |
453 FillErrorInfo(channel_info.error_state, logger_->GetLastError(socket_->id()), | 457 FillErrorInfo(channel_info.error_state, logger_->GetLastError(socket.id()), |
454 &error_info); | 458 &error_info); |
455 | 459 |
456 std::unique_ptr<base::ListValue> results = | 460 std::unique_ptr<base::ListValue> results = |
457 OnError::Create(channel_info, error_info); | 461 OnError::Create(channel_info, error_info); |
458 std::unique_ptr<Event> event(new Event( | 462 std::unique_ptr<Event> event(new Event( |
459 events::CAST_CHANNEL_ON_ERROR, OnError::kEventName, std::move(results))); | 463 events::CAST_CHANNEL_ON_ERROR, OnError::kEventName, std::move(results))); |
460 BrowserThread::PostTask( | 464 BrowserThread::PostTask( |
461 BrowserThread::UI, FROM_HERE, | 465 BrowserThread::UI, FROM_HERE, |
462 base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); | 466 base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); |
463 } | 467 } |
464 | 468 |
465 void CastChannelOpenFunction::CastMessageHandler::OnMessage( | 469 void CastChannelOpenFunction::CastMessageHandler::OnMessage( |
470 const cast_channel::CastSocket& socket, | |
466 const CastMessage& message) { | 471 const CastMessage& message) { |
467 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 472 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
468 | 473 |
469 MessageInfo message_info; | 474 MessageInfo message_info; |
470 CastMessageToMessageInfo(message, &message_info); | 475 CastMessageToMessageInfo(message, &message_info); |
471 ChannelInfo channel_info; | 476 ChannelInfo channel_info; |
472 FillChannelInfo(*socket_, &channel_info); | 477 FillChannelInfo(socket, &channel_info); |
473 VLOG(1) << "Received message " << ParamToString(message_info) | 478 VLOG(1) << "Received message " << ParamToString(message_info) |
474 << " on channel " << ParamToString(channel_info); | 479 << " on channel " << ParamToString(channel_info); |
475 | 480 |
476 std::unique_ptr<base::ListValue> results = | 481 std::unique_ptr<base::ListValue> results = |
477 OnMessage::Create(channel_info, message_info); | 482 OnMessage::Create(channel_info, message_info); |
478 std::unique_ptr<Event> event(new Event(events::CAST_CHANNEL_ON_MESSAGE, | 483 std::unique_ptr<Event> event(new Event(events::CAST_CHANNEL_ON_MESSAGE, |
479 OnMessage::kEventName, | 484 OnMessage::kEventName, |
480 std::move(results))); | 485 std::move(results))); |
481 BrowserThread::PostTask( | 486 BrowserThread::PostTask( |
482 BrowserThread::UI, FROM_HERE, | 487 BrowserThread::UI, FROM_HERE, |
483 base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); | 488 base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); |
484 } | 489 } |
485 | 490 |
486 void CastChannelOpenFunction::CastMessageHandler::Start() { | |
487 } | |
488 | |
489 } // namespace extensions | 491 } // namespace extensions |
OLD | NEW |