Commit 989a05a9 authored by bsep's avatar bsep Committed by Commit Bot

Revert of [Media Router] Add CastMediaSinkService (patchset #11 id:200001 of...

Revert of [Media Router] Add CastMediaSinkService (patchset #11 id:200001 of https://codereview.chromium.org/2927833002/ )

Reason for revert:
Causing unit_tests failures on multiple bots

For example:
https://uberchromegw.corp.google.com/i/chromium.mac/builders/Mac10.9%20Tests/builds/44050
https://uberchromegw.corp.google.com/i/chromium.mac/builders/Mac10.10%20Tests/builds/20527
https://uberchromegw.corp.google.com/i/chromium.memory/builders/Linux%20TSan%20Tests/builds/8549

Original issue's description:
> [Media Router] Add CastMediaSinkService
>
> NOTE: those extensions header files and extensions::api:: namespace will go away when https://codereview.chromium.org/2913033003/ lands
>
> Discover process is similar to DialMediaSinkService:
> - CastMediaSinkService::Start() registers itself with DnsRegistry
> - CastMediaSinkService::OnDnsSdEvent() gets invoked when Dns services comes back and starts a 3s timer
> - Start opening channel for each service on IO thread
> - CastMediaSinkService::OnChannelOpenedOnIOThread() gets invoked when channel open finishes
> - Post task back to UI thread via CastMediaSinkService::OnChannelOpenOnUIThread()
> - Create MediaSinkInternal and store it in CastSinkService's sink map
> - Invoke MediaSinkBase::FetchCompleted() and send sinks to MRP when timer expires
>
> TODO:
>   Unit test
>   Implement CastSocketService::OpenChannel
>
> BUG=687377
>
> Review-Url: https://codereview.chromium.org/2927833002
> Cr-Commit-Position: refs/heads/master@{#484979}
> Committed: https://chromium.googlesource.com/chromium/src/+/b9a2a9b60034d3ee2138c4815bc3c66b13cee3b5

TBR=mfoltz@chromium.org,imcheng@chromium.org,zhaobin@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=687377

Review-Url: https://codereview.chromium.org/2973983002
Cr-Commit-Position: refs/heads/master@{#484996}
parent 4b488983
...@@ -12,7 +12,6 @@ static_library("discovery") { ...@@ -12,7 +12,6 @@ static_library("discovery") {
"//base:i18n", "//base:i18n",
"//chrome/app:generated_resources", "//chrome/app:generated_resources",
"//chrome/common:constants", "//chrome/common:constants",
"//components/cast_channel",
"//content/public/browser", "//content/public/browser",
"//content/public/common", "//content/public/common",
] ]
...@@ -35,8 +34,6 @@ static_library("discovery") { ...@@ -35,8 +34,6 @@ static_library("discovery") {
"dial/parsed_dial_device_description.h", "dial/parsed_dial_device_description.h",
"dial/safe_dial_device_description_parser.cc", "dial/safe_dial_device_description_parser.cc",
"dial/safe_dial_device_description_parser.h", "dial/safe_dial_device_description_parser.h",
"mdns/cast_media_sink_service.cc",
"mdns/cast_media_sink_service.h",
"mdns/dns_sd_delegate.cc", "mdns/dns_sd_delegate.cc",
"mdns/dns_sd_delegate.h", "mdns/dns_sd_delegate.h",
"mdns/dns_sd_device_lister.cc", "mdns/dns_sd_device_lister.cc",
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h"
#include "base/memory/ptr_util.h"
#include "chrome/browser/browser_process.h"
#include "chrome/common/media_router/discovery/media_sink_internal.h"
#include "components/cast_channel/cast_socket_service.h"
#include "components/cast_channel/cast_socket_service_factory.h"
#include "components/net_log/chrome_net_log.h"
#include "content/public/common/content_client.h"
#include "net/base/host_port_pair.h"
#include "net/base/ip_address.h"
namespace {
constexpr char kObserverId[] = "browser_observer_id";
enum ErrorType {
NONE,
NOT_CAST_DEVICE,
MISSING_ID,
MISSING_FRIENDLY_NAME,
MISSING_OR_INVALID_IP_ADDRESS,
MISSING_OR_INVALID_PORT,
};
ErrorType CreateCastMediaSink(const media_router::DnsSdService& service,
int channel_id,
bool audio_only,
media_router::MediaSinkInternal* cast_sink) {
DCHECK(cast_sink);
if (service.service_name.find(
media_router::CastMediaSinkService::kCastServiceType) ==
std::string::npos)
return ErrorType::NOT_CAST_DEVICE;
net::IPAddress ip_address;
if (!ip_address.AssignFromIPLiteral(service.ip_address))
return ErrorType::MISSING_OR_INVALID_IP_ADDRESS;
std::map<std::string, std::string> service_data;
for (const auto& item : service.service_data) {
// |item| format should be "id=xxxxxx", etc.
size_t split_idx = item.find('=');
if (split_idx == std::string::npos)
continue;
std::string key = item.substr(0, split_idx);
std::string val =
split_idx < item.length() ? item.substr(split_idx + 1) : "";
service_data[key] = val;
}
// When use this "sink" within browser, please note it will have a different
// ID when it is sent to the extension, because it derives a different sink ID
// using the given sink ID.
std::string unique_id = service_data["id"];
if (unique_id.empty())
return ErrorType::MISSING_ID;
std::string friendly_name = service_data["fn"];
if (friendly_name.empty())
return ErrorType::MISSING_FRIENDLY_NAME;
media_router::MediaSink sink(unique_id, friendly_name,
media_router::MediaSink::IconType::CAST);
media_router::CastSinkExtraData extra_data;
extra_data.ip_address = ip_address;
extra_data.model_name = service_data["md"];
extra_data.capabilities = cast_channel::CastDeviceCapability::AUDIO_OUT;
if (!audio_only)
extra_data.capabilities |= cast_channel::CastDeviceCapability::VIDEO_OUT;
extra_data.cast_channel_id = channel_id;
cast_sink->set_sink(sink);
cast_sink->set_cast_data(extra_data);
return ErrorType::NONE;
}
} // namespace
namespace media_router {
// static
const char CastMediaSinkService::kCastServiceType[] = "_googlecast._tcp.local";
CastMediaSinkService::CastMediaSinkService(
const OnSinksDiscoveredCallback& callback,
content::BrowserContext* browser_context)
: MediaSinkServiceBase(callback) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
cast_socket_service_ = cast_channel::CastSocketServiceFactory::GetInstance()
->GetForBrowserContext(browser_context);
DCHECK(cast_socket_service_);
}
CastMediaSinkService::CastMediaSinkService(
const OnSinksDiscoveredCallback& callback,
cast_channel::CastSocketService* cast_socket_service)
: MediaSinkServiceBase(callback),
cast_socket_service_(cast_socket_service) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(cast_socket_service_);
}
CastMediaSinkService::~CastMediaSinkService() {}
void CastMediaSinkService::Start() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (dns_sd_registry_)
return;
dns_sd_registry_ = DnsSdRegistry::GetInstance();
dns_sd_registry_->AddObserver(this);
dns_sd_registry_->RegisterDnsSdListener(kCastServiceType);
MediaSinkServiceBase::StartTimer();
}
void CastMediaSinkService::Stop() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (!dns_sd_registry_)
return;
dns_sd_registry_->UnregisterDnsSdListener(kCastServiceType);
dns_sd_registry_->RemoveObserver(this);
dns_sd_registry_ = nullptr;
MediaSinkServiceBase::StopTimer();
}
void CastMediaSinkService::SetDnsSdRegistryForTest(DnsSdRegistry* registry) {
DCHECK(!dns_sd_registry_);
dns_sd_registry_ = registry;
dns_sd_registry_->AddObserver(this);
dns_sd_registry_->RegisterDnsSdListener(kCastServiceType);
MediaSinkServiceBase::StartTimer();
}
void CastMediaSinkService::OnDnsSdEvent(
const std::string& service_type,
const DnsSdRegistry::DnsSdServiceList& services) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DVLOG(2) << "CastMediaSinkService::OnDnsSdEvent found " << services.size()
<< " services";
current_sinks_.clear();
current_services_ = services;
for (const auto& service : services) {
net::IPAddress ip_address;
if (!ip_address.AssignFromIPLiteral(service.ip_address)) {
DVLOG(2) << "Invalid ip_addresss: " << service.ip_address;
continue;
}
net::HostPortPair host_port_pair =
net::HostPortPair::FromString(service.service_host_port);
content::BrowserThread::PostTask(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&CastMediaSinkService::OpenChannelOnIOThread, this, service,
net::IPEndPoint(ip_address, host_port_pair.port())));
}
MediaSinkServiceBase::RestartTimer();
}
void CastMediaSinkService::OpenChannelOnIOThread(
const DnsSdService& service,
const net::IPEndPoint& ip_endpoint) {
auto* observer = cast_socket_service_->GetObserver(kObserverId);
if (!observer) {
observer = new CastSocketObserver();
cast_socket_service_->AddObserver(kObserverId, base::WrapUnique(observer));
}
cast_socket_service_->OpenSocket(
ip_endpoint, g_browser_process->net_log(),
base::Bind(&CastMediaSinkService::OnChannelOpenedOnIOThread, this,
service),
observer);
}
void CastMediaSinkService::OnChannelOpenedOnIOThread(
const DnsSdService& service,
int channel_id,
cast_channel::ChannelError channel_error) {
if (channel_error != cast_channel::ChannelError::NONE) {
DVLOG(2) << "Fail to open channel " << service.ip_address << ": "
<< service.service_host_port
<< " [ChannelError]: " << (int)channel_error;
return;
}
auto* socket = cast_socket_service_->GetSocket(channel_id);
if (!socket) {
DVLOG(2) << "Fail to find socket with [channel_id]: " << channel_id;
return;
}
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&CastMediaSinkService::OnChannelOpenedOnUIThread, this,
service, channel_id, socket->audio_only()));
}
void CastMediaSinkService::OnChannelOpenedOnUIThread(
const DnsSdService& service,
int channel_id,
bool audio_only) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
MediaSinkInternal sink;
ErrorType error = CreateCastMediaSink(service, channel_id, audio_only, &sink);
if (error != ErrorType::NONE) {
DVLOG(2) << "Fail to create Cast device [error]: " << error;
return;
}
if (!base::ContainsValue(current_services_, service)) {
DVLOG(2) << "Service data not found in current service data list...";
return;
}
DVLOG(2) << "Ading sink to current_sinks_ [id]: " << sink.sink().id();
current_sinks_.insert(sink);
MediaSinkServiceBase::RestartTimer();
}
CastMediaSinkService::CastSocketObserver::CastSocketObserver() {}
CastMediaSinkService::CastSocketObserver::~CastSocketObserver() {}
void CastMediaSinkService::CastSocketObserver::OnError(
const cast_channel::CastSocket& socket,
cast_channel::ChannelError error_state) {
DVLOG(1) << "OnError [ip_endpoint]: " << socket.ip_endpoint().ToString()
<< " [error_state]: "
<< cast_channel::ChannelErrorToString(error_state);
}
void CastMediaSinkService::CastSocketObserver::OnMessage(
const cast_channel::CastSocket& socket,
const cast_channel::CastMessage& message) {}
} // namespace media_router
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MDNS_CAST_MEDIA_SINK_SERVICE_H_
#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MDNS_CAST_MEDIA_SINK_SERVICE_H_
#include <memory>
#include <set>
#include "base/gtest_prod_util.h"
#include "base/memory/ref_counted.h"
#include "base/threading/thread_checker.h"
#include "chrome/browser/media/router/discovery/mdns/dns_sd_delegate.h"
#include "chrome/browser/media/router/discovery/mdns/dns_sd_registry.h"
#include "chrome/browser/media/router/discovery/media_sink_service_base.h"
#include "components/cast_channel/cast_channel_enum.h"
#include "components/cast_channel/cast_socket.h"
#include "net/base/ip_endpoint.h"
namespace cast_channel {
class CastSocketService;
} // namespace cast_channel
namespace content {
class BrowserContext;
} // namespace content
namespace media_router {
// A service which can be used to start background discovery and resolution of
// Cast devices.
// Public APIs should be invoked on the UI thread.
class CastMediaSinkService
: public MediaSinkServiceBase,
public DnsSdRegistry::DnsSdObserver,
public base::RefCountedThreadSafe<CastMediaSinkService> {
public:
CastMediaSinkService(const OnSinksDiscoveredCallback& callback,
content::BrowserContext* browser_context);
// Used by unit tests.
CastMediaSinkService(const OnSinksDiscoveredCallback& callback,
cast_channel::CastSocketService* cast_socket_service);
// mDNS service types.
static const char kCastServiceType[];
// MediaSinkService implementation
void Start() override;
void Stop() override;
protected:
// Used to mock out the DnsSdRegistry for testing.
void SetDnsSdRegistryForTest(DnsSdRegistry* registry);
~CastMediaSinkService() override;
private:
// Receives incoming messages and errors and provides additional API context.
class CastSocketObserver : public cast_channel::CastSocket::Observer {
public:
CastSocketObserver();
~CastSocketObserver() override;
// CastSocket::Observer implementation.
void OnError(const cast_channel::CastSocket& socket,
cast_channel::ChannelError error_state) override;
void OnMessage(const cast_channel::CastSocket& socket,
const cast_channel::CastMessage& message) override;
private:
DISALLOW_COPY_AND_ASSIGN(CastSocketObserver);
};
friend class base::RefCountedThreadSafe<CastMediaSinkService>;
friend class CastMediaSinkServiceTest;
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest, TestReStartAfterStop);
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest, TestMultipleStartAndStop);
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest,
TestOnChannelOpenedOnIOThread);
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest,
TestMultipleOnChannelOpenedOnIOThread);
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest, TestOnDnsSdEvent);
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest, TestMultipleOnDnsSdEvent);
FRIEND_TEST_ALL_PREFIXES(CastMediaSinkServiceTest, TestTimer);
// DnsSdRegistry::DnsSdObserver implementation
void OnDnsSdEvent(const std::string& service_type,
const DnsSdRegistry::DnsSdServiceList& services) override;
// Opens cast channel on IO thread.
// |service|: mDNS service description.
// |ip_endpoint|: cast channel's target IP endpoint.
void OpenChannelOnIOThread(const DnsSdService& service,
const net::IPEndPoint& ip_endpoint);
// Invoked when opening cast channel on IO thread completes.
// |service|: mDNS service description.
// |channel_id|: channel id of newly created cast channel.
// |channel_error|: error encounted when opending cast channel.
void OnChannelOpenedOnIOThread(const DnsSdService& service,
int channel_id,
cast_channel::ChannelError channel_error);
// Invoked by |OnChannelOpenedOnIOThread| to post task on UI thread.
// |service|: mDNS service description.
// |channel_id|: channel id of newly created cast channel.
// |audio_only|: if cast channel is audio only or not.
void OnChannelOpenedOnUIThread(const DnsSdService& service,
int channel_id,
bool audio_only);
// Raw pointer to DnsSdRegistry instance, which is a global leaky singleton
// and lives as long as the browser process.
DnsSdRegistry* dns_sd_registry_ = nullptr;
// Service list from current round of discovery.
DnsSdRegistry::DnsSdServiceList current_services_;
// Service managing creating and removing cast channels.
scoped_refptr<cast_channel::CastSocketService> cast_socket_service_;
THREAD_CHECKER(thread_checker_);
DISALLOW_COPY_AND_ASSIGN(CastMediaSinkService);
};
} // namespace media_router
#endif // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MDNS_CAST_MEDIA_SINK_SERVICE_H_
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
namespace media_router { namespace media_router {
MockDnsSdRegistry::MockDnsSdRegistry(DnsSdRegistry::DnsSdObserver* observer) MockDnsSdRegistry::MockDnsSdRegistry(DnsSdRegistry::DnsSdObserver* observer)
: DnsSdRegistry(nullptr), observer_(observer) {} : observer_(observer) {}
MockDnsSdRegistry::~MockDnsSdRegistry() {} MockDnsSdRegistry::~MockDnsSdRegistry() {}
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_proxy.h" #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_proxy.h"
#include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h"
#include "chrome/browser/media/router/event_page_request_manager.h" #include "chrome/browser/media/router/event_page_request_manager.h"
#include "chrome/browser/media/router/event_page_request_manager_factory.h" #include "chrome/browser/media/router/event_page_request_manager_factory.h"
#include "chrome/browser/media/router/issues_observer.h" #include "chrome/browser/media/router/issues_observer.h"
...@@ -430,8 +429,8 @@ scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController( ...@@ -430,8 +429,8 @@ scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController(
void MediaRouterMojoImpl::ProvideSinks(const std::string& provider_name, void MediaRouterMojoImpl::ProvideSinks(const std::string& provider_name,
std::vector<MediaSinkInternal> sinks) { std::vector<MediaSinkInternal> sinks) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DVLOG_WITH_INSTANCE(1) << "Provider [" << provider_name << "] found " DVLOG_WITH_INSTANCE(1) << "OnDialMediaSinkDiscovered found " << sinks.size()
<< sinks.size() << " devices..."; << " devices...";
event_page_request_manager_->RunOrDefer( event_page_request_manager_->RunOrDefer(
base::Bind(&MediaRouterMojoImpl::DoProvideSinks, base::Bind(&MediaRouterMojoImpl::DoProvideSinks,
...@@ -942,7 +941,8 @@ void MediaRouterMojoImpl::SyncStateToMediaRouteProvider() { ...@@ -942,7 +941,8 @@ void MediaRouterMojoImpl::SyncStateToMediaRouteProvider() {
} }
#endif #endif
StartDiscovery(); if (media_router::DialLocalDiscoveryEnabled())
StartDiscovery();
} }
#if defined(OS_WIN) #if defined(OS_WIN)
...@@ -976,25 +976,14 @@ void MediaRouterMojoImpl::StartDiscovery() { ...@@ -976,25 +976,14 @@ void MediaRouterMojoImpl::StartDiscovery() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DVLOG_WITH_INSTANCE(1) << "StartDiscovery"; DVLOG_WITH_INSTANCE(1) << "StartDiscovery";
if (media_router::DialLocalDiscoveryEnabled()) { if (!dial_media_sink_service_proxy_) {
if (!dial_media_sink_service_proxy_) { dial_media_sink_service_proxy_ = new DialMediaSinkServiceProxy(
dial_media_sink_service_proxy_ = new DialMediaSinkServiceProxy( base::Bind(&MediaRouterMojoImpl::ProvideSinks,
base::Bind(&MediaRouterMojoImpl::ProvideSinks, weak_factory_.GetWeakPtr(), "dial"),
weak_factory_.GetWeakPtr(), "dial"), context_);
context_);
}
dial_media_sink_service_proxy_->Start();
} }
if (media_router::CastDiscoveryEnabled()) { dial_media_sink_service_proxy_->Start();
if (!cast_media_sink_service_) {
cast_media_sink_service_ = new CastMediaSinkService(
base::Bind(&MediaRouterMojoImpl::ProvideSinks,
weak_factory_.GetWeakPtr(), "cast"),
context_);
}
cast_media_sink_service_->Start();
}
} }
void MediaRouterMojoImpl::UpdateMediaSinks( void MediaRouterMojoImpl::UpdateMediaSinks(
......
...@@ -44,7 +44,6 @@ class Extension; ...@@ -44,7 +44,6 @@ class Extension;
namespace media_router { namespace media_router {
enum class MediaRouteProviderWakeReason; enum class MediaRouteProviderWakeReason;
class CastMediaSinkService;
class DialMediaSinkServiceProxy; class DialMediaSinkServiceProxy;
class EventPageRequestManager; class EventPageRequestManager;
...@@ -412,9 +411,6 @@ class MediaRouterMojoImpl : public MediaRouterBase, ...@@ -412,9 +411,6 @@ class MediaRouterMojoImpl : public MediaRouterBase,
// Media sink service for DIAL devices. // Media sink service for DIAL devices.
scoped_refptr<DialMediaSinkServiceProxy> dial_media_sink_service_proxy_; scoped_refptr<DialMediaSinkServiceProxy> dial_media_sink_service_proxy_;
// Media sink service for CAST devices.
scoped_refptr<CastMediaSinkService> cast_media_sink_service_;
content::BrowserContext* const context_; content::BrowserContext* const context_;
// Request manager responsible for waking the component extension and calling // Request manager responsible for waking the component extension and calling
......
...@@ -3774,7 +3774,6 @@ test("unit_tests") { ...@@ -3774,7 +3774,6 @@ test("unit_tests") {
"../browser/media/router/discovery/dial/dial_media_sink_service_proxy_unittest.cc", "../browser/media/router/discovery/dial/dial_media_sink_service_proxy_unittest.cc",
"../browser/media/router/discovery/dial/dial_registry_unittest.cc", "../browser/media/router/discovery/dial/dial_registry_unittest.cc",
"../browser/media/router/discovery/dial/dial_service_unittest.cc", "../browser/media/router/discovery/dial/dial_service_unittest.cc",
"../browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc",
"../browser/media/router/discovery/mdns/dns_sd_registry_unittest.cc", "../browser/media/router/discovery/mdns/dns_sd_registry_unittest.cc",
"../browser/media/router/discovery/media_sink_service_base_unittest.cc", "../browser/media/router/discovery/media_sink_service_base_unittest.cc",
"../browser/media/router/event_page_request_manager_unittest.cc", "../browser/media/router/event_page_request_manager_unittest.cc",
......
...@@ -37,7 +37,7 @@ class CastSocketService : public RefcountedKeyedService { ...@@ -37,7 +37,7 @@ class CastSocketService : public RefcountedKeyedService {
// Returns the socket corresponding to |channel_id| if one exists, or nullptr // Returns the socket corresponding to |channel_id| if one exists, or nullptr
// otherwise. // otherwise.
virtual CastSocket* GetSocket(int channel_id) const; CastSocket* GetSocket(int channel_id) const;
CastSocket* GetSocket(const net::IPEndPoint& ip_endpoint) const; CastSocket* GetSocket(const net::IPEndPoint& ip_endpoint) const;
...@@ -72,10 +72,10 @@ class CastSocketService : public RefcountedKeyedService { ...@@ -72,10 +72,10 @@ class CastSocketService : public RefcountedKeyedService {
// |open_cb|: OnOpenCallback invoked when cast socket is opened. // |open_cb|: OnOpenCallback invoked when cast socket is opened.
// |observer|: Observer handles messages and errors on newly opened socket. // |observer|: Observer handles messages and errors on newly opened socket.
// Does not take ownership of |observer|. // Does not take ownership of |observer|.
virtual int OpenSocket(const net::IPEndPoint& ip_endpoint, int OpenSocket(const net::IPEndPoint& ip_endpoint,
net::NetLog* net_log, net::NetLog* net_log,
const CastSocket::OnOpenCallback& open_cb, const CastSocket::OnOpenCallback& open_cb,
CastSocket::Observer* observer); CastSocket::Observer* observer);
// Returns an observer corresponding to |id|. // Returns an observer corresponding to |id|.
CastSocket::Observer* GetObserver(const std::string& id); CastSocket::Observer* GetObserver(const std::string& id);
...@@ -89,10 +89,9 @@ class CastSocketService : public RefcountedKeyedService { ...@@ -89,10 +89,9 @@ class CastSocketService : public RefcountedKeyedService {
// Allow test to inject a mock cast socket. // Allow test to inject a mock cast socket.
void SetSocketForTest(std::unique_ptr<CastSocket> socket_for_test); void SetSocketForTest(std::unique_ptr<CastSocket> socket_for_test);
protected: private:
~CastSocketService() override; ~CastSocketService() override;
private:
// RefcountedKeyedService implementation. // RefcountedKeyedService implementation.
void ShutdownOnUIThread() override; void ShutdownOnUIThread() override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment