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

Side by Side Diff: services/preferences/public/cpp/user_prefs_impl.cc

Issue 2722483005: Change configuration of user prefs to use mojo. (Closed)
Patch Set: Created 3 years, 9 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 unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « services/preferences/public/cpp/user_prefs_impl.h ('k') | services/preferences/public/interfaces/preferences.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698