| Index: services/preferences/public/cpp/user_prefs_impl.cc
|
| diff --git a/services/preferences/public/cpp/user_prefs_impl.cc b/services/preferences/public/cpp/user_prefs_impl.cc
|
| index 9b8f512e50f61bf653d848984cdeeb2afa542101..bbef878bd1ba4b62f37d50f7c516f280b13d06f7 100644
|
| --- a/services/preferences/public/cpp/user_prefs_impl.cc
|
| +++ b/services/preferences/public/cpp/user_prefs_impl.cc
|
| @@ -134,6 +134,11 @@ GetExternalVerificationPrefHashStorePair(const std::string& seed,
|
| #endif
|
| }
|
|
|
| +void ForwardToResetOnLoadObserver(mojom::ResetOnLoadObserverPtr observer) {
|
| + if (observer)
|
| + observer->OnResetOnLoad();
|
| +}
|
| +
|
| class PersistentPrefStoreConnectorImpl
|
| : public mojom::PersistentPrefStoreConnector,
|
| public PrefStore::Observer {
|
| @@ -174,20 +179,17 @@ class PersistentPrefStoreConnectorImpl
|
| static void CreateSegregatedUserPrefs(
|
| const base::FilePath& unprotected_pref_filename,
|
| const base::FilePath& protected_pref_filename,
|
| - const std::vector<PrefHashFilter::TrackedPreferenceMetadata>&
|
| - tracking_configuration,
|
| + std::vector<mojom::TrackedPreferenceMetadataPtr> tracking_configuration,
|
| size_t reporting_ids_count,
|
| const std::string& seed,
|
| const std::string& legacy_device_id,
|
| const base::string16& registry_path,
|
| - mojom::TrackedPreferenceValidationDelegatePtrInfo
|
| - validation_delegate_info,
|
| - const base::Closure& on_reset_on_load,
|
| + mojom::TrackedPreferenceValidationDelegatePtr validation_delegate,
|
| + mojom::ResetOnLoadObserverPtr reset_on_load_observer,
|
| const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
|
| mojom::PersistentPrefStoreConnectorRequest request) {
|
| scoped_refptr<ValidationDelegatePtrHolder> validation_delegate_holder(
|
| - new ValidationDelegatePtrHolder(
|
| - mojo::MakeProxy(std::move(validation_delegate_info))));
|
| + new ValidationDelegatePtrHolder(std::move(validation_delegate)));
|
| std::vector<PrefHashFilter::TrackedPreferenceMetadata>
|
| unprotected_configuration;
|
| std::vector<PrefHashFilter::TrackedPreferenceMetadata>
|
| @@ -195,12 +197,18 @@ class PersistentPrefStoreConnectorImpl
|
| std::set<std::string> protected_pref_names;
|
| std::set<std::string> unprotected_pref_names;
|
| for (const auto& metadata : tracking_configuration) {
|
| - if (metadata.enforcement_level > PrefHashFilter::NO_ENFORCEMENT) {
|
| - protected_configuration.push_back(metadata);
|
| - protected_pref_names.insert(metadata.name);
|
| + PrefHashFilter::TrackedPreferenceMetadata metadata_view = {
|
| + metadata->reporting_id, metadata->name.c_str(),
|
| + metadata->enforcement_level, metadata->strategy,
|
| + metadata->value_type,
|
| + };
|
| + if (metadata->enforcement_level >
|
| + mojom::TrackedPreferenceMetadata::EnforcementLevel::NO_ENFORCEMENT) {
|
| + protected_configuration.push_back(metadata_view);
|
| + protected_pref_names.insert(metadata->name);
|
| } else {
|
| - unprotected_configuration.push_back(metadata);
|
| - unprotected_pref_names.insert(metadata.name);
|
| + unprotected_configuration.push_back(metadata_view);
|
| + unprotected_pref_names.insert(metadata->name);
|
| }
|
| }
|
|
|
| @@ -217,7 +225,9 @@ class PersistentPrefStoreConnectorImpl
|
| GetExternalVerificationPrefHashStorePair(
|
| seed, legacy_device_id, registry_path,
|
| unprotected_pref_filename),
|
| - protected_configuration, on_reset_on_load,
|
| + protected_configuration,
|
| + base::Bind(&ForwardToResetOnLoadObserver,
|
| + base::Passed(&reset_on_load_observer)),
|
| validation_delegate_holder->get(),
|
| reporting_ids_count, true));
|
|
|
| @@ -274,6 +284,76 @@ class PersistentPrefStoreConnectorImpl
|
| DISALLOW_COPY_AND_ASSIGN(PersistentPrefStoreConnectorImpl);
|
| };
|
|
|
| +class UserPrefsPrefService : public mojom::PersistentPrefStoreInit {
|
| + public:
|
| + UserPrefsPrefService(
|
| + scoped_refptr<base::SequencedTaskRunner> io_task_runner,
|
| + mojom::PersistentPrefStoreConnectorRequest connector_request)
|
| + : io_task_runner_(std::move(io_task_runner)),
|
| + connector_request_(std::move(connector_request)) {}
|
| +
|
| + void Init(mojom::UserPrefsConfigurationPtr configuration) override {
|
| + if (configuration->is_simple_configuration()) {
|
| + auto& simple_configuration = configuration->get_simple_configuration();
|
| + PersistentPrefStoreConnectorImpl::CreateUserPrefs(
|
| + simple_configuration->pref_filename, io_task_runner_,
|
| + std::move(connector_request_));
|
| + return;
|
| + }
|
| + if (configuration->is_segregated_configuration()) {
|
| + auto& segregated_configuration =
|
| + configuration->get_segregated_configuration();
|
| + PersistentPrefStoreConnectorImpl::CreateSegregatedUserPrefs(
|
| + segregated_configuration->unprotected_pref_filename,
|
| + segregated_configuration->protected_pref_filename,
|
| + std::move(segregated_configuration->tracking_configuration),
|
| + segregated_configuration->reporting_ids_count,
|
| + segregated_configuration->seed,
|
| + segregated_configuration->legacy_device_id,
|
| + segregated_configuration->registry_path,
|
| + std::move(segregated_configuration->validation_delegate),
|
| + std::move(segregated_configuration->reset_on_load_observer),
|
| + io_task_runner_, std::move(connector_request_));
|
| + return;
|
| + }
|
| + NOTREACHED();
|
| + }
|
| +
|
| + private:
|
| + scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
|
| + mojom::PersistentPrefStoreConnectorRequest connector_request_;
|
| +};
|
| +
|
| +std::vector<mojom::TrackedPreferenceMetadataPtr> WrapTrackedPreferenceMetadata(
|
| + const std::vector<PrefHashFilter::TrackedPreferenceMetadata>& input) {
|
| + std::vector<mojom::TrackedPreferenceMetadataPtr> output;
|
| + for (const auto& metadata : input) {
|
| + output.emplace_back(base::in_place, metadata.reporting_id, metadata.name,
|
| + metadata.enforcement_level, metadata.strategy,
|
| + metadata.value_type);
|
| + }
|
| + return output;
|
| +}
|
| +
|
| +// Simulates connecting to the pref service.
|
| +// TODO(sammc): Replace with connecting to the real pref service.
|
| +void ConnectToFakePrefService(
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner,
|
| + const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
|
| + mojom::PersistentPrefStoreInitRequest init_request,
|
| + mojom::PersistentPrefStoreConnectorRequest connector_request) {
|
| + if (!connection_task_runner->RunsTasksOnCurrentThread()) {
|
| + connection_task_runner->PostTask(
|
| + FROM_HERE, base::Bind(&ConnectToFakePrefService, connection_task_runner,
|
| + io_task_runner, base::Passed(&init_request),
|
| + base::Passed(&connector_request)));
|
| + return;
|
| + }
|
| + mojo::MakeStrongBinding(base::MakeUnique<UserPrefsPrefService>(
|
| + io_task_runner, std::move(connector_request)),
|
| + std::move(init_request));
|
| +}
|
| +
|
| } // namespace
|
|
|
| void CreateUserPrefs(
|
| @@ -281,10 +361,13 @@ void CreateUserPrefs(
|
| const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner,
|
| const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
|
| mojom::PersistentPrefStoreConnectorRequest request) {
|
| - connection_task_runner->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&PersistentPrefStoreConnectorImpl::CreateUserPrefs,
|
| - pref_filename, io_task_runner, base::Passed(&request)));
|
| + mojom::PersistentPrefStoreInitPtr init_ptr;
|
| + ConnectToFakePrefService(connection_task_runner, io_task_runner,
|
| + mojo::MakeRequest(&init_ptr), std::move(request));
|
| + auto config = mojom::UserPrefsConfiguration::New();
|
| + config->set_simple_configuration(
|
| + mojom::SimpleUserPrefsConfiguration::New(pref_filename));
|
| + init_ptr->Init(std::move(config));
|
| }
|
|
|
| void CreateSegregatedUserPrefs(
|
| @@ -297,18 +380,21 @@ void CreateSegregatedUserPrefs(
|
| const std::string& legacy_device_id,
|
| const base::string16& registry_path,
|
| mojom::TrackedPreferenceValidationDelegatePtr validation_delegate,
|
| - const base::Closure& on_reset_on_load,
|
| + mojom::ResetOnLoadObserverPtr reset_on_load_observer,
|
| const scoped_refptr<base::SingleThreadTaskRunner>& connection_task_runner,
|
| const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
|
| mojom::PersistentPrefStoreConnectorRequest request) {
|
| - connection_task_runner->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&PersistentPrefStoreConnectorImpl::CreateSegregatedUserPrefs,
|
| - unprotected_pref_filename, protected_pref_filename,
|
| - tracking_configuration, reporting_ids_count, seed,
|
| - legacy_device_id, registry_path,
|
| - base::Passed(validation_delegate.PassInterface()),
|
| - on_reset_on_load, io_task_runner, base::Passed(&request)));
|
| + mojom::PersistentPrefStoreInitPtr init_ptr;
|
| + ConnectToFakePrefService(connection_task_runner, io_task_runner,
|
| + mojo::MakeRequest(&init_ptr), std::move(request));
|
| + auto config = mojom::UserPrefsConfiguration::New();
|
| + config->set_segregated_configuration(
|
| + mojom::SegregatedUserPrefsConfiguration::New(
|
| + unprotected_pref_filename, protected_pref_filename,
|
| + WrapTrackedPreferenceMetadata(tracking_configuration),
|
| + reporting_ids_count, seed, legacy_device_id, registry_path,
|
| + std::move(validation_delegate), std::move(reset_on_load_observer)));
|
| + init_ptr->Init(std::move(config));
|
| }
|
|
|
| } // namespace prefs
|
|
|