| 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/ui/webui/media_router/query_result_manager.h" | 5 #include "chrome/browser/ui/webui/media_router/query_result_manager.h" |
| 6 | 6 |
| 7 #include "base/containers/hash_tables.h" | 7 #include "base/containers/hash_tables.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "chrome/browser/media/router/media_router.h" | 9 #include "chrome/browser/media/router/media_router.h" |
| 10 #include "chrome/browser/media/router/media_sinks_observer.h" | 10 #include "chrome/browser/media/router/media_sinks_observer.h" |
| 11 | 11 |
| 12 namespace media_router { | 12 namespace media_router { |
| 13 | 13 |
| 14 // MediaSinkObserver that propagates results back to |result_manager|. | 14 // MediaSinkObserver that propagates results back to |result_manager|. |
| 15 // An instance of this class is associated with each registered MediaCastMode. | 15 // An instance of this class is associated with each registered MediaCastMode. |
| 16 class QueryResultManager::CastModeMediaSinksObserver | 16 class QueryResultManager::CastModeMediaSinksObserver |
| 17 : public MediaSinksObserver { | 17 : public MediaSinksObserver { |
| 18 public: | 18 public: |
| 19 CastModeMediaSinksObserver(MediaCastMode cast_mode, | 19 CastModeMediaSinksObserver(MediaCastMode cast_mode, |
| 20 const MediaSource& source, | 20 const MediaSource& source, |
| 21 const GURL& origin, |
| 21 MediaRouter* router, | 22 MediaRouter* router, |
| 22 QueryResultManager* result_manager) | 23 QueryResultManager* result_manager) |
| 23 : MediaSinksObserver(router, source), | 24 : MediaSinksObserver(router, source, origin), |
| 24 cast_mode_(cast_mode), | 25 cast_mode_(cast_mode), |
| 25 result_manager_(result_manager) { | 26 result_manager_(result_manager) { |
| 26 DCHECK(result_manager); | 27 DCHECK(result_manager); |
| 27 } | 28 } |
| 28 | 29 |
| 29 ~CastModeMediaSinksObserver() override {} | 30 ~CastModeMediaSinksObserver() override {} |
| 30 | 31 |
| 31 // MediaSinksObserver | 32 // MediaSinksObserver |
| 32 void OnSinksReceived(const std::vector<MediaSink>& result) override { | 33 void OnSinksReceived(const std::vector<MediaSink>& result) override { |
| 33 latest_sink_ids_.clear(); | 34 latest_sink_ids_.clear(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 observers_.AddObserver(observer); | 67 observers_.AddObserver(observer); |
| 67 } | 68 } |
| 68 | 69 |
| 69 void QueryResultManager::RemoveObserver(Observer* observer) { | 70 void QueryResultManager::RemoveObserver(Observer* observer) { |
| 70 DCHECK(thread_checker_.CalledOnValidThread()); | 71 DCHECK(thread_checker_.CalledOnValidThread()); |
| 71 DCHECK(observer); | 72 DCHECK(observer); |
| 72 observers_.RemoveObserver(observer); | 73 observers_.RemoveObserver(observer); |
| 73 } | 74 } |
| 74 | 75 |
| 75 void QueryResultManager::StartSinksQuery(MediaCastMode cast_mode, | 76 void QueryResultManager::StartSinksQuery(MediaCastMode cast_mode, |
| 76 const MediaSource& source) { | 77 const MediaSource& source, |
| 78 const GURL& origin) { |
| 77 DCHECK(thread_checker_.CalledOnValidThread()); | 79 DCHECK(thread_checker_.CalledOnValidThread()); |
| 78 if (source.Empty()) { | 80 if (source.Empty()) { |
| 79 LOG(WARNING) << "StartSinksQuery called with empty source for " | 81 LOG(WARNING) << "StartSinksQuery called with empty source for " |
| 80 << cast_mode; | 82 << cast_mode; |
| 81 return; | 83 return; |
| 82 } | 84 } |
| 83 | 85 |
| 84 SetSourceForCastMode(cast_mode, source); | 86 SetSourceForCastMode(cast_mode, source); |
| 85 RemoveObserverForCastMode(cast_mode); | 87 RemoveObserverForCastMode(cast_mode); |
| 86 UpdateWithSinksQueryResult(cast_mode, std::vector<MediaSink>()); | 88 UpdateWithSinksQueryResult(cast_mode, std::vector<MediaSink>()); |
| 87 | 89 |
| 88 scoped_ptr<CastModeMediaSinksObserver> observer( | 90 scoped_ptr<CastModeMediaSinksObserver> observer( |
| 89 new CastModeMediaSinksObserver(cast_mode, source, router_, this)); | 91 new CastModeMediaSinksObserver(cast_mode, source, origin, router_, this)); |
| 90 observer->Init(); | 92 observer->Init(); |
| 91 auto result = | 93 auto result = |
| 92 sinks_observers_.insert(std::make_pair(cast_mode, std::move(observer))); | 94 sinks_observers_.insert(std::make_pair(cast_mode, std::move(observer))); |
| 93 DCHECK(result.second); | 95 DCHECK(result.second); |
| 94 NotifyOnResultsUpdated(); | 96 NotifyOnResultsUpdated(); |
| 95 } | 97 } |
| 96 | 98 |
| 97 void QueryResultManager::StopSinksQuery(MediaCastMode cast_mode) { | 99 void QueryResultManager::StopSinksQuery(MediaCastMode cast_mode) { |
| 98 DCHECK(thread_checker_.CalledOnValidThread()); | 100 DCHECK(thread_checker_.CalledOnValidThread()); |
| 99 RemoveObserverForCastMode(cast_mode); | 101 RemoveObserverForCastMode(cast_mode); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 void QueryResultManager::NotifyOnResultsUpdated() { | 170 void QueryResultManager::NotifyOnResultsUpdated() { |
| 169 std::vector<MediaSinkWithCastModes> sinks; | 171 std::vector<MediaSinkWithCastModes> sinks; |
| 170 for (const auto& sink_pair : all_sinks_) { | 172 for (const auto& sink_pair : all_sinks_) { |
| 171 sinks.push_back(sink_pair.second); | 173 sinks.push_back(sink_pair.second); |
| 172 } | 174 } |
| 173 FOR_EACH_OBSERVER(QueryResultManager::Observer, observers_, | 175 FOR_EACH_OBSERVER(QueryResultManager::Observer, observers_, |
| 174 OnResultsUpdated(sinks)); | 176 OnResultsUpdated(sinks)); |
| 175 } | 177 } |
| 176 | 178 |
| 177 } // namespace media_router | 179 } // namespace media_router |
| OLD | NEW |