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

Unified Diff: extensions/browser/api/cast_channel/cast_channel_api.cc

Issue 2974523002: [cast_channel] Make CastSocketService a global leaky singleton (Closed)
Patch Set: merge with master Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
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);
« no previous file with comments | « extensions/browser/api/cast_channel/cast_channel_api.h ('k') | extensions/browser/api/cast_channel/cast_channel_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698