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(); i++) { |
| 293 if (!i->second.is_null()) { |
| 294 i->second.Run(ServiceWatcher::UPDATE_INVALIDATED, ""); |
| 295 } |
| 296 } |
| 297 } |
| 298 |
276 bool ServiceDiscoveryHostClient::OnMessageReceived( | 299 bool ServiceDiscoveryHostClient::OnMessageReceived( |
277 const IPC::Message& message) { | 300 const IPC::Message& message) { |
278 bool handled = true; | 301 bool handled = true; |
279 IPC_BEGIN_MESSAGE_MAP(ServiceDiscoveryHostClient, message) | 302 IPC_BEGIN_MESSAGE_MAP(ServiceDiscoveryHostClient, message) |
280 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_WatcherCallback, | 303 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_WatcherCallback, |
281 OnWatcherCallback) | 304 OnWatcherCallback) |
282 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_ResolverCallback, | 305 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_ResolverCallback, |
283 OnResolverCallback) | 306 OnResolverCallback) |
284 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_LocalDomainResolverCallback, | 307 IPC_MESSAGE_HANDLER(LocalDiscoveryHostMsg_LocalDomainResolverCallback, |
285 OnLocalDomainResolverCallback) | 308 OnLocalDomainResolverCallback) |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 void ServiceDiscoveryHostClientFactory::ReleaseClientInternal() { | 414 void ServiceDiscoveryHostClientFactory::ReleaseClientInternal() { |
392 DCHECK(CalledOnValidThread()); | 415 DCHECK(CalledOnValidThread()); |
393 references_--; | 416 references_--; |
394 if (references_ == 0) { | 417 if (references_ == 0) { |
395 instance_->Shutdown(); | 418 instance_->Shutdown(); |
396 instance_ = NULL; | 419 instance_ = NULL; |
397 } | 420 } |
398 } | 421 } |
399 | 422 |
400 } // namespace local_discovery | 423 } // namespace local_discovery |
OLD | NEW |