| 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 |