OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/prefs/profile_pref_store_manager.h" | 5 #include "chrome/browser/prefs/profile_pref_store_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 base::Bind(&JsonPrefStore::RegisterOnNextSuccessfulWriteReply, | 163 base::Bind(&JsonPrefStore::RegisterOnNextSuccessfulWriteReply, |
164 protected_pref_store->AsWeakPtr()), | 164 protected_pref_store->AsWeakPtr()), |
165 GetPrefHashStore(false), GetPrefHashStore(true), | 165 GetPrefHashStore(false), GetPrefHashStore(true), |
166 raw_unprotected_pref_hash_filter, raw_protected_pref_hash_filter); | 166 raw_unprotected_pref_hash_filter, raw_protected_pref_hash_filter); |
167 | 167 |
168 return new SegregatedPrefStore(unprotected_pref_store, protected_pref_store, | 168 return new SegregatedPrefStore(unprotected_pref_store, protected_pref_store, |
169 protected_pref_names); | 169 protected_pref_names); |
170 } | 170 } |
171 | 171 |
172 bool ProfilePrefStoreManager::InitializePrefsFromMasterPrefs( | 172 bool ProfilePrefStoreManager::InitializePrefsFromMasterPrefs( |
173 const base::DictionaryValue& master_prefs) { | 173 std::unique_ptr<base::DictionaryValue> master_prefs) { |
174 // Create the profile directory if it doesn't exist yet (very possible on | 174 // Create the profile directory if it doesn't exist yet (very possible on |
175 // first run). | 175 // first run). |
176 if (!base::CreateDirectory(profile_path_)) | 176 if (!base::CreateDirectory(profile_path_)) |
177 return false; | 177 return false; |
178 | 178 |
179 const base::DictionaryValue* to_serialize = &master_prefs; | |
180 std::unique_ptr<base::DictionaryValue> copy; | |
181 | |
182 if (kPlatformSupportsPreferenceTracking) { | 179 if (kPlatformSupportsPreferenceTracking) { |
183 copy.reset(master_prefs.DeepCopy()); | |
184 to_serialize = copy.get(); | |
185 PrefHashFilter(GetPrefHashStore(false), | 180 PrefHashFilter(GetPrefHashStore(false), |
186 GetExternalVerificationPrefHashStorePair(), | 181 GetExternalVerificationPrefHashStorePair(), |
187 tracking_configuration_, base::Closure(), NULL, | 182 tracking_configuration_, base::Closure(), NULL, |
188 reporting_ids_count_, false) | 183 reporting_ids_count_, false) |
189 .Initialize(copy.get()); | 184 .Initialize(master_prefs.get()); |
190 } | 185 } |
191 | 186 |
192 // This will write out to a single combined file which will be immediately | 187 // This will write out to a single combined file which will be immediately |
193 // migrated to two files on load. | 188 // migrated to two files on load. |
194 JSONFileValueSerializer serializer( | 189 JSONFileValueSerializer serializer( |
195 profile_path_.Append(chrome::kPreferencesFilename)); | 190 profile_path_.Append(chrome::kPreferencesFilename)); |
196 | 191 |
197 // Call Serialize (which does IO) on the main thread, which would _normally_ | 192 // Call Serialize (which does IO) on the main thread, which would _normally_ |
198 // be verboten. In this case however, we require this IO to synchronously | 193 // be verboten. In this case however, we require this IO to synchronously |
199 // complete before Chrome can start (as master preferences seed the Local | 194 // complete before Chrome can start (as master preferences seed the Local |
200 // State and Preferences files). This won't trip ThreadIORestrictions as they | 195 // State and Preferences files). This won't trip ThreadIORestrictions as they |
201 // won't have kicked in yet on the main thread. | 196 // won't have kicked in yet on the main thread. |
202 bool success = serializer.Serialize(*to_serialize); | 197 bool success = serializer.Serialize(*master_prefs); |
203 | 198 |
204 UMA_HISTOGRAM_BOOLEAN("Settings.InitializedFromMasterPrefs", success); | 199 UMA_HISTOGRAM_BOOLEAN("Settings.InitializedFromMasterPrefs", success); |
205 return success; | 200 return success; |
206 } | 201 } |
207 | 202 |
208 std::unique_ptr<PrefHashStore> ProfilePrefStoreManager::GetPrefHashStore( | 203 std::unique_ptr<PrefHashStore> ProfilePrefStoreManager::GetPrefHashStore( |
209 bool use_super_mac) { | 204 bool use_super_mac) { |
210 DCHECK(kPlatformSupportsPreferenceTracking); | 205 DCHECK(kPlatformSupportsPreferenceTracking); |
211 | 206 |
212 return std::unique_ptr<PrefHashStore>( | 207 return std::unique_ptr<PrefHashStore>( |
(...skipping 12 matching lines...) Expand all Loading... |
225 ? base::MakeUnique<RegistryHashStoreContentsWin>( | 220 ? base::MakeUnique<RegistryHashStoreContentsWin>( |
226 *g_preference_validation_registry_path_for_testing, | 221 *g_preference_validation_registry_path_for_testing, |
227 profile_path_.BaseName().LossyDisplayName()) | 222 profile_path_.BaseName().LossyDisplayName()) |
228 : base::MakeUnique<RegistryHashStoreContentsWin>( | 223 : base::MakeUnique<RegistryHashStoreContentsWin>( |
229 BrowserDistribution::GetDistribution()->GetRegistryPath(), | 224 BrowserDistribution::GetDistribution()->GetRegistryPath(), |
230 profile_path_.BaseName().LossyDisplayName())); | 225 profile_path_.BaseName().LossyDisplayName())); |
231 #else | 226 #else |
232 return std::make_pair(nullptr, nullptr); | 227 return std::make_pair(nullptr, nullptr); |
233 #endif | 228 #endif |
234 } | 229 } |
OLD | NEW |