OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/discovery/dial/dial_media_sink_service_pro
xy.h" | 5 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_pro
xy.h" |
6 | 6 |
7 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_imp
l.h" | 7 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_imp
l.h" |
8 #include "content/public/browser/browser_context.h" | 8 #include "content/public/browser/browser_context.h" |
9 | 9 |
10 using content::BrowserThread; | 10 using content::BrowserThread; |
11 | 11 |
12 namespace media_router { | 12 namespace media_router { |
13 | 13 |
14 DialMediaSinkServiceProxy::DialMediaSinkServiceProxy( | 14 DialMediaSinkServiceProxy::DialMediaSinkServiceProxy( |
15 const MediaSinkService::OnSinksDiscoveredCallback& callback, | 15 const MediaSinkService::OnSinksDiscoveredCallback& callback, |
16 content::BrowserContext* context) | 16 content::BrowserContext* context) |
17 : MediaSinkService(callback) { | 17 : MediaSinkService(callback), observer_(nullptr) { |
18 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 18 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
19 auto* profile = Profile::FromBrowserContext(context); | 19 auto* profile = Profile::FromBrowserContext(context); |
20 request_context_ = profile->GetRequestContext(); | 20 request_context_ = profile->GetRequestContext(); |
21 DCHECK(request_context_); | 21 DCHECK(request_context_); |
22 } | 22 } |
23 | 23 |
24 DialMediaSinkServiceProxy::~DialMediaSinkServiceProxy() = default; | 24 DialMediaSinkServiceProxy::~DialMediaSinkServiceProxy() = default; |
25 | 25 |
26 void DialMediaSinkServiceProxy::Start() { | 26 void DialMediaSinkServiceProxy::Start() { |
27 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 27 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
28 | 28 |
29 content::BrowserThread::PostTask( | 29 content::BrowserThread::PostTask( |
30 content::BrowserThread::IO, FROM_HERE, | 30 content::BrowserThread::IO, FROM_HERE, |
31 base::Bind(&DialMediaSinkServiceProxy::StartOnIOThread, this)); | 31 base::Bind(&DialMediaSinkServiceProxy::StartOnIOThread, this)); |
32 } | 32 } |
33 | 33 |
34 void DialMediaSinkServiceProxy::Stop() { | 34 void DialMediaSinkServiceProxy::Stop() { |
35 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 35 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
36 | 36 |
37 content::BrowserThread::PostTask( | 37 content::BrowserThread::PostTask( |
38 content::BrowserThread::IO, FROM_HERE, | 38 content::BrowserThread::IO, FROM_HERE, |
39 base::Bind(&DialMediaSinkServiceProxy::StopOnIOThread, this)); | 39 base::Bind(&DialMediaSinkServiceProxy::StopOnIOThread, this)); |
40 } | 40 } |
41 | 41 |
| 42 void DialMediaSinkServiceProxy::AddObserver(Observer* observer) { |
| 43 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 44 DCHECK(observer); |
| 45 observer_ = observer; |
| 46 } |
| 47 |
| 48 void DialMediaSinkServiceProxy::RemoveObserver(Observer* observer) { |
| 49 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 50 DCHECK(observer); |
| 51 if (dial_media_sink_service_) |
| 52 dial_media_sink_service_->RemoveObserver(observer); |
| 53 |
| 54 observer_ = nullptr; |
| 55 } |
| 56 |
42 void DialMediaSinkServiceProxy::SetDialMediaSinkServiceForTest( | 57 void DialMediaSinkServiceProxy::SetDialMediaSinkServiceForTest( |
43 std::unique_ptr<DialMediaSinkServiceImpl> dial_media_sink_service) { | 58 std::unique_ptr<DialMediaSinkServiceImpl> dial_media_sink_service) { |
44 DCHECK(dial_media_sink_service); | 59 DCHECK(dial_media_sink_service); |
45 DCHECK(!dial_media_sink_service_); | 60 DCHECK(!dial_media_sink_service_); |
46 dial_media_sink_service_ = std::move(dial_media_sink_service); | 61 dial_media_sink_service_ = std::move(dial_media_sink_service); |
47 } | 62 } |
48 | 63 |
49 void DialMediaSinkServiceProxy::StartOnIOThread() { | 64 void DialMediaSinkServiceProxy::StartOnIOThread() { |
50 if (!dial_media_sink_service_) { | 65 if (!dial_media_sink_service_) { |
51 // Need to explicitly delete |dial_media_sink_service_| outside dtor to | 66 // Need to explicitly delete |dial_media_sink_service_| outside dtor to |
52 // avoid circular dependency. | 67 // avoid circular dependency. |
53 dial_media_sink_service_ = base::MakeUnique<DialMediaSinkServiceImpl>( | 68 dial_media_sink_service_ = base::MakeUnique<DialMediaSinkServiceImpl>( |
54 base::Bind(&DialMediaSinkServiceProxy::OnSinksDiscoveredOnIOThread, | 69 base::Bind(&DialMediaSinkServiceProxy::OnSinksDiscoveredOnIOThread, |
55 this), | 70 this), |
56 request_context_.get()); | 71 request_context_.get()); |
| 72 if (observer_) |
| 73 dial_media_sink_service_->AddObserver(observer_); |
57 } | 74 } |
58 | 75 |
59 dial_media_sink_service_->Start(); | 76 dial_media_sink_service_->Start(); |
60 } | 77 } |
61 | 78 |
62 void DialMediaSinkServiceProxy::StopOnIOThread() { | 79 void DialMediaSinkServiceProxy::StopOnIOThread() { |
63 if (!dial_media_sink_service_) | 80 if (!dial_media_sink_service_) |
64 return; | 81 return; |
65 | 82 |
66 dial_media_sink_service_->Stop(); | 83 dial_media_sink_service_->Stop(); |
67 dial_media_sink_service_.reset(); | 84 dial_media_sink_service_.reset(); |
68 } | 85 } |
69 | 86 |
70 void DialMediaSinkServiceProxy::OnSinksDiscoveredOnIOThread( | 87 void DialMediaSinkServiceProxy::OnSinksDiscoveredOnIOThread( |
71 std::vector<MediaSinkInternal> sinks) { | 88 std::vector<MediaSinkInternal> sinks) { |
72 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 89 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
73 content::BrowserThread::PostTask( | 90 content::BrowserThread::PostTask( |
74 content::BrowserThread::UI, FROM_HERE, | 91 content::BrowserThread::UI, FROM_HERE, |
75 base::Bind(sink_discovery_callback_, std::move(sinks))); | 92 base::Bind(sink_discovery_callback_, std::move(sinks))); |
76 } | 93 } |
77 | 94 |
78 } // namespace media_router | 95 } // namespace media_router |
OLD | NEW |