| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/media/router/media_router_mojo_impl.h" | 5 #include "chrome/browser/media/router/media_router_mojo_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/guid.h" | 8 #include "base/guid.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_vector.h" | 10 #include "base/memory/scoped_vector.h" |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 issue_manager_.ClearIssue(issue_id); | 268 issue_manager_.ClearIssue(issue_id); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void MediaRouterMojoImpl::OnPresentationSessionDetached( | 271 void MediaRouterMojoImpl::OnPresentationSessionDetached( |
| 272 const MediaRoute::Id& route_id) { | 272 const MediaRoute::Id& route_id) { |
| 273 DCHECK(thread_checker_.CalledOnValidThread()); | 273 DCHECK(thread_checker_.CalledOnValidThread()); |
| 274 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoOnPresentationSessionDetached, | 274 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoOnPresentationSessionDetached, |
| 275 base::Unretained(this), route_id)); | 275 base::Unretained(this), route_id)); |
| 276 } | 276 } |
| 277 | 277 |
| 278 void MediaRouterMojoImpl::RegisterMediaSinksObserver( | 278 bool MediaRouterMojoImpl::RegisterMediaSinksObserver( |
| 279 MediaSinksObserver* observer) { | 279 MediaSinksObserver* observer) { |
| 280 DCHECK(thread_checker_.CalledOnValidThread()); | 280 DCHECK(thread_checker_.CalledOnValidThread()); |
| 281 | 281 |
| 282 // Create an observer list for the media source and add |observer| | 282 // Create an observer list for the media source and add |observer| |
| 283 // to it. Fail if |observer| is already registered. | 283 // to it. Fail if |observer| is already registered. |
| 284 const std::string& source_id = observer->source().id(); | 284 const std::string& source_id = observer->source().id(); |
| 285 base::ObserverList<MediaSinksObserver>* observer_list = | 285 base::ObserverList<MediaSinksObserver>* observer_list = |
| 286 sinks_observers_.get(source_id); | 286 sinks_observers_.get(source_id); |
| 287 if (!observer_list) { | 287 if (!observer_list) { |
| 288 observer_list = new base::ObserverList<MediaSinksObserver>; | 288 observer_list = new base::ObserverList<MediaSinksObserver>; |
| 289 sinks_observers_.add(source_id, make_scoped_ptr(observer_list)); | 289 sinks_observers_.add(source_id, make_scoped_ptr(observer_list)); |
| 290 } else { | 290 } else { |
| 291 DCHECK(!observer_list->HasObserver(observer)); | 291 DCHECK(!observer_list->HasObserver(observer)); |
| 292 } | 292 } |
| 293 | 293 |
| 294 // We need to call DoStartObservingMediaSinks every time an observer is | 294 // We need to call DoStartObservingMediaSinks every time an observer is |
| 295 // added to ensure the observer will be notified with a fresh set of results. | 295 // added to ensure the observer will be notified with a fresh set of results. |
| 296 // TODO(imcheng): Implement caching. (crbug.com/492451) | 296 // TODO(imcheng): Implement caching. (crbug.com/492451) |
| 297 observer_list->AddObserver(observer); | 297 observer_list->AddObserver(observer); |
| 298 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStartObservingMediaSinks, | 298 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStartObservingMediaSinks, |
| 299 base::Unretained(this), source_id)); | 299 base::Unretained(this), source_id)); |
| 300 return true; |
| 300 } | 301 } |
| 301 | 302 |
| 302 void MediaRouterMojoImpl::UnregisterMediaSinksObserver( | 303 void MediaRouterMojoImpl::UnregisterMediaSinksObserver( |
| 303 MediaSinksObserver* observer) { | 304 MediaSinksObserver* observer) { |
| 304 DCHECK(thread_checker_.CalledOnValidThread()); | 305 DCHECK(thread_checker_.CalledOnValidThread()); |
| 305 | 306 |
| 306 const MediaSource::Id& source_id = observer->source().id(); | 307 const MediaSource::Id& source_id = observer->source().id(); |
| 307 auto* observer_list = sinks_observers_.get(source_id); | 308 auto* observer_list = sinks_observers_.get(source_id); |
| 308 if (!observer_list || !observer_list->HasObserver(observer)) { | 309 if (!observer_list || !observer_list->HasObserver(observer)) { |
| 309 return; | 310 return; |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 return; | 584 return; |
| 584 } | 585 } |
| 585 | 586 |
| 586 for (const auto& next_request : pending_requests_) | 587 for (const auto& next_request : pending_requests_) |
| 587 next_request.Run(); | 588 next_request.Run(); |
| 588 | 589 |
| 589 pending_requests_.clear(); | 590 pending_requests_.clear(); |
| 590 } | 591 } |
| 591 | 592 |
| 592 } // namespace media_router | 593 } // namespace media_router |
| OLD | NEW |