| // Copyright 2015 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef COMPONENTS_SYNC_PREFERENCES_PREF_MODEL_ASSOCIATOR_CLIENT_H_ | 
 | #define COMPONENTS_SYNC_PREFERENCES_PREF_MODEL_ASSOCIATOR_CLIENT_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/macros.h" | 
 | #include "base/values.h" | 
 |  | 
 | namespace sync_preferences { | 
 |  | 
 | // This class allows the embedder to configure the PrefModelAssociator to | 
 | // have a different behaviour when receiving preference synchronisations | 
 | // events from the server. | 
 | class PrefModelAssociatorClient { | 
 |  public: | 
 |   // Returns true if the preference named |pref_name| is a list preference | 
 |   // whose server value is merged with local value during synchronisation. | 
 |   virtual bool IsMergeableListPreference( | 
 |       const std::string& pref_name) const = 0; | 
 |  | 
 |   // Returns true if the preference named |pref_name| is a dictionary preference | 
 |   // whose server value is merged with local value during synchronisation. | 
 |   virtual bool IsMergeableDictionaryPreference( | 
 |       const std::string& pref_name) const = 0; | 
 |  | 
 |   // Returns the merged value if the client wants to apply a custom merging | 
 |   // strategy to the preference named |pref_name| with local value |local_value| | 
 |   // and server-provided value |server_value|. Otherwise, returns |nullptr| and | 
 |   // the server's value will be chosen. | 
 |   virtual std::unique_ptr<base::Value> MaybeMergePreferenceValues( | 
 |       const std::string& pref_name, | 
 |       const base::Value& local_value, | 
 |       const base::Value& server_value) const = 0; | 
 |  | 
 |  protected: | 
 |   PrefModelAssociatorClient() {} | 
 |   virtual ~PrefModelAssociatorClient() {} | 
 |  | 
 |  private: | 
 |   DISALLOW_COPY_AND_ASSIGN(PrefModelAssociatorClient); | 
 | }; | 
 |  | 
 | }  // namespace sync_preferences | 
 |  | 
 | #endif  // COMPONENTS_SYNC_PREFERENCES_PREF_MODEL_ASSOCIATOR_CLIENT_H_ |