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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 185 uint64 ServiceDiscoveryHostClient::RegisterLocalDomainResolverCallback( | 185 uint64 ServiceDiscoveryHostClient::RegisterLocalDomainResolverCallback( |
| 186 const LocalDomainResolver::IPAddressCallback& callback) { | 186 const LocalDomainResolver::IPAddressCallback& callback) { |
| 187 DCHECK(CalledOnValidThread()); | 187 DCHECK(CalledOnValidThread()); |
| 188 DCHECK(!ContainsKey(domain_resolver_callbacks_, current_id_ + 1)); | 188 DCHECK(!ContainsKey(domain_resolver_callbacks_, current_id_ + 1)); |
| 189 domain_resolver_callbacks_[++current_id_] = callback; | 189 domain_resolver_callbacks_[++current_id_] = callback; |
| 190 return current_id_; | 190 return current_id_; |
| 191 } | 191 } |
| 192 | 192 |
| 193 void ServiceDiscoveryHostClient::UnregisterWatcherCallback(uint64 id) { | 193 void ServiceDiscoveryHostClient::UnregisterWatcherCallback(uint64 id) { |
| 194 DCHECK(CalledOnValidThread()); | 194 DCHECK(CalledOnValidThread()); |
| 195 DCHECK(ContainsKey(service_watcher_callbacks_, id)); | |
| 196 service_watcher_callbacks_.erase(id); | 195 service_watcher_callbacks_.erase(id); |
| 197 } | 196 } |
| 198 | 197 |
| 199 void ServiceDiscoveryHostClient::UnregisterResolverCallback(uint64 id) { | 198 void ServiceDiscoveryHostClient::UnregisterResolverCallback(uint64 id) { |
| 200 DCHECK(CalledOnValidThread()); | 199 DCHECK(CalledOnValidThread()); |
| 201 DCHECK(ContainsKey(service_resolver_callbacks_, id)); | |
| 202 service_resolver_callbacks_.erase(id); | 200 service_resolver_callbacks_.erase(id); |
| 203 } | 201 } |
| 204 | 202 |
| 205 void ServiceDiscoveryHostClient::UnregisterLocalDomainResolverCallback( | 203 void ServiceDiscoveryHostClient::UnregisterLocalDomainResolverCallback( |
| 206 uint64 id) { | 204 uint64 id) { |
| 207 DCHECK(CalledOnValidThread()); | 205 DCHECK(CalledOnValidThread()); |
| 208 DCHECK(ContainsKey(domain_resolver_callbacks_, id)); | |
| 209 domain_resolver_callbacks_.erase(id); | 206 domain_resolver_callbacks_.erase(id); |
| 210 } | 207 } |
| 211 | 208 |
| 212 void ServiceDiscoveryHostClient::Start() { | 209 void ServiceDiscoveryHostClient::Start() { |
| 213 DCHECK(CalledOnValidThread()); | 210 DCHECK(CalledOnValidThread()); |
| 211 net::NetworkChangeNotifier::AddIPAddressObserver(this); | |
| 214 BrowserThread::PostTask( | 212 BrowserThread::PostTask( |
| 215 BrowserThread::IO, | 213 BrowserThread::IO, |
| 216 FROM_HERE, | 214 FROM_HERE, |
| 217 base::Bind(&ServiceDiscoveryHostClient::StartOnIOThread, this)); | 215 base::Bind(&ServiceDiscoveryHostClient::StartOnIOThread, this)); |
| 218 } | 216 } |
| 219 | 217 |
| 220 void ServiceDiscoveryHostClient::Shutdown() { | 218 void ServiceDiscoveryHostClient::Shutdown() { |
| 219 net::NetworkChangeNotifier::RemoveIPAddressObserver(this); | |
| 221 DCHECK(CalledOnValidThread()); | 220 DCHECK(CalledOnValidThread()); |
| 222 BrowserThread::PostTask( | 221 BrowserThread::PostTask( |
| 223 BrowserThread::IO, | 222 BrowserThread::IO, |
| 224 FROM_HERE, | 223 FROM_HERE, |
| 225 base::Bind(&ServiceDiscoveryHostClient::ShutdownOnIOThread, this)); | 224 base::Bind(&ServiceDiscoveryHostClient::ShutdownOnIOThread, this)); |
| 226 } | 225 } |
| 227 | 226 |
| 228 void ServiceDiscoveryHostClient::StartOnIOThread() { | 227 void ServiceDiscoveryHostClient::StartOnIOThread() { |
| 229 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 228 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 230 utility_host_ = UtilityProcessHost::Create( | 229 utility_host_ = UtilityProcessHost::Create( |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 252 } | 251 } |
| 253 | 252 |
| 254 void ServiceDiscoveryHostClient::ShutdownOnIOThread() { | 253 void ServiceDiscoveryHostClient::ShutdownOnIOThread() { |
| 255 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 254 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 256 if (utility_host_) { | 255 if (utility_host_) { |
| 257 utility_host_->Send(new LocalDiscoveryMsg_ShutdownLocalDiscovery); | 256 utility_host_->Send(new LocalDiscoveryMsg_ShutdownLocalDiscovery); |
| 258 utility_host_->EndBatchMode(); | 257 utility_host_->EndBatchMode(); |
| 259 } | 258 } |
| 260 } | 259 } |
| 261 | 260 |
| 261 void ServiceDiscoveryHostClient::RestartOnIOThread() { | |
| 262 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
| 263 | |
| 264 ShutdownOnIOThread(); | |
| 265 StartOnIOThread(); | |
| 266 } | |
| 267 | |
| 262 void ServiceDiscoveryHostClient::Send(IPC::Message* msg) { | 268 void ServiceDiscoveryHostClient::Send(IPC::Message* msg) { |
| 263 DCHECK(CalledOnValidThread()); | 269 DCHECK(CalledOnValidThread()); |
| 264 BrowserThread::PostTask( | 270 BrowserThread::PostTask( |
| 265 BrowserThread::IO, | 271 BrowserThread::IO, |
| 266 FROM_HERE, | 272 FROM_HERE, |
| 267 base::Bind(&ServiceDiscoveryHostClient::SendOnIOThread, this, msg)); | 273 base::Bind(&ServiceDiscoveryHostClient::SendOnIOThread, this, msg)); |
| 268 } | 274 } |
| 269 | 275 |
| 270 void ServiceDiscoveryHostClient::SendOnIOThread(IPC::Message* msg) { | 276 void ServiceDiscoveryHostClient::SendOnIOThread(IPC::Message* msg) { |
| 271 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 277 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 272 if (utility_host_) | 278 if (utility_host_) |
| 273 utility_host_->Send(msg); | 279 utility_host_->Send(msg); |
| 274 } | 280 } |
| 275 | 281 |
| 282 void ServiceDiscoveryHostClient::OnIPAddressChanged() { | |
| 283 BrowserThread::PostTask( | |
| 284 BrowserThread::IO, | |
| 285 FROM_HERE, | |
| 286 base::Bind(&ServiceDiscoveryHostClient::RestartOnIOThread, this)); | |
| 287 | |
| 288 WatcherCallbacks service_watcher_callbacks; | |
| 289 service_watcher_callbacks_.swap(service_watcher_callbacks); | |
| 290 | |
| 291 for (WatcherCallbacks::iterator i = service_watcher_callbacks.begin(); | |
| 292 i != service_watcher_callbacks.end();) { | |
|
Vitaly Buka (NO REVIEWS)
2013/09/07 00:27:51
I see no reason to have i++; not in the for statem
Noam Samuel
2013/09/07 01:34:30
Done.
| |
| 293 ServiceWatcher::UpdatedCallback callback = i->second; | |
| 294 // i must be advanced before the callback is called in case the callback | |
| 295 // destroys the watcher proxy. | |
| 296 i++; | |
| 297 if (!callback.is_null()) { | |
| 298 callback.Run(ServiceWatcher::UPDATE_INVALIDATED, ""); | |
| 299 } | |
| 300 } | |
| 301 } | |
| 302 | |
| 276 bool ServiceDiscoveryHostClient::OnMessageReceived( | 303 bool ServiceDiscoveryHostClient::OnMessageReceived( |
| 277 const IPC::Message& message) { | 304 const IPC::Message& message) { |
| 278 bool handled = true; | 305 bool handled = true; |
| 279 IPC_BEGIN_MESSAGE_MAP(ServiceDiscoveryHostClient, message) | 306 IPC_BEGIN_MESSAGE_MAP(ServiceDiscoveryHostClient, message) |
| 280 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_WatcherCallback, | 307 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_WatcherCallback, |
| 281 OnWatcherCallback) | 308 OnWatcherCallback) |
| 282 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_ResolverCallback, | 309 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_ResolverCallback, |
| 283 OnResolverCallback) | 310 OnResolverCallback) |
| 284 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_LocalDomainResolverCallback, | 311 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_LocalDomainResolverCallback, |
| 285 OnLocalDomainResolverCallback) | 312 OnLocalDomainResolverCallback) |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 391 void ServiceDiscoveryHostClientFactory::ReleaseClientInternal() { | 418 void ServiceDiscoveryHostClientFactory::ReleaseClientInternal() { |
| 392 DCHECK(CalledOnValidThread()); | 419 DCHECK(CalledOnValidThread()); |
| 393 references_--; | 420 references_--; |
| 394 if (references_ == 0) { | 421 if (references_ == 0) { |
| 395 instance_->Shutdown(); | 422 instance_->Shutdown(); |
| 396 instance_ = NULL; | 423 instance_ = NULL; |
| 397 } | 424 } |
| 398 } | 425 } |
| 399 | 426 |
| 400 } // namespace local_discovery | 427 } // namespace local_discovery |
| OLD | NEW |