| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_SYNC_PREFERENCES_PREFERENCES_MERGE_HELPER_H_ |
| #define COMPONENTS_SYNC_PREFERENCES_PREFERENCES_MERGE_HELPER_H_ |
| |
| #include <string_view> |
| #include <utility> |
| |
| #include "base/values.h" |
| |
| namespace sync_preferences { |
| |
| class PrefModelAssociatorClient; |
| |
| namespace helper { |
| |
| // Merges `local_value` and `server_value` list values. |
| // All entries of `server_value` come first and then of `local_value`. Any |
| // repeating value in `local_value` is excluded in the result. |
| base::Value::List MergeListValues(const base::Value::List& local_value, |
| const base::Value::List& server_value); |
| |
| // Merges `local_value` and `server_value` dict values. |
| // Entry from `server_value` wins in case of conflict. |
| base::Value::Dict MergeDictionaryValues(const base::Value::Dict& local_value, |
| const base::Value::Dict& server_value); |
| |
| // Merges the `local_value` into the supplied `server_value` and returns |
| // the result. If there is a conflict, the server value takes precedence. Note |
| // that only certain preferences will actually be merged, all others will |
| // return a copy of the server value. |
| // Note: `client` can NULL in some tests, in which case `server_value` is |
| // returned. |
| base::Value MergePreference(const PrefModelAssociatorClient* client, |
| std::string_view pref_name, |
| const base::Value& local_value, |
| const base::Value& server_value); |
| |
| // This separates individual dictionary pref updates between the account store |
| // and the local store, from the updated merged value `new_value`. Returns a |
| // pair with the first item being the updated local value, followed by the |
| // updated account value. |
| std::pair<base::Value::Dict, base::Value::Dict> UnmergeDictionaryValues( |
| base::Value::Dict new_value, |
| const base::Value::Dict& original_local_value, |
| const base::Value::Dict& original_account_value); |
| |
| } // namespace helper |
| } // namespace sync_preferences |
| |
| #endif // COMPONENTS_SYNC_PREFERENCES_PREFERENCES_MERGE_HELPER_H_ |