Index: chrome/browser/sync/engine/syncapi.cc |
diff --git a/chrome/browser/sync/engine/syncapi.cc b/chrome/browser/sync/engine/syncapi.cc |
index 8c3b856142262cf2d52997f9c6f86242ee554949..04603a524bd66746f96f4a3951543077df6c8aa0 100644 |
--- a/chrome/browser/sync/engine/syncapi.cc |
+++ b/chrome/browser/sync/engine/syncapi.cc |
@@ -89,6 +89,10 @@ typedef GoogleServiceAuthError AuthError; |
static const int kThreadExitTimeoutMsec = 60000; |
static const int kSSLPort = 443; |
+#if defined(OS_CHROMEOS) |
+static const int kChromeOSNetworkChangeReactionDelayHackMsec = 5000; |
+#endif // OS_CHROMEOS |
+ |
// We manage the lifetime of sync_api::SyncManager::SyncInternal ourselves. |
DISABLE_RUNNABLE_METHOD_REFCOUNT(sync_api::SyncManager::SyncInternal); |
@@ -1169,6 +1173,9 @@ class SyncManager::SyncInternal |
// decryption. Otherwise, the cryptographer is made ready (is_ready()). |
void BootstrapEncryption(const std::string& restored_key_for_bootstrapping); |
+ // Checks for server reachabilty and requests a nudge. |
+ void OnIPAddressChangedImpl(); |
+ |
// We couple the DirectoryManager and username together in a UserShare member |
// so we can return a handle to share_ to clients of the API for use when |
// constructing any transaction type. |
@@ -1718,6 +1725,19 @@ void SyncManager::SyncInternal::Shutdown() { |
void SyncManager::SyncInternal::OnIPAddressChanged() { |
VLOG(1) << "IP address change detected"; |
+#if defined (OS_CHROMEOS) |
+ // TODO(tim): This is a hack to intentionally lose a race with flimflam at |
+ // shutdown, so we don't cause shutdown to wait for our http request. |
+ // http://crosbug.com/8429 |
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, |
+ method_factory_.NewRunnableMethod(&SyncInternal::OnIPAddressChangedImpl), |
+ kChromeOSNetworkChangeReactionDelayHackMsec); |
+#else |
+ OnIPAddressChangedImpl(); |
+#endif // defined(OS_CHROMEOS) |
+} |
+ |
+void SyncManager::SyncInternal::OnIPAddressChangedImpl() { |
// TODO(akalin): CheckServerReachable() can block, which may cause |
// jank if we try to shut down sync. Fix this. |
connection_manager()->CheckServerReachable(); |