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

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

Issue 2837363002: [Media Router] Use DialMediaSinkService in MediaRouterMojoImpl (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 unified diff | Download patch
OLDNEW
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.h" 5 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service.h"
6 6
7 #include "chrome/browser/media/router/discovery/dial/dial_device_data.h" 7 #include "chrome/browser/media/router/discovery/dial/dial_device_data.h"
8 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/profiles/profile.h"
9 #include "content/public/browser/browser_thread.h" 9 #include "content/public/browser/browser_thread.h"
10 #include "net/url_request/url_request_context_getter.h" 10 #include "net/url_request/url_request_context_getter.h"
11 11
12 using content::BrowserThread; 12 using content::BrowserThread;
13 13
14 namespace { 14 namespace {
15 // Time interval when media sink service sends sinks to MRP. 15 // Time interval when media sink service sends sinks to MRP.
16 const int kFetchCompleteTimeoutSecs = 3; 16 const int kFetchCompleteTimeoutSecs = 3;
17 } 17 }
18 18
19 namespace media_router { 19 namespace media_router {
20 20
21 DialMediaSinkService::DialMediaSinkService( 21 DialMediaSinkService::DialMediaSinkService(
22 const OnSinksDiscoveredCallback& callback, 22 const OnSinksDiscoveredCallback& callback,
23 net::URLRequestContextGetter* request_context) 23 net::URLRequestContextGetter* request_context)
24 : MediaSinkService(callback), request_context_(request_context) { 24 : MediaSinkService(callback), request_context_(request_context) {
25 DCHECK_CURRENTLY_ON(BrowserThread::IO); 25 DCHECK_CURRENTLY_ON(BrowserThread::UI);
26 DCHECK(request_context_); 26 DCHECK(request_context_);
27 } 27 }
28 28
29 DialMediaSinkService::~DialMediaSinkService() {} 29 DialMediaSinkService::~DialMediaSinkService() {}
30 30
31 void DialMediaSinkService::Start() { 31 void DialMediaSinkService::Start() {
32 DCHECK_CURRENTLY_ON(BrowserThread::IO); 32 DCHECK_CURRENTLY_ON(BrowserThread::UI);
33 dial_registry()->RegisterObserver(this); 33 content::BrowserThread::PostTask(
34 dial_registry()->StartPeriodicDiscovery(); 34 content::BrowserThread::IO, FROM_HERE,
35 base::Bind(&DialMediaSinkService::StartOnIOThread, this));
35 } 36 }
36 37
37 void DialMediaSinkService::Stop() { 38 void DialMediaSinkService::Stop() {
38 DCHECK_CURRENTLY_ON(BrowserThread::IO); 39 DCHECK_CURRENTLY_ON(BrowserThread::UI);
39 dial_registry()->UnregisterObserver(this); 40 content::BrowserThread::PostTask(
41 content::BrowserThread::IO, FROM_HERE,
42 base::Bind(&DialMediaSinkService::StopOnIOThread, this));
40 } 43 }
41 44
42 DialRegistry* DialMediaSinkService::dial_registry() { 45 DialRegistry* DialMediaSinkService::dial_registry() {
43 DCHECK_CURRENTLY_ON(BrowserThread::IO); 46 DCHECK_CURRENTLY_ON(BrowserThread::IO);
44 return DialRegistry::GetInstance(); 47 return DialRegistry::GetInstance();
45 } 48 }
46 49
47 DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() { 50 DeviceDescriptionService* DialMediaSinkService::GetDescriptionService() {
48 DCHECK_CURRENTLY_ON(BrowserThread::IO); 51 DCHECK_CURRENTLY_ON(BrowserThread::IO);
49 if (!description_service_.get()) { 52 if (!description_service_.get()) {
50 description_service_.reset(new DeviceDescriptionService( 53 description_service_.reset(new DeviceDescriptionService(
51 base::Bind(&DialMediaSinkService::OnDeviceDescriptionAvailable, 54 base::Bind(&DialMediaSinkService::OnDeviceDescriptionAvailable,
52 base::Unretained(this)), 55 base::Unretained(this)),
53 base::Bind(&DialMediaSinkService::OnDeviceDescriptionError, 56 base::Bind(&DialMediaSinkService::OnDeviceDescriptionError,
54 base::Unretained(this)))); 57 base::Unretained(this))));
55 } 58 }
56 return description_service_.get(); 59 return description_service_.get();
57 } 60 }
58 61
62 void DialMediaSinkService::StartOnIOThread() {
63 DCHECK_CURRENTLY_ON(BrowserThread::IO);
64 dial_registry()->RegisterObserver(this);
65 dial_registry()->OnListenerAdded();
66 }
67
68 void DialMediaSinkService::StopOnIOThread() {
69 DCHECK_CURRENTLY_ON(BrowserThread::IO);
70 dial_registry()->OnListenerRemoved();
71 dial_registry()->UnregisterObserver(this);
72 }
73
74 void DialMediaSinkService::OnFetchCompletedOnUIThread() {
75 DCHECK_CURRENTLY_ON(BrowserThread::UI);
76 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.
77 if (sinks == mrp_sinks_) {
78 DVLOG(2) << "No update to sink list.";
79 return;
80 }
81
82 DVLOG(2) << "Send sinks to media router, [size]: " << sinks.size();
83 sink_discovery_callback_.Run(
84 std::vector<MediaSinkInternal>(sinks.begin(), sinks.end()));
85 mrp_sinks_ = std::move(sinks);
86 }
87
59 void DialMediaSinkService::OnDialDeviceEvent( 88 void DialMediaSinkService::OnDialDeviceEvent(
60 const DialRegistry::DeviceList& devices) { 89 const DialRegistry::DeviceList& devices) {
61 DCHECK_CURRENTLY_ON(BrowserThread::IO); 90 DCHECK_CURRENTLY_ON(BrowserThread::IO);
62 DVLOG(2) << "DialMediaSinkService::OnDialDeviceEvent found " << devices.size() 91 DVLOG(2) << "DialMediaSinkService::OnDialDeviceEvent found " << devices.size()
63 << " devices"; 92 << " devices";
64 93
65 // Add a finish timer. 94 // Add a finish timer.
66 finish_timer_.reset(new base::OneShotTimer()); 95 finish_timer_.reset(new base::OneShotTimer());
Kevin M 2017/05/03 21:07:27 Can we reuse the finish_timer object instead of al
zhaobin 2017/05/04 23:52:35 Done.
67 base::TimeDelta finish_delay = 96 base::TimeDelta finish_delay =
68 base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs); 97 base::TimeDelta::FromSeconds(kFetchCompleteTimeoutSecs);
69 finish_timer_->Start(FROM_HERE, finish_delay, this, 98 finish_timer_->Start(FROM_HERE, finish_delay, this,
70 &DialMediaSinkService::OnFetchCompleted); 99 &DialMediaSinkService::OnFetchCompleted);
71 100
72 current_sinks_.clear(); 101 current_sinks_.clear();
73 current_devices_ = devices; 102 current_devices_ = devices;
74 103
75 GetDescriptionService()->GetDeviceDescriptions(devices, 104 GetDescriptionService()->GetDeviceDescriptions(devices,
76 request_context_.get()); 105 request_context_.get());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 const std::string& error_message) { 153 const std::string& error_message) {
125 DCHECK_CURRENTLY_ON(BrowserThread::IO); 154 DCHECK_CURRENTLY_ON(BrowserThread::IO);
126 DVLOG(2) << "OnDescriptionFetchesError [message]: " << error_message; 155 DVLOG(2) << "OnDescriptionFetchesError [message]: " << error_message;
127 } 156 }
128 157
129 void DialMediaSinkService::OnFetchCompleted() { 158 void DialMediaSinkService::OnFetchCompleted() {
130 DCHECK_CURRENTLY_ON(BrowserThread::IO); 159 DCHECK_CURRENTLY_ON(BrowserThread::IO);
131 DCHECK(!sink_discovery_callback_.is_null()); 160 DCHECK(!sink_discovery_callback_.is_null());
132 161
133 finish_timer_.reset(); 162 finish_timer_.reset();
134 163 content::BrowserThread::PostTask(
135 auto sinks = current_sinks_; 164 content::BrowserThread::UI, FROM_HERE,
136 if (sinks == mrp_sinks_) { 165 base::Bind(&DialMediaSinkService::OnFetchCompletedOnUIThread, this));
137 DVLOG(2) << "No update to sink list.";
138 return;
139 }
140
141 DVLOG(2) << "Send sinks to media router, [size]: " << sinks.size();
142 sink_discovery_callback_.Run(
143 std::vector<MediaSinkInternal>(sinks.begin(), sinks.end()));
144 mrp_sinks_ = std::move(sinks);
145 } 166 }
146 167
147 } // namespace media_router 168 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698