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

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

Issue 2868263002: [Media Router] Add some SetForTest() functions to DialMediaSinkService and update unit tests (Closed)
Patch Set: resolve code review comments from Mark 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..c5a53717e8496e0ada86264d73e47d52ee3bc33b 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
@@ -26,22 +26,29 @@ DialMediaSinkService::DialMediaSinkService(
DCHECK(request_context_);
}
-DialMediaSinkService::~DialMediaSinkService() {}
+DialMediaSinkService::~DialMediaSinkService() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ Stop();
+}
void DialMediaSinkService::Start() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- dial_registry()->RegisterObserver(this);
- dial_registry()->StartPeriodicDiscovery();
+ if (dial_registry_)
+ return;
+
+ dial_registry_ = DialRegistry::GetInstance();
+ dial_registry_->RegisterObserver(this);
+ dial_registry_->OnListenerAdded();
}
void DialMediaSinkService::Stop() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- dial_registry()->UnregisterObserver(this);
-}
+ if (!dial_registry_)
+ return;
-DialRegistry* DialMediaSinkService::dial_registry() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- return DialRegistry::GetInstance();
+ dial_registry_->OnListenerRemoved();
+ dial_registry_->UnregisterObserver(this);
+ dial_registry_ = nullptr;
}
DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() {
@@ -56,18 +63,33 @@ DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() {
return description_service_.get();
}
+void DialMediaSinkService::SetDialRegistryForTest(DialRegistry* dial_registry) {
+ DCHECK(!dial_registry_);
+ dial_registry_ = dial_registry;
+
+ DCHECK(dial_registry);
+ dial_registry_->RegisterObserver(this);
+ dial_registry_->OnListenerAdded();
+}
+
+void DialMediaSinkService::SetDescriptionServiceForTest(
+ std::unique_ptr<DeviceDescriptionService> description_service) {
+ DCHECK(!description_service_);
+ description_service_ = std::move(description_service);
+}
+
+void DialMediaSinkService::SetTimerForTest(std::unique_ptr<base::Timer> timer) {
+ DCHECK(!finish_timer_);
+ finish_timer_ = std::move(timer);
+}
+
void DialMediaSinkService::OnDialDeviceEvent(
const DialRegistry::DeviceList& devices) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DVLOG(2) << "DialMediaSinkService::OnDialDeviceEvent found " << devices.size()
<< " devices";
- // Add a finish timer.
- finish_timer_.reset(new base::OneShotTimer());
- base::TimeDelta finish_delay =
- base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs);
- finish_timer_->Start(FROM_HERE, finish_delay, this,
- &DialMediaSinkService::OnFetchCompleted);
+ StartTimer();
current_sinks_.clear();
current_devices_ = devices;
@@ -107,16 +129,10 @@ void DialMediaSinkService::OnDeviceDescriptionAvailable(
current_sinks_.insert(MediaSinkInternal(sink, extra_data));
- if (finish_timer_)
- return;
-
// Start fetch timer again if device description comes back after
// |finish_timer_| fires.
- base::TimeDelta finish_delay =
- base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs);
- finish_timer_.reset(new base::OneShotTimer());
- finish_timer_->Start(FROM_HERE, finish_delay, this,
- &DialMediaSinkService::OnFetchCompleted);
+ if (!finish_timer_->IsRunning())
+ StartTimer();
}
void DialMediaSinkService::OnDeviceDescriptionError(
@@ -127,21 +143,29 @@ void DialMediaSinkService::OnDeviceDescriptionError(
}
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_) {
+ if (current_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);
+ DVLOG(2) << "Send sinks to media router, [size]: " << current_sinks_.size();
+ sink_discovery_callback_.Run(std::vector<MediaSinkInternal>(
+ current_sinks_.begin(), current_sinks_.end()));
+ mrp_sinks_ = current_sinks_;
+}
+
+void DialMediaSinkService::StartTimer() {
+ // Create a finish timer.
+ if (!finish_timer_)
+ finish_timer_.reset(new base::OneShotTimer());
+
+ base::TimeDelta finish_delay =
+ base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs);
+ finish_timer_->Start(FROM_HERE, finish_delay,
+ base::Bind(&DialMediaSinkService::OnFetchCompleted,
+ base::Unretained(this)));
}
} // namespace media_router

Powered by Google App Engine
This is Rietveld 408576698