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 811b681d1c26870683b2a990fc7b9f5aa08702c8..94f90eb5d37123f74808e8b34aefa154e610a0a4 100644 |
--- a/extensions/browser/api/cast_channel/cast_channel_api.cc |
+++ b/extensions/browser/api/cast_channel/cast_channel_api.cc |
@@ -22,7 +22,6 @@ |
#include "components/cast_channel/cast_message_util.h" |
#include "components/cast_channel/cast_socket.h" |
#include "components/cast_channel/cast_socket_service.h" |
-#include "components/cast_channel/cast_socket_service_factory.h" |
#include "components/cast_channel/keep_alive_delegate.h" |
#include "components/cast_channel/logger.h" |
#include "components/cast_channel/proto/cast_channel.pb.h" |
@@ -137,6 +136,18 @@ void CastChannelAPI::SendEvent(const std::string& extension_id, |
} |
} |
+cast_channel::CastSocket::Observer* CastChannelAPI::GetObserver( |
+ const std::string& extension_id, |
+ scoped_refptr<cast_channel::Logger> logger) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ if (!observer_) { |
+ observer_.reset(new CastMessageHandler( |
+ base::Bind(&CastChannelAPI::SendEvent, this->AsWeakPtr(), extension_id), |
+ logger)); |
+ } |
+ return observer_.get(); |
+} |
+ |
static base::LazyInstance< |
BrowserContextKeyedAPIFactory<CastChannelAPI>>::DestructorAtExit g_factory = |
LAZY_INSTANCE_INITIALIZER; |
@@ -168,9 +179,7 @@ CastChannelAsyncApiFunction::CastChannelAsyncApiFunction() |
CastChannelAsyncApiFunction::~CastChannelAsyncApiFunction() { } |
bool CastChannelAsyncApiFunction::PrePrepare() { |
- cast_socket_service_ = |
- cast_channel::CastSocketServiceFactory::GetForBrowserContext( |
- browser_context()); |
+ cast_socket_service_ = cast_channel::CastSocketService::GetInstance(); |
DCHECK(cast_socket_service_); |
return true; |
} |
@@ -277,14 +286,8 @@ void CastChannelOpenFunction::AsyncWorkStart() { |
if (test_socket.get()) |
cast_socket_service_->SetSocketForTest(std::move(test_socket)); |
- auto* observer = cast_socket_service_->GetObserver(extension_->id()); |
- if (!observer) { |
- observer = cast_socket_service_->AddObserver( |
- extension_->id(), base::MakeUnique<CastMessageHandler>( |
- base::Bind(&CastChannelAPI::SendEvent, |
- api_->AsWeakPtr(), extension_->id()), |
- cast_socket_service_->GetLogger())); |
- } |
+ auto* observer = |
+ api_->GetObserver(extension_->id(), cast_socket_service_->GetLogger()); |
cast_socket_service_->OpenSocket( |
*ip_endpoint_, ExtensionsBrowserClient::Get()->GetNetLog(), |
@@ -422,20 +425,23 @@ void CastChannelCloseFunction::OnClose(int result) { |
AsyncWorkCompleted(); |
} |
-CastChannelOpenFunction::CastMessageHandler::CastMessageHandler( |
+CastChannelAPI::CastMessageHandler::CastMessageHandler( |
const EventDispatchCallback& ui_dispatch_cb, |
scoped_refptr<Logger> logger) |
: ui_dispatch_cb_(ui_dispatch_cb), logger_(logger) { |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
DCHECK(logger_); |
} |
-CastChannelOpenFunction::CastMessageHandler::~CastMessageHandler() { |
+CastChannelAPI::CastMessageHandler::~CastMessageHandler() { |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
+ cast_channel::CastSocketService::GetInstance()->RemoveObserver(this); |
} |
-void CastChannelOpenFunction::CastMessageHandler::OnError( |
+void CastChannelAPI::CastMessageHandler::OnError( |
const cast_channel::CastSocket& socket, |
ChannelError error_state) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
ChannelInfo channel_info; |
FillChannelInfo(socket, &channel_info); |
@@ -453,10 +459,10 @@ void CastChannelOpenFunction::CastMessageHandler::OnError( |
base::Bind(ui_dispatch_cb_, base::Passed(std::move(event)))); |
} |
-void CastChannelOpenFunction::CastMessageHandler::OnMessage( |
+void CastChannelAPI::CastMessageHandler::OnMessage( |
const cast_channel::CastSocket& socket, |
const CastMessage& message) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
MessageInfo message_info; |
CastMessageToMessageInfo(message, &message_info); |