OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "services/preferences/public/cpp/user_prefs_impl.h" | 5 #include "services/preferences/public/cpp/user_prefs_impl.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 return std::make_pair( | 127 return std::make_pair( |
128 base::MakeUnique<PrefHashStoreImpl>(seed, legacy_device_id, | 128 base::MakeUnique<PrefHashStoreImpl>(seed, legacy_device_id, |
129 false /* use_super_mac */), | 129 false /* use_super_mac */), |
130 base::MakeUnique<RegistryHashStoreContentsWin>( | 130 base::MakeUnique<RegistryHashStoreContentsWin>( |
131 registry_path, prefs_path.DirName().BaseName().LossyDisplayName())); | 131 registry_path, prefs_path.DirName().BaseName().LossyDisplayName())); |
132 #else | 132 #else |
133 return std::make_pair(nullptr, nullptr); | 133 return std::make_pair(nullptr, nullptr); |
134 #endif | 134 #endif |
135 } | 135 } |
136 | 136 |
| 137 void ForwardToResetOnLoadObserver(mojom::ResetOnLoadObserverPtr observer) { |
| 138 if (observer) |
| 139 observer->OnResetOnLoad(); |
| 140 } |
| 141 |
137 class PersistentPrefStoreConnectorImpl | 142 class PersistentPrefStoreConnectorImpl |
138 : public mojom::PersistentPrefStoreConnector, | 143 : public mojom::PersistentPrefStoreConnector, |
139 public PrefStore::Observer { | 144 public PrefStore::Observer { |
140 public: | 145 public: |
141 PersistentPrefStoreConnectorImpl( | 146 PersistentPrefStoreConnectorImpl( |
142 scoped_refptr<PersistentPrefStore> backing_pref_store, | 147 scoped_refptr<PersistentPrefStore> backing_pref_store, |
143 scoped_refptr<ValidationDelegatePtrHolder> validation_delegate) | 148 scoped_refptr<ValidationDelegatePtrHolder> validation_delegate) |
144 : backing_pref_store_(backing_pref_store), | 149 : backing_pref_store_(backing_pref_store), |
145 validation_delegate_holder_(std::move(validation_delegate)) {} | 150 validation_delegate_holder_(std::move(validation_delegate)) {} |
146 | 151 |
(...skipping 20 matching lines...) Expand all Loading... |
167 mojom::PersistentPrefStoreConnectorRequest request) { | 172 mojom::PersistentPrefStoreConnectorRequest request) { |
168 mojo::MakeStrongBinding( | 173 mojo::MakeStrongBinding( |
169 base::MakeUnique<PersistentPrefStoreConnectorImpl>( | 174 base::MakeUnique<PersistentPrefStoreConnectorImpl>( |
170 new JsonPrefStore(pref_filename, io_task_runner, nullptr), nullptr), | 175 new JsonPrefStore(pref_filename, io_task_runner, nullptr), nullptr), |
171 std::move(request)); | 176 std::move(request)); |
172 } | 177 } |
173 | 178 |
174 static void CreateSegregatedUserPrefs( | 179 static void CreateSegregatedUserPrefs( |
175 const base::FilePath& unprotected_pref_filename, | 180 const base::FilePath& unprotected_pref_filename, |
176 const base::FilePath& protected_pref_filename, | 181 const base::FilePath& protected_pref_filename, |
177 const std::vector<PrefHashFilter::TrackedPreferenceMetadata>& | 182 std::vector<mojom::TrackedPreferenceMetadataPtr> tracking_configuration, |
178 tracking_configuration, | |
179 size_t reporting_ids_count, | 183 size_t reporting_ids_count, |
180 const std::string& seed, | 184 const std::string& seed, |
181 const std::string& legacy_device_id, | 185 const std::string& legacy_device_id, |
182 const base::string16& registry_path, | 186 const base::string16& registry_path, |
183 mojom::TrackedPreferenceValidationDelegatePtrInfo | 187 mojom::TrackedPreferenceValidationDelegatePtr validation_delegate, |
184 validation_delegate_info, | 188 mojom::ResetOnLoadObserverPtr reset_on_load_observer, |
185 const base::Closure& on_reset_on_load, | |
186 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, | 189 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, |
187 mojom::PersistentPrefStoreConnectorRequest request) { | 190 mojom::PersistentPrefStoreConnectorRequest request) { |
188 scoped_refptr<ValidationDelegatePtrHolder> validation_delegate_holder( | 191 scoped_refptr<ValidationDelegatePtrHolder> validation_delegate_holder( |
189 new ValidationDelegatePtrHolder( | 192 new ValidationDelegatePtrHolder(std::move(validation_delegate))); |
190 mojo::MakeProxy(std::move(validation_delegate_info)))); | |
191 std::vector<PrefHashFilter::TrackedPreferenceMetadata> | 193 std::vector<PrefHashFilter::TrackedPreferenceMetadata> |
192 unprotected_configuration; | 194 unprotected_configuration; |
193 std::vector<PrefHashFilter::TrackedPreferenceMetadata> | 195 std::vector<PrefHashFilter::TrackedPreferenceMetadata> |
194 protected_configuration; | 196 protected_configuration; |
195 std::set<std::string> protected_pref_names; | 197 std::set<std::string> protected_pref_names; |
196 std::set<std::string> unprotected_pref_names; | 198 std::set<std::string> unprotected_pref_names; |
197 for (const auto& metadata : tracking_configuration) { | 199 for (const auto& metadata : tracking_configuration) { |
198 if (metadata.enforcement_level > PrefHashFilter::NO_ENFORCEMENT) { | 200 PrefHashFilter::TrackedPreferenceMetadata metadata_view = { |
199 protected_configuration.push_back(metadata); | 201 metadata->reporting_id, metadata->name.c_str(), |
200 protected_pref_names.insert(metadata.name); | 202 metadata->enforcement_level, metadata->strategy, |
| 203 metadata->value_type, |
| 204 }; |
| 205 if (metadata->enforcement_level > |
| 206 mojom::TrackedPreferenceMetadata::EnforcementLevel::NO_ENFORCEMENT) { |
| 207 protected_configuration.push_back(metadata_view); |
| 208 protected_pref_names.insert(metadata->name); |
201 } else { | 209 } else { |
202 unprotected_configuration.push_back(metadata); | 210 unprotected_configuration.push_back(metadata_view); |
203 unprotected_pref_names.insert(metadata.name); | 211 unprotected_pref_names.insert(metadata->name); |
204 } | 212 } |
205 } | 213 } |
206 | 214 |
207 std::unique_ptr<PrefHashFilter> unprotected_pref_hash_filter( | 215 std::unique_ptr<PrefHashFilter> unprotected_pref_hash_filter( |
208 new PrefHashFilter(CreatePrefHashStore(seed, legacy_device_id, false), | 216 new PrefHashFilter(CreatePrefHashStore(seed, legacy_device_id, false), |
209 GetExternalVerificationPrefHashStorePair( | 217 GetExternalVerificationPrefHashStorePair( |
210 seed, legacy_device_id, registry_path, | 218 seed, legacy_device_id, registry_path, |
211 unprotected_pref_filename), | 219 unprotected_pref_filename), |
212 unprotected_configuration, base::Closure(), | 220 unprotected_configuration, base::Closure(), |
213 validation_delegate_holder->get(), | 221 validation_delegate_holder->get(), |
214 reporting_ids_count, false)); | 222 reporting_ids_count, false)); |
215 std::unique_ptr<PrefHashFilter> protected_pref_hash_filter( | 223 std::unique_ptr<PrefHashFilter> protected_pref_hash_filter( |
216 new PrefHashFilter(CreatePrefHashStore(seed, legacy_device_id, true), | 224 new PrefHashFilter(CreatePrefHashStore(seed, legacy_device_id, true), |
217 GetExternalVerificationPrefHashStorePair( | 225 GetExternalVerificationPrefHashStorePair( |
218 seed, legacy_device_id, registry_path, | 226 seed, legacy_device_id, registry_path, |
219 unprotected_pref_filename), | 227 unprotected_pref_filename), |
220 protected_configuration, on_reset_on_load, | 228 protected_configuration, |
| 229 base::Bind(&ForwardToResetOnLoadObserver, |
| 230 base::Passed(&reset_on_load_observer)), |
221 validation_delegate_holder->get(), | 231 validation_delegate_holder->get(), |
222 reporting_ids_count, true)); | 232 reporting_ids_count, true)); |
223 | 233 |
224 PrefHashFilter* raw_unprotected_pref_hash_filter = | 234 PrefHashFilter* raw_unprotected_pref_hash_filter = |
225 unprotected_pref_hash_filter.get(); | 235 unprotected_pref_hash_filter.get(); |
226 PrefHashFilter* raw_protected_pref_hash_filter = | 236 PrefHashFilter* raw_protected_pref_hash_filter = |
227 protected_pref_hash_filter.get(); | 237 protected_pref_hash_filter.get(); |
228 | 238 |
229 scoped_refptr<JsonPrefStore> unprotected_pref_store( | 239 scoped_refptr<JsonPrefStore> unprotected_pref_store( |
230 new JsonPrefStore(unprotected_pref_filename, io_task_runner.get(), | 240 new JsonPrefStore(unprotected_pref_filename, io_task_runner.get(), |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 | 277 |
268 scoped_refptr<PersistentPrefStore> backing_pref_store_; | 278 scoped_refptr<PersistentPrefStore> backing_pref_store_; |
269 scoped_refptr<ValidationDelegatePtrHolder> validation_delegate_holder_; | 279 scoped_refptr<ValidationDelegatePtrHolder> validation_delegate_holder_; |
270 | 280 |
271 bool loading_ = false; | 281 bool loading_ = false; |
272 std::vector<ConnectCallback> connect_callbacks_; | 282 std::vector<ConnectCallback> connect_callbacks_; |
273 | 283 |
274 DISALLOW_COPY_AND_ASSIGN(PersistentPrefStoreConnectorImpl); | 284 DISALLOW_COPY_AND_ASSIGN(PersistentPrefStoreConnectorImpl); |
275 }; | 285 }; |
276 | 286 |
| 287 class UserPrefsPrefService : public mojom::PersistentPrefStoreInit { |
| 288 public: |
| 289 UserPrefsPrefService( |
| 290 scoped_refptr<base::SequencedTaskRunner> io_task_runner, |
| 291 mojom::PersistentPrefStoreConnectorRequest connector_request) |
| 292 : io_task_runner_(std::move(io_task_runner)), |
| 293 connector_request_(std::move(connector_request)) {} |
| 294 |
| 295 void Init(mojom::UserPrefsConfigurationPtr configuration) override { |
| 296 if (configuration->is_simple_configuration()) { |
| 297 auto& simple_configuration = configuration->get_simple_configuration(); |
| 298 PersistentPrefStoreConnectorImpl::CreateUserPrefs( |
| 299 simple_configuration->pref_filename, io_task_runner_, |
| 300 std::move(connector_request_)); |
| 301 return; |
| 302 } |
| 303 if (configuration->is_segregated_configuration()) { |
| 304 auto& segregated_configuration = |
| 305 configuration->get_segregated_configuration(); |
| 306 PersistentPrefStoreConnectorImpl::CreateSegregatedUserPrefs( |
| 307 segregated_configuration->unprotected_pref_filename, |
| 308 segregated_configuration->protected_pref_filename, |
| 309 std::move(segregated_configuration->tracking_configuration), |
| 310 segregated_configuration->reporting_ids_count, |
| 311 segregated_configuration->seed, |
| 312 segregated_configuration->legacy_device_id, |
| 313 segregated_configuration->registry_path, |
| 314 std::move(segregated_configuration->validation_delegate), |
| 315 std::move(segregated_configuration->reset_on_load_observer), |
| 316 io_task_runner_, std::move(connector_request_)); |
| 317 return; |
| 318 } |
| 319 NOTREACHED(); |
| 320 } |
| 321 |
| 322 private: |
| 323 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; |
| 324 mojom::PersistentPrefStoreConnectorRequest connector_request_; |
| 325 }; |
| 326 |
| 327 std::vector<mojom::TrackedPreferenceMetadataPtr> WrapTrackedPreferenceMetadata( |
| 328 const std::vector<PrefHashFilter::TrackedPreferenceMetadata>& input) { |
| 329 std::vector<mojom::TrackedPreferenceMetadataPtr> output; |
| 330 for (const auto& metadata : input) { |
| 331 output.emplace_back(base::in_place, metadata.reporting_id, metadata.name, |
| 332 metadata.enforcement_level, metadata.strategy, |
| 333 metadata.value_type); |
| 334 } |
| 335 return output; |
| 336 } |
| 337 |
| 338 // Simulates connecting to the pref service. |
| 339 // TODO(sammc): Replace with connecting to the real pref service. |
| 340 void ConnectToFakePrefService( |
| 341 const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner, |
| 342 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, |
| 343 mojom::PersistentPrefStoreInitRequest init_request, |
| 344 mojom::PersistentPrefStoreConnectorRequest connector_request) { |
| 345 if (!connection_task_runner->RunsTasksOnCurrentThread()) { |
| 346 connection_task_runner->PostTask( |
| 347 FROM_HERE, base::Bind(&ConnectToFakePrefService, connection_task_runner, |
| 348 io_task_runner, base::Passed(&init_request), |
| 349 base::Passed(&connector_request))); |
| 350 return; |
| 351 } |
| 352 mojo::MakeStrongBinding(base::MakeUnique<UserPrefsPrefService>( |
| 353 io_task_runner, std::move(connector_request)), |
| 354 std::move(init_request)); |
| 355 } |
| 356 |
277 } // namespace | 357 } // namespace |
278 | 358 |
279 void CreateUserPrefs( | 359 void CreateUserPrefs( |
280 const base::FilePath& pref_filename, | 360 const base::FilePath& pref_filename, |
281 const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner, | 361 const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner, |
282 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, | 362 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, |
283 mojom::PersistentPrefStoreConnectorRequest request) { | 363 mojom::PersistentPrefStoreConnectorRequest request) { |
284 connection_task_runner->PostTask( | 364 mojom::PersistentPrefStoreInitPtr init_ptr; |
285 FROM_HERE, | 365 ConnectToFakePrefService(connection_task_runner, io_task_runner, |
286 base::Bind(&PersistentPrefStoreConnectorImpl::CreateUserPrefs, | 366 mojo::MakeRequest(&init_ptr), std::move(request)); |
287 pref_filename, io_task_runner, base::Passed(&request))); | 367 auto config = mojom::UserPrefsConfiguration::New(); |
| 368 config->set_simple_configuration( |
| 369 mojom::SimpleUserPrefsConfiguration::New(pref_filename)); |
| 370 init_ptr->Init(std::move(config)); |
288 } | 371 } |
289 | 372 |
290 void CreateSegregatedUserPrefs( | 373 void CreateSegregatedUserPrefs( |
291 const base::FilePath& unprotected_pref_filename, | 374 const base::FilePath& unprotected_pref_filename, |
292 const base::FilePath& protected_pref_filename, | 375 const base::FilePath& protected_pref_filename, |
293 const std::vector<PrefHashFilter::TrackedPreferenceMetadata>& | 376 const std::vector<PrefHashFilter::TrackedPreferenceMetadata>& |
294 tracking_configuration, | 377 tracking_configuration, |
295 size_t reporting_ids_count, | 378 size_t reporting_ids_count, |
296 const std::string& seed, | 379 const std::string& seed, |
297 const std::string& legacy_device_id, | 380 const std::string& legacy_device_id, |
298 const base::string16& registry_path, | 381 const base::string16& registry_path, |
299 mojom::TrackedPreferenceValidationDelegatePtr validation_delegate, | 382 mojom::TrackedPreferenceValidationDelegatePtr validation_delegate, |
300 const base::Closure& on_reset_on_load, | 383 mojom::ResetOnLoadObserverPtr reset_on_load_observer, |
301 const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner, | 384 const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner, |
302 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, | 385 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, |
303 mojom::PersistentPrefStoreConnectorRequest request) { | 386 mojom::PersistentPrefStoreConnectorRequest request) { |
304 connection_task_runner->PostTask( | 387 mojom::PersistentPrefStoreInitPtr init_ptr; |
305 FROM_HERE, | 388 ConnectToFakePrefService(connection_task_runner, io_task_runner, |
306 base::Bind(&PersistentPrefStoreConnectorImpl::CreateSegregatedUserPrefs, | 389 mojo::MakeRequest(&init_ptr), std::move(request)); |
307 unprotected_pref_filename, protected_pref_filename, | 390 auto config = mojom::UserPrefsConfiguration::New(); |
308 tracking_configuration, reporting_ids_count, seed, | 391 config->set_segregated_configuration( |
309 legacy_device_id, registry_path, | 392 mojom::SegregatedUserPrefsConfiguration::New( |
310 base::Passed(validation_delegate.PassInterface()), | 393 unprotected_pref_filename, protected_pref_filename, |
311 on_reset_on_load, io_task_runner, base::Passed(&request))); | 394 WrapTrackedPreferenceMetadata(tracking_configuration), |
| 395 reporting_ids_count, seed, legacy_device_id, registry_path, |
| 396 std::move(validation_delegate), std::move(reset_on_load_observer))); |
| 397 init_ptr->Init(std::move(config)); |
312 } | 398 } |
313 | 399 |
314 } // namespace prefs | 400 } // namespace prefs |
OLD | NEW |