Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: chrome/browser/local_discovery/service_discovery_host_client.cc

Issue 23851008: Added cache flush on network change to ServiceDiscoveryHostClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698