OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/local_discovery/service_discovery_client_mac.h" | 5 #include "chrome/browser/local_discovery/service_discovery_client_mac.h" |
6 | 6 |
7 #import <Foundation/Foundation.h> | 7 #import <Foundation/Foundation.h> |
8 #import <arpa/inet.h> | 8 #import <arpa/inet.h> |
9 #import <net/if_dl.h> | 9 #import <net/if_dl.h> |
10 | 10 |
11 #include "base/memory/singleton.h" | 11 #include "base/memory/singleton.h" |
12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 13 #include "base/single_thread_task_runner.h" |
| 14 #include "base/thread_task_runner_handle.h" |
13 #include "base/threading/thread.h" | 15 #include "base/threading/thread.h" |
14 | 16 |
15 using local_discovery::ServiceWatcherImplMac; | 17 using local_discovery::ServiceWatcherImplMac; |
16 using local_discovery::ServiceResolverImplMac; | 18 using local_discovery::ServiceResolverImplMac; |
17 | 19 |
18 @interface NetServiceBrowserDelegate | 20 @interface NetServiceBrowserDelegate |
19 : NSObject<NSNetServiceBrowserDelegate, NSNetServiceDelegate> { | 21 : NSObject<NSNetServiceBrowserDelegate, NSNetServiceDelegate> { |
20 @private | 22 @private |
21 ServiceWatcherImplMac::NetServiceBrowserContainer* container_; // weak. | 23 ServiceWatcherImplMac::NetServiceBrowserContainer* container_; // weak. |
22 base::scoped_nsobject<NSMutableArray> services_; | 24 base::scoped_nsobject<NSMutableArray> services_; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 new base::Thread(kServiceDiscoveryThreadName)); | 152 new base::Thread(kServiceDiscoveryThreadName)); |
151 // Only TYPE_UI uses an NSRunLoop. | 153 // Only TYPE_UI uses an NSRunLoop. |
152 base::Thread::Options options(base::MessageLoop::TYPE_UI, 0); | 154 base::Thread::Options options(base::MessageLoop::TYPE_UI, 0); |
153 service_discovery_thread_->StartWithOptions(options); | 155 service_discovery_thread_->StartWithOptions(options); |
154 } | 156 } |
155 } | 157 } |
156 | 158 |
157 ServiceWatcherImplMac::NetServiceBrowserContainer::NetServiceBrowserContainer( | 159 ServiceWatcherImplMac::NetServiceBrowserContainer::NetServiceBrowserContainer( |
158 const std::string& service_type, | 160 const std::string& service_type, |
159 const ServiceWatcher::UpdatedCallback& callback, | 161 const ServiceWatcher::UpdatedCallback& callback, |
160 scoped_refptr<base::MessageLoopProxy> service_discovery_runner) | 162 scoped_refptr<base::SingleThreadTaskRunner> service_discovery_runner) |
161 : service_type_(service_type), | 163 : service_type_(service_type), |
162 callback_(callback), | 164 callback_(callback), |
163 callback_runner_(base::MessageLoopProxy::current()), | 165 callback_runner_(base::ThreadTaskRunnerHandle::Get()), |
164 service_discovery_runner_(service_discovery_runner), | 166 service_discovery_runner_(service_discovery_runner), |
165 weak_factory_(this) {} | 167 weak_factory_(this) { |
| 168 } |
166 | 169 |
167 ServiceWatcherImplMac::NetServiceBrowserContainer:: | 170 ServiceWatcherImplMac::NetServiceBrowserContainer:: |
168 ~NetServiceBrowserContainer() { | 171 ~NetServiceBrowserContainer() { |
169 DCHECK(IsOnServiceDiscoveryThread()); | 172 DCHECK(IsOnServiceDiscoveryThread()); |
170 } | 173 } |
171 | 174 |
172 void ServiceWatcherImplMac::NetServiceBrowserContainer::Start() { | 175 void ServiceWatcherImplMac::NetServiceBrowserContainer::Start() { |
173 service_discovery_runner_->PostTask( | 176 service_discovery_runner_->PostTask( |
174 FROM_HERE, | 177 FROM_HERE, |
175 base::Bind(&NetServiceBrowserContainer::StartOnDiscoveryThread, | 178 base::Bind(&NetServiceBrowserContainer::StartOnDiscoveryThread, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 callback_runner_->PostTask(FROM_HERE, base::Bind(callback_, update, service)); | 222 callback_runner_->PostTask(FROM_HERE, base::Bind(callback_, update, service)); |
220 } | 223 } |
221 | 224 |
222 void ServiceWatcherImplMac::NetServiceBrowserContainer::DeleteSoon() { | 225 void ServiceWatcherImplMac::NetServiceBrowserContainer::DeleteSoon() { |
223 service_discovery_runner_->DeleteSoon(FROM_HERE, this); | 226 service_discovery_runner_->DeleteSoon(FROM_HERE, this); |
224 } | 227 } |
225 | 228 |
226 ServiceWatcherImplMac::ServiceWatcherImplMac( | 229 ServiceWatcherImplMac::ServiceWatcherImplMac( |
227 const std::string& service_type, | 230 const std::string& service_type, |
228 const ServiceWatcher::UpdatedCallback& callback, | 231 const ServiceWatcher::UpdatedCallback& callback, |
229 scoped_refptr<base::MessageLoopProxy> service_discovery_runner) | 232 scoped_refptr<base::SingleThreadTaskRunner> service_discovery_runner) |
230 : service_type_(service_type), | 233 : service_type_(service_type), |
231 callback_(callback), | 234 callback_(callback), |
232 started_(false), | 235 started_(false), |
233 weak_factory_(this) { | 236 weak_factory_(this) { |
234 container_.reset(new NetServiceBrowserContainer( | 237 container_.reset(new NetServiceBrowserContainer( |
235 service_type, | 238 service_type, |
236 base::Bind(&ServiceWatcherImplMac::OnServicesUpdate, | 239 base::Bind(&ServiceWatcherImplMac::OnServicesUpdate, |
237 weak_factory_.GetWeakPtr()), | 240 weak_factory_.GetWeakPtr()), |
238 service_discovery_runner)); | 241 service_discovery_runner)); |
239 } | 242 } |
(...skipping 26 matching lines...) Expand all Loading... |
266 void ServiceWatcherImplMac::OnServicesUpdate(ServiceWatcher::UpdateType update, | 269 void ServiceWatcherImplMac::OnServicesUpdate(ServiceWatcher::UpdateType update, |
267 const std::string& service) { | 270 const std::string& service) { |
268 VLOG(1) << "ServiceWatcherImplMac::OnServicesUpdate: " | 271 VLOG(1) << "ServiceWatcherImplMac::OnServicesUpdate: " |
269 << service + "." + service_type_; | 272 << service + "." + service_type_; |
270 callback_.Run(update, service + "." + service_type_); | 273 callback_.Run(update, service + "." + service_type_); |
271 } | 274 } |
272 | 275 |
273 ServiceResolverImplMac::NetServiceContainer::NetServiceContainer( | 276 ServiceResolverImplMac::NetServiceContainer::NetServiceContainer( |
274 const std::string& service_name, | 277 const std::string& service_name, |
275 const ServiceResolver::ResolveCompleteCallback& callback, | 278 const ServiceResolver::ResolveCompleteCallback& callback, |
276 scoped_refptr<base::MessageLoopProxy> service_discovery_runner) | 279 scoped_refptr<base::SingleThreadTaskRunner> service_discovery_runner) |
277 : service_name_(service_name), | 280 : service_name_(service_name), |
278 callback_(callback), | 281 callback_(callback), |
279 callback_runner_(base::MessageLoopProxy::current()), | 282 callback_runner_(base::ThreadTaskRunnerHandle::Get()), |
280 service_discovery_runner_(service_discovery_runner), | 283 service_discovery_runner_(service_discovery_runner), |
281 weak_factory_(this) {} | 284 weak_factory_(this) { |
| 285 } |
282 | 286 |
283 ServiceResolverImplMac::NetServiceContainer::~NetServiceContainer() { | 287 ServiceResolverImplMac::NetServiceContainer::~NetServiceContainer() { |
284 DCHECK(IsOnServiceDiscoveryThread()); | 288 DCHECK(IsOnServiceDiscoveryThread()); |
285 } | 289 } |
286 | 290 |
287 void ServiceResolverImplMac::NetServiceContainer::StartResolving() { | 291 void ServiceResolverImplMac::NetServiceContainer::StartResolving() { |
288 service_discovery_runner_->PostTask( | 292 service_discovery_runner_->PostTask( |
289 FROM_HERE, | 293 FROM_HERE, |
290 base::Bind(&NetServiceContainer::StartResolvingOnDiscoveryThread, | 294 base::Bind(&NetServiceContainer::StartResolvingOnDiscoveryThread, |
291 weak_factory_.GetWeakPtr())); | 295 weak_factory_.GetWeakPtr())); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 } | 363 } |
360 | 364 |
361 void ServiceResolverImplMac::NetServiceContainer::SetServiceForTesting( | 365 void ServiceResolverImplMac::NetServiceContainer::SetServiceForTesting( |
362 base::scoped_nsobject<NSNetService> service) { | 366 base::scoped_nsobject<NSNetService> service) { |
363 service_ = service; | 367 service_ = service; |
364 } | 368 } |
365 | 369 |
366 ServiceResolverImplMac::ServiceResolverImplMac( | 370 ServiceResolverImplMac::ServiceResolverImplMac( |
367 const std::string& service_name, | 371 const std::string& service_name, |
368 const ServiceResolver::ResolveCompleteCallback& callback, | 372 const ServiceResolver::ResolveCompleteCallback& callback, |
369 scoped_refptr<base::MessageLoopProxy> service_discovery_runner) | 373 scoped_refptr<base::SingleThreadTaskRunner> service_discovery_runner) |
370 : service_name_(service_name), | 374 : service_name_(service_name), |
371 callback_(callback), | 375 callback_(callback), |
372 has_resolved_(false), | 376 has_resolved_(false), |
373 weak_factory_(this) { | 377 weak_factory_(this) { |
374 container_.reset(new NetServiceContainer( | 378 container_.reset(new NetServiceContainer( |
375 service_name, | 379 service_name, |
376 base::Bind(&ServiceResolverImplMac::OnResolveComplete, | 380 base::Bind(&ServiceResolverImplMac::OnResolveComplete, |
377 weak_factory_.GetWeakPtr()), | 381 weak_factory_.GetWeakPtr()), |
378 service_discovery_runner)); | 382 service_discovery_runner)); |
379 } | 383 } |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 container_->OnResolveUpdate(local_discovery::ServiceResolver::STATUS_SUCCESS); | 470 container_->OnResolveUpdate(local_discovery::ServiceResolver::STATUS_SUCCESS); |
467 } | 471 } |
468 | 472 |
469 - (void)netService:(NSNetService *)sender | 473 - (void)netService:(NSNetService *)sender |
470 didNotResolve:(NSDictionary *)errorDict { | 474 didNotResolve:(NSDictionary *)errorDict { |
471 container_->OnResolveUpdate( | 475 container_->OnResolveUpdate( |
472 local_discovery::ServiceResolver::STATUS_REQUEST_TIMEOUT); | 476 local_discovery::ServiceResolver::STATUS_REQUEST_TIMEOUT); |
473 } | 477 } |
474 | 478 |
475 @end | 479 @end |
OLD | NEW |