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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/local_discovery/service_discovery_host_client.cc
diff --git a/chrome/browser/local_discovery/service_discovery_host_client.cc b/chrome/browser/local_discovery/service_discovery_host_client.cc
index 9394b404910df32a928854a93aef69630984253e..2cd85287bf81bd6aa36c5fc6c883a10d7885d933 100644
--- a/chrome/browser/local_discovery/service_discovery_host_client.cc
+++ b/chrome/browser/local_discovery/service_discovery_host_client.cc
@@ -192,25 +192,23 @@ uint64 ServiceDiscoveryHostClient::RegisterLocalDomainResolverCallback(
void ServiceDiscoveryHostClient::UnregisterWatcherCallback(uint64 id) {
DCHECK(CalledOnValidThread());
- DCHECK(ContainsKey(service_watcher_callbacks_, id));
service_watcher_callbacks_.erase(id);
}
void ServiceDiscoveryHostClient::UnregisterResolverCallback(uint64 id) {
DCHECK(CalledOnValidThread());
- DCHECK(ContainsKey(service_resolver_callbacks_, id));
service_resolver_callbacks_.erase(id);
}
void ServiceDiscoveryHostClient::UnregisterLocalDomainResolverCallback(
uint64 id) {
DCHECK(CalledOnValidThread());
- DCHECK(ContainsKey(domain_resolver_callbacks_, id));
domain_resolver_callbacks_.erase(id);
}
void ServiceDiscoveryHostClient::Start() {
DCHECK(CalledOnValidThread());
+ net::NetworkChangeNotifier::AddIPAddressObserver(this);
BrowserThread::PostTask(
BrowserThread::IO,
FROM_HERE,
@@ -218,6 +216,7 @@ void ServiceDiscoveryHostClient::Start() {
}
void ServiceDiscoveryHostClient::Shutdown() {
+ net::NetworkChangeNotifier::RemoveIPAddressObserver(this);
DCHECK(CalledOnValidThread());
BrowserThread::PostTask(
BrowserThread::IO,
@@ -259,6 +258,13 @@ void ServiceDiscoveryHostClient::ShutdownOnIOThread() {
}
}
+void ServiceDiscoveryHostClient::RestartOnIOThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ ShutdownOnIOThread();
+ StartOnIOThread();
+}
+
void ServiceDiscoveryHostClient::Send(IPC::Message* msg) {
DCHECK(CalledOnValidThread());
BrowserThread::PostTask(
@@ -273,6 +279,27 @@ void ServiceDiscoveryHostClient::SendOnIOThread(IPC::Message* msg) {
utility_host_->Send(msg);
}
+void ServiceDiscoveryHostClient::OnIPAddressChanged() {
+ BrowserThread::PostTask(
+ BrowserThread::IO,
+ FROM_HERE,
+ base::Bind(&ServiceDiscoveryHostClient::RestartOnIOThread, this));
+
+ WatcherCallbacks service_watcher_callbacks;
+ service_watcher_callbacks_.swap(service_watcher_callbacks);
+
+ for (WatcherCallbacks::iterator i = service_watcher_callbacks.begin();
+ 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.
+ ServiceWatcher::UpdatedCallback callback = i->second;
+ // i must be advanced before the callback is called in case the callback
+ // destroys the watcher proxy.
+ i++;
+ if (!callback.is_null()) {
+ callback.Run(ServiceWatcher::UPDATE_INVALIDATED, "");
+ }
+ }
+}
+
bool ServiceDiscoveryHostClient::OnMessageReceived(
const IPC::Message& message) {
bool handled = true;

Powered by Google App Engine
This is Rietveld 408576698