Chromium Code Reviews| 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..158d102bd492b6e5fb1fbbd59960839906f8127a 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 |
| @@ -22,21 +22,24 @@ DialMediaSinkService::DialMediaSinkService( |
| const OnSinksDiscoveredCallback& callback, |
| net::URLRequestContextGetter* request_context) |
| : MediaSinkService(callback), request_context_(request_context) { |
| - DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + 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); |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + content::BrowserThread::PostTask( |
| + content::BrowserThread::IO, FROM_HERE, |
| + base::Bind(&DialMediaSinkService::StopOnIOThread, this)); |
| } |
| DialRegistry* DialMediaSinkService::dial_registry() { |
| @@ -56,6 +59,32 @@ DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() { |
| return description_service_.get(); |
| } |
| +void DialMediaSinkService::StartOnIOThread() { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + dial_registry()->RegisterObserver(this); |
| + dial_registry()->OnListenerAdded(); |
| +} |
| + |
| +void DialMediaSinkService::StopOnIOThread() { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + dial_registry()->OnListenerRemoved(); |
| + dial_registry()->UnregisterObserver(this); |
| +} |
| + |
| +void DialMediaSinkService::OnFetchCompletedOnUIThread() { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + auto sinks = current_sinks_; |
|
Kevin M
2017/05/03 21:07:27
Can you just work with current_sinks_ and mrp_sink
zhaobin
2017/05/04 23:52:35
Done.
|
| + 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); |
| +} |
| + |
| void DialMediaSinkService::OnDialDeviceEvent( |
| const DialRegistry::DeviceList& devices) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| @@ -131,17 +160,9 @@ void DialMediaSinkService::OnFetchCompleted() { |
| 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 |