Chromium Code Reviews| 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_host_client.h" | 5 #include "chrome/browser/local_discovery/service_discovery_host_client.h" |
| 6 | 6 |
| 7 #if defined(OS_POSIX) | 7 #if defined(OS_POSIX) |
| 8 #include "base/file_descriptor_posix.h" | 8 #include "base/file_descriptor_posix.h" |
| 9 #endif // OS_POSIX | 9 #endif // OS_POSIX |
| 10 | 10 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 ServiceWatcherProxy(ServiceDiscoveryHostClient* host, | 23 ServiceWatcherProxy(ServiceDiscoveryHostClient* host, |
| 24 const std::string& service_type, | 24 const std::string& service_type, |
| 25 const ServiceWatcher::UpdatedCallback& callback) | 25 const ServiceWatcher::UpdatedCallback& callback) |
| 26 : host_(host), | 26 : host_(host), |
| 27 service_type_(service_type), | 27 service_type_(service_type), |
| 28 id_(host_->RegisterWatcherCallback(callback)), | 28 id_(host_->RegisterWatcherCallback(callback)), |
| 29 started_(false) { | 29 started_(false) { |
| 30 } | 30 } |
| 31 | 31 |
| 32 virtual ~ServiceWatcherProxy() { | 32 virtual ~ServiceWatcherProxy() { |
| 33 VLOG(1) << "~ServiceWatcherProxy on browser process with id " << id_; | |
| 33 host_->UnregisterWatcherCallback(id_); | 34 host_->UnregisterWatcherCallback(id_); |
| 34 if (started_) | 35 if (started_) |
| 35 host_->Send(new LocalDiscoveryMsg_DestroyWatcher(id_)); | 36 host_->Send(new LocalDiscoveryMsg_DestroyWatcher(id_)); |
| 36 } | 37 } |
| 37 | 38 |
| 38 virtual void Start() OVERRIDE { | 39 virtual void Start() OVERRIDE { |
| 40 VLOG(1) << "ServiceWatcher::Start on browser process with id " << id_; | |
| 39 DCHECK(!started_); | 41 DCHECK(!started_); |
| 40 host_->Send(new LocalDiscoveryMsg_StartWatcher(id_, service_type_)); | 42 host_->Send(new LocalDiscoveryMsg_StartWatcher(id_, service_type_)); |
| 41 started_ = true; | 43 started_ = true; |
| 42 } | 44 } |
| 43 | 45 |
| 44 virtual void DiscoverNewServices(bool force_update) OVERRIDE { | 46 virtual void DiscoverNewServices(bool force_update) OVERRIDE { |
| 47 VLOG(1) << "ServiceWatcher::DiscoverNewServices on browser process with id " | |
| 48 << id_; | |
| 45 DCHECK(started_); | 49 DCHECK(started_); |
| 46 host_->Send(new LocalDiscoveryMsg_DiscoverServices(id_, force_update)); | 50 host_->Send(new LocalDiscoveryMsg_DiscoverServices(id_, force_update)); |
| 47 } | 51 } |
| 48 | 52 |
| 49 virtual std::string GetServiceType() const OVERRIDE { | 53 virtual std::string GetServiceType() const OVERRIDE { |
| 50 return service_type_; | 54 return service_type_; |
| 51 } | 55 } |
| 52 | 56 |
| 53 private: | 57 private: |
| 54 scoped_refptr<ServiceDiscoveryHostClient> host_; | 58 scoped_refptr<ServiceDiscoveryHostClient> host_; |
| 55 const std::string service_type_; | 59 const std::string service_type_; |
| 56 const uint64 id_; | 60 const uint64 id_; |
| 57 bool started_; | 61 bool started_; |
| 58 }; | 62 }; |
| 59 | 63 |
| 60 class ServiceDiscoveryHostClient::ServiceResolverProxy | 64 class ServiceDiscoveryHostClient::ServiceResolverProxy |
| 61 : public ServiceResolver { | 65 : public ServiceResolver { |
| 62 public: | 66 public: |
| 63 ServiceResolverProxy(ServiceDiscoveryHostClient* host, | 67 ServiceResolverProxy(ServiceDiscoveryHostClient* host, |
| 64 const std::string& service_name, | 68 const std::string& service_name, |
| 65 const ServiceResolver::ResolveCompleteCallback& callback) | 69 const ServiceResolver::ResolveCompleteCallback& callback) |
| 66 : host_(host), | 70 : host_(host), |
| 67 service_name_(service_name), | 71 service_name_(service_name), |
| 68 id_(host->RegisterResolverCallback(callback)), | 72 id_(host->RegisterResolverCallback(callback)), |
| 69 started_(false) { | 73 started_(false) { |
| 70 } | 74 } |
| 71 | 75 |
| 72 virtual ~ServiceResolverProxy() { | 76 virtual ~ServiceResolverProxy() { |
| 77 VLOG(1) << "~ServiceResolverProxy on browser process with id " << id_; | |
| 73 host_->UnregisterResolverCallback(id_); | 78 host_->UnregisterResolverCallback(id_); |
| 74 if (started_) | 79 if (started_) |
| 75 host_->Send(new LocalDiscoveryMsg_DestroyResolver(id_)); | 80 host_->Send(new LocalDiscoveryMsg_DestroyResolver(id_)); |
| 76 } | 81 } |
| 77 | 82 |
| 78 virtual void StartResolving() OVERRIDE { | 83 virtual void StartResolving() OVERRIDE { |
| 84 VLOG(1) | |
| 85 << "ServiceResolverProxy::StartResolving on browser process with id " | |
| 86 << id_; | |
| 79 DCHECK(!started_); | 87 DCHECK(!started_); |
| 80 host_->Send(new LocalDiscoveryMsg_ResolveService(id_, service_name_)); | 88 host_->Send(new LocalDiscoveryMsg_ResolveService(id_, service_name_)); |
| 81 started_ = true; | 89 started_ = true; |
| 82 } | 90 } |
| 83 | 91 |
| 84 virtual std::string GetName() const OVERRIDE { | 92 virtual std::string GetName() const OVERRIDE { |
| 85 return service_name_; | 93 return service_name_; |
| 86 } | 94 } |
| 87 | 95 |
| 88 private: | 96 private: |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 100 net::AddressFamily address_family, | 108 net::AddressFamily address_family, |
| 101 const LocalDomainResolver::IPAddressCallback& callback) | 109 const LocalDomainResolver::IPAddressCallback& callback) |
| 102 : host_(host), | 110 : host_(host), |
| 103 domain_(domain), | 111 domain_(domain), |
| 104 address_family_(address_family), | 112 address_family_(address_family), |
| 105 id_(host->RegisterLocalDomainResolverCallback(callback)), | 113 id_(host->RegisterLocalDomainResolverCallback(callback)), |
| 106 started_(false) { | 114 started_(false) { |
| 107 } | 115 } |
| 108 | 116 |
| 109 virtual ~LocalDomainResolverProxy() { | 117 virtual ~LocalDomainResolverProxy() { |
| 118 VLOG(1) << "~LocalDomainResolverProxy on browser process with id " | |
| 119 << id_; | |
| 110 host_->UnregisterLocalDomainResolverCallback(id_); | 120 host_->UnregisterLocalDomainResolverCallback(id_); |
| 111 if (started_) | 121 if (started_) |
| 112 host_->Send(new LocalDiscoveryMsg_DestroyLocalDomainResolver(id_)); | 122 host_->Send(new LocalDiscoveryMsg_DestroyLocalDomainResolver(id_)); |
| 113 } | 123 } |
| 114 | 124 |
| 115 virtual void Start() OVERRIDE { | 125 virtual void Start() OVERRIDE { |
| 126 VLOG(1) << "LocalDomainResolverProxy::Start on browser process with id " | |
| 127 << id_; | |
| 116 DCHECK(!started_); | 128 DCHECK(!started_); |
| 117 host_->Send(new LocalDiscoveryMsg_ResolveLocalDomain(id_, domain_, | 129 host_->Send(new LocalDiscoveryMsg_ResolveLocalDomain(id_, domain_, |
| 118 address_family_)); | 130 address_family_)); |
|
Vitaly Buka (NO REVIEWS)
2013/09/10 04:47:41
All messages above have no value. It's just dumpin
Noam Samuel
2013/09/10 23:01:52
If we can catch an RPC that is sent but not receiv
| |
| 119 started_ = true; | 131 started_ = true; |
| 120 } | 132 } |
| 121 | 133 |
| 122 private: | 134 private: |
| 123 scoped_refptr<ServiceDiscoveryHostClient> host_; | 135 scoped_refptr<ServiceDiscoveryHostClient> host_; |
| 124 std::string domain_; | 136 std::string domain_; |
| 125 net::AddressFamily address_family_; | 137 net::AddressFamily address_family_; |
| 126 const uint64 id_; | 138 const uint64 id_; |
| 127 bool started_; | 139 bool started_; |
| 128 }; | 140 }; |
| 129 | 141 |
| 142 std::string WatcherUpdateToString(ServiceWatcher::UpdateType update) { | |
| 143 switch (update) { | |
| 144 case ServiceWatcher::UPDATE_ADDED: | |
| 145 return "UPDATE_ADDED"; | |
| 146 case ServiceWatcher::UPDATE_CHANGED: | |
| 147 return "UPDATE_CHANGED"; | |
| 148 case ServiceWatcher::UPDATE_REMOVED: | |
| 149 return "UPDATE_REMOVED"; | |
| 150 case ServiceWatcher::UPDATE_INVALIDATED: | |
| 151 return "UPDATE_INVALIDATED"; | |
| 152 } | |
| 153 return "Unknown Update"; | |
| 154 } | |
| 155 | |
| 156 std::string ResolverStatusToString(ServiceResolver::RequestStatus status) { | |
| 157 switch (status) { | |
| 158 case ServiceResolver::STATUS_SUCCESS: | |
| 159 return "STATUS_SUCESS"; | |
| 160 case ServiceResolver::STATUS_REQUEST_TIMEOUT: | |
| 161 return "STATUS_REQUEST_TIMEOUT"; | |
| 162 case ServiceResolver::STATUS_KNOWN_NONEXISTENT: | |
| 163 return "STATUS_KNOWN_NONEXISTENT"; | |
| 164 } | |
| 165 return "Unknown Status"; | |
| 166 } | |
| 167 | |
| 168 | |
| 130 ServiceDiscoveryHostClient::ServiceDiscoveryHostClient() : current_id_(0) { | 169 ServiceDiscoveryHostClient::ServiceDiscoveryHostClient() : current_id_(0) { |
| 131 callback_runner_ = base::MessageLoop::current()->message_loop_proxy(); | 170 callback_runner_ = base::MessageLoop::current()->message_loop_proxy(); |
| 132 } | 171 } |
| 133 | 172 |
| 134 ServiceDiscoveryHostClient::~ServiceDiscoveryHostClient() { | 173 ServiceDiscoveryHostClient::~ServiceDiscoveryHostClient() { |
| 135 // The ServiceDiscoveryHostClient may be destroyed from the IO thread or the | 174 // The ServiceDiscoveryHostClient may be destroyed from the IO thread or the |
| 136 // owning thread. | 175 // owning thread. |
| 137 DetachFromThread(); | 176 DetachFromThread(); |
| 138 DCHECK(service_watcher_callbacks_.empty()); | 177 DCHECK(service_watcher_callbacks_.empty()); |
| 139 DCHECK(service_resolver_callbacks_.empty()); | 178 DCHECK(service_resolver_callbacks_.empty()); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 342 callback_runner_->PostTask( | 381 callback_runner_->PostTask( |
| 343 FROM_HERE, | 382 FROM_HERE, |
| 344 base::Bind(&ServiceDiscoveryHostClient::RunLocalDomainResolverCallback, | 383 base::Bind(&ServiceDiscoveryHostClient::RunLocalDomainResolverCallback, |
| 345 this, id, success, ip_address_ipv4, ip_address_ipv6)); | 384 this, id, success, ip_address_ipv4, ip_address_ipv6)); |
| 346 } | 385 } |
| 347 | 386 |
| 348 void ServiceDiscoveryHostClient::RunWatcherCallback( | 387 void ServiceDiscoveryHostClient::RunWatcherCallback( |
| 349 uint64 id, | 388 uint64 id, |
| 350 ServiceWatcher::UpdateType update, | 389 ServiceWatcher::UpdateType update, |
| 351 const std::string& service_name) { | 390 const std::string& service_name) { |
| 391 VLOG(1) << "RunWatcherCallback on browser process with id " << id | |
| 392 << " and watcher update " << WatcherUpdateToString(update); | |
|
Vitaly Buka (NO REVIEWS)
2013/09/10 04:47:41
For consistenly I'd move this logging from here to
Noam Samuel
2013/09/10 23:23:34
Done.
| |
| 352 DCHECK(CalledOnValidThread()); | 393 DCHECK(CalledOnValidThread()); |
| 353 WatcherCallbacks::iterator it = service_watcher_callbacks_.find(id); | 394 WatcherCallbacks::iterator it = service_watcher_callbacks_.find(id); |
| 354 if (it != service_watcher_callbacks_.end() && !it->second.is_null()) | 395 if (it != service_watcher_callbacks_.end() && !it->second.is_null()) |
| 355 it->second.Run(update, service_name); | 396 it->second.Run(update, service_name); |
| 356 } | 397 } |
| 357 | 398 |
| 358 void ServiceDiscoveryHostClient::RunResolverCallback( | 399 void ServiceDiscoveryHostClient::RunResolverCallback( |
| 359 uint64 id, | 400 uint64 id, |
| 360 ServiceResolver::RequestStatus status, | 401 ServiceResolver::RequestStatus status, |
| 361 const ServiceDescription& description) { | 402 const ServiceDescription& description) { |
| 403 VLOG(1) << "RunResolverCallback on browser process with id " << id | |
|
Vitaly Buka (NO REVIEWS)
2013/09/10 04:47:41
"on browser process" part is not needed
Noam Samuel
2013/09/10 23:23:34
Done.
| |
| 404 << " and resolver status " << ResolverStatusToString(status); | |
| 362 DCHECK(CalledOnValidThread()); | 405 DCHECK(CalledOnValidThread()); |
| 363 ResolverCallbacks::iterator it = service_resolver_callbacks_.find(id); | 406 ResolverCallbacks::iterator it = service_resolver_callbacks_.find(id); |
| 364 if (it != service_resolver_callbacks_.end() && !it->second.is_null()) | 407 if (it != service_resolver_callbacks_.end() && !it->second.is_null()) |
| 365 it->second.Run(status, description); | 408 it->second.Run(status, description); |
| 366 } | 409 } |
| 367 | 410 |
| 368 void ServiceDiscoveryHostClient::RunLocalDomainResolverCallback( | 411 void ServiceDiscoveryHostClient::RunLocalDomainResolverCallback( |
| 369 uint64 id, | 412 uint64 id, |
| 370 bool success, | 413 bool success, |
| 371 const net::IPAddressNumber& ip_address_ipv4, | 414 const net::IPAddressNumber& ip_address_ipv4, |
| 372 const net::IPAddressNumber& ip_address_ipv6) { | 415 const net::IPAddressNumber& ip_address_ipv6) { |
| 416 VLOG(1) << "RunLocalDomainCallback on browser process with id " << id; | |
| 417 | |
| 418 if (!ip_address_ipv4.empty()) | |
| 419 VLOG(1) << "Local comain callback has valid ipv4 address with id " << id; | |
| 420 if (!ip_address_ipv6.empty()) | |
| 421 VLOG(1) << "Local comain callback has valid ipv6 address with id " << id; | |
| 422 | |
| 373 DCHECK(CalledOnValidThread()); | 423 DCHECK(CalledOnValidThread()); |
| 374 DomainResolverCallbacks::iterator it = domain_resolver_callbacks_.find(id); | 424 DomainResolverCallbacks::iterator it = domain_resolver_callbacks_.find(id); |
| 375 if (it != domain_resolver_callbacks_.end() && !it->second.is_null()) | 425 if (it != domain_resolver_callbacks_.end() && !it->second.is_null()) |
| 376 it->second.Run(success, ip_address_ipv4, ip_address_ipv6); | 426 it->second.Run(success, ip_address_ipv4, ip_address_ipv6); |
| 377 } | 427 } |
| 378 | 428 |
| 379 ServiceDiscoveryHostClientFactory::ServiceDiscoveryHostClientFactory() | 429 ServiceDiscoveryHostClientFactory::ServiceDiscoveryHostClientFactory() |
| 380 : instance_(NULL), references_(0) { | 430 : instance_(NULL), references_(0) { |
| 381 } | 431 } |
| 382 | 432 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 414 void ServiceDiscoveryHostClientFactory::ReleaseClientInternal() { | 464 void ServiceDiscoveryHostClientFactory::ReleaseClientInternal() { |
| 415 DCHECK(CalledOnValidThread()); | 465 DCHECK(CalledOnValidThread()); |
| 416 references_--; | 466 references_--; |
| 417 if (references_ == 0) { | 467 if (references_ == 0) { |
| 418 instance_->Shutdown(); | 468 instance_->Shutdown(); |
| 419 instance_ = NULL; | 469 instance_ = NULL; |
| 420 } | 470 } |
| 421 } | 471 } |
| 422 | 472 |
| 423 } // namespace local_discovery | 473 } // namespace local_discovery |
| OLD | NEW |