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

Unified Diff: chrome/browser/media/router/discovery/dial/dial_media_sink_service.cc

Issue 2837363002: [Media Router] Use DialMediaSinkService in MediaRouterMojoImpl (Closed)
Patch Set: resolve code review comments from Kevin Created 3 years, 7 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: chrome/browser/media/router/discovery/dial/dial_media_sink_service.cc
diff --git a/chrome/browser/media/router/discovery/dial/dial_media_sink_service.cc b/chrome/browser/media/router/discovery/dial/dial_media_sink_service.cc
index 562dcd5b8a213b51bed1f6e38abd4a3ed215c299..cf6ca70b2be9db803b036200b5b71f00b22c5917 100644
--- a/chrome/browser/media/router/discovery/dial/dial_media_sink_service.cc
+++ b/chrome/browser/media/router/discovery/dial/dial_media_sink_service.cc
@@ -21,27 +21,27 @@ namespace media_router {
DialMediaSinkService::DialMediaSinkService(
const OnSinksDiscoveredCallback& callback,
net::URLRequestContextGetter* request_context)
- : MediaSinkService(callback), request_context_(request_context) {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ : MediaSinkService(callback),
+ dial_registry_(nullptr),
Kevin M 2017/05/08 18:22:19 Suggestion: use inline setters in header file. di
zhaobin 2017/05/08 20:13:47 Done.
+ request_context_(request_context) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
DCHECK(request_context_);
}
DialMediaSinkService::~DialMediaSinkService() {}
void DialMediaSinkService::Start() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- dial_registry()->RegisterObserver(this);
- dial_registry()->StartPeriodicDiscovery();
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&DialMediaSinkService::StartOnIOThread, this));
}
void DialMediaSinkService::Stop() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- dial_registry()->UnregisterObserver(this);
-}
-
-DialRegistry* DialMediaSinkService::dial_registry() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- return DialRegistry::GetInstance();
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ content::BrowserThread::PostTask(
+ content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&DialMediaSinkService::StopOnIOThread, this));
}
DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() {
@@ -56,6 +56,51 @@ DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() {
return description_service_.get();
}
+void DialMediaSinkService::SetDialRegistryForTest(DialRegistry* dial_registry) {
+ dial_registry_ = dial_registry;
+}
+
+void DialMediaSinkService::SetDescriptionServiceForTest(
+ std::unique_ptr<DeviceDescriptionService> description_service) {
+ description_service_ = std::move(description_service);
+}
+
+void DialMediaSinkService::SetTimerForTest(std::unique_ptr<base::Timer> timer) {
+ finish_timer_ = std::move(timer);
+}
+
+void DialMediaSinkService::StartOnIOThread() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ if (!dial_registry_)
+ dial_registry_ = DialRegistry::GetInstance();
+
+ dial_registry_->RegisterObserver(this);
+ dial_registry_->OnListenerAdded();
+}
+
+void DialMediaSinkService::StopOnIOThread() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ if (!dial_registry_)
+ return;
+
+ dial_registry_->OnListenerRemoved();
+ dial_registry_->UnregisterObserver(this);
+}
+
+void DialMediaSinkService::OnFetchCompletedOnUIThread() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ if (current_sinks_ == mrp_sinks_) {
+ DVLOG(2) << "No update to sink list.";
+ return;
+ }
+
+ auto sinks = current_sinks_;
+ DVLOG(2) << "Send sinks to media router, [size]: " << sinks.size();
+ sink_discovery_callback_.Run(
+ std::vector<MediaSinkInternal>(sinks.begin(), sinks.end()));
+ mrp_sinks_ = std::move(sinks);
+}
+
void DialMediaSinkService::OnDialDeviceEvent(
const DialRegistry::DeviceList& devices) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -63,11 +108,14 @@ void DialMediaSinkService::OnDialDeviceEvent(
<< " devices";
// Add a finish timer.
- finish_timer_.reset(new base::OneShotTimer());
+ if (!finish_timer_)
Kevin M 2017/05/08 18:22:19 Could we move these conditional object creation ca
zhaobin 2017/05/08 20:13:47 Done.
+ finish_timer_.reset(new base::OneShotTimer());
+
base::TimeDelta finish_delay =
base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs);
- finish_timer_->Start(FROM_HERE, finish_delay, this,
- &DialMediaSinkService::OnFetchCompleted);
+ finish_timer_->Start(FROM_HERE, finish_delay,
+ base::Bind(&DialMediaSinkService::OnFetchCompleted,
+ base::Unretained(this)));
current_sinks_.clear();
current_devices_ = devices;
@@ -107,16 +155,19 @@ void DialMediaSinkService::OnDeviceDescriptionAvailable(
current_sinks_.insert(MediaSinkInternal(sink, extra_data));
- if (finish_timer_)
+ if (finish_timer_ && finish_timer_->IsRunning())
return;
// Start fetch timer again if device description comes back after
// |finish_timer_| fires.
+ if (!finish_timer_)
+ finish_timer_.reset(new base::OneShotTimer());
+
base::TimeDelta finish_delay =
base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs);
- finish_timer_.reset(new base::OneShotTimer());
- finish_timer_->Start(FROM_HERE, finish_delay, this,
- &DialMediaSinkService::OnFetchCompleted);
+ finish_timer_->Start(FROM_HERE, finish_delay,
+ base::Bind(&DialMediaSinkService::OnFetchCompleted,
+ base::Unretained(this)));
}
void DialMediaSinkService::OnDeviceDescriptionError(
@@ -130,18 +181,9 @@ void DialMediaSinkService::OnFetchCompleted() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(!sink_discovery_callback_.is_null());
- finish_timer_.reset();
-
- auto sinks = current_sinks_;
- if (sinks == mrp_sinks_) {
- DVLOG(2) << "No update to sink list.";
- return;
- }
-
- DVLOG(2) << "Send sinks to media router, [size]: " << sinks.size();
- sink_discovery_callback_.Run(
- std::vector<MediaSinkInternal>(sinks.begin(), sinks.end()));
- mrp_sinks_ = std::move(sinks);
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&DialMediaSinkService::OnFetchCompletedOnUIThread, this));
}
} // namespace media_router

Powered by Google App Engine
This is Rietveld 408576698