Index: chrome/browser/net/http_server_properties_manager.cc |
diff --git a/chrome/browser/net/http_server_properties_manager.cc b/chrome/browser/net/http_server_properties_manager.cc |
index 94e4e02598363a8525aa7fcc3bcd5c377ef2c8e1..c8e9e5b09cc2354ee34c80ceaeedc4b39c9e48ad 100644 |
--- a/chrome/browser/net/http_server_properties_manager.cc |
+++ b/chrome/browser/net/http_server_properties_manager.cc |
@@ -91,11 +91,16 @@ void HttpServerPropertiesManager::RegisterPrefs(PrefService* prefs) { |
PrefService::UNSYNCABLE_PREF); |
} |
+// This is required for conformance with the HttpServerProperties interface. |
void HttpServerPropertiesManager::Clear() { |
+ Clear(base::Closure()); |
+} |
+ |
+void HttpServerPropertiesManager::Clear(const base::Closure& completion) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
http_server_properties_impl_->Clear(); |
- ScheduleUpdatePrefsOnIO(); |
+ UpdatePrefsFromCacheOnIO(completion); |
} |
bool HttpServerPropertiesManager::SupportsSpdy( |
@@ -441,7 +446,13 @@ void HttpServerPropertiesManager::StartPrefsUpdateTimerOnIO( |
&HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO); |
} |
+// This is required so we can set this as the callback for a timer. |
void HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO() { |
+ UpdatePrefsFromCacheOnIO(base::Closure()); |
+} |
+ |
+void HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO( |
+ const base::Closure& completion) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
base::ListValue* spdy_server_list = new base::ListValue; |
@@ -469,7 +480,8 @@ void HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO() { |
base::Owned(spdy_server_list), |
base::Owned(spdy_settings_map), |
base::Owned(alternate_protocol_map), |
- base::Owned(pipeline_capability_map))); |
+ base::Owned(pipeline_capability_map), |
+ completion)); |
} |
// A local or temporary data structure to hold |supports_spdy|, SpdySettings, |
@@ -500,7 +512,8 @@ void HttpServerPropertiesManager::UpdatePrefsOnUI( |
base::ListValue* spdy_server_list, |
net::SpdySettingsMap* spdy_settings_map, |
net::AlternateProtocolMap* alternate_protocol_map, |
- net::PipelineCapabilityMap* pipeline_capability_map) { |
+ net::PipelineCapabilityMap* pipeline_capability_map, |
+ const base::Closure& completion) { |
typedef std::map<net::HostPortPair, ServerPref> ServerPrefMap; |
ServerPrefMap server_pref_map; |
@@ -634,6 +647,14 @@ void HttpServerPropertiesManager::UpdatePrefsOnUI( |
pref_service_->Set(prefs::kHttpServerProperties, |
http_server_properties_dict); |
setting_prefs_ = false; |
+ |
+ // Note that |completion| will be fired after we have written everything to |
+ // the Preferences, but likely before these changes are serialized to disk. |
+ // This is not a problem though, as JSONPrefStore guarantees that this will |
+ // happen soon, even if we shut down immediately. |
+ if (!completion.is_null()) { |
+ completion.Run(); |
+ } |
battre
2012/10/23 08:38:33
nit: no {}
engedy
2012/10/23 10:40:09
Done.
|
} |
void HttpServerPropertiesManager::Observe( |