| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/chromeos/input_method/input_method_syncer.h" | 5 #include "chrome/browser/chromeos/input_method/input_method_syncer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 accept_language_codes.end(), | 85 accept_language_codes.end(), |
| 86 resolved_locale)) { | 86 resolved_locale)) { |
| 87 *value_iter = resolved_locale; | 87 *value_iter = resolved_locale; |
| 88 ++value_iter; | 88 ++value_iter; |
| 89 continue; | 89 continue; |
| 90 } | 90 } |
| 91 } | 91 } |
| 92 value_iter = values.erase(value_iter); | 92 value_iter = values.erase(value_iter); |
| 93 } | 93 } |
| 94 | 94 |
| 95 return base::JoinString(values, ","); | 95 return JoinString(values, ','); |
| 96 } | 96 } |
| 97 | 97 |
| 98 // Appends tokens from |src| that are not in |dest| to |dest|. | 98 // Appends tokens from |src| that are not in |dest| to |dest|. |
| 99 void MergeLists(std::vector<std::string>* dest, | 99 void MergeLists(std::vector<std::string>* dest, |
| 100 const std::vector<std::string>& src) { | 100 const std::vector<std::string>& src) { |
| 101 // Keep track of already-added tokens. | 101 // Keep track of already-added tokens. |
| 102 std::set<std::string> unique_tokens(dest->begin(), dest->end()); | 102 std::set<std::string> unique_tokens(dest->begin(), dest->end()); |
| 103 | 103 |
| 104 for (const std::string& token : src) { | 104 for (const std::string& token : src) { |
| 105 // Skip token if it's already in |dest|. | 105 // Skip token if it's already in |dest|. |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 std::vector<std::string> synced_tokens; | 190 std::vector<std::string> synced_tokens; |
| 191 std::vector<std::string> new_tokens; | 191 std::vector<std::string> new_tokens; |
| 192 | 192 |
| 193 // First, set the syncable prefs to the union of the local and synced prefs. | 193 // First, set the syncable prefs to the union of the local and synced prefs. |
| 194 base::SplitString( | 194 base::SplitString( |
| 195 preferred_languages_syncable_.GetValue(), ',', &synced_tokens); | 195 preferred_languages_syncable_.GetValue(), ',', &synced_tokens); |
| 196 base::SplitString(preferred_languages_.GetValue(), ',', &new_tokens); | 196 base::SplitString(preferred_languages_.GetValue(), ',', &new_tokens); |
| 197 | 197 |
| 198 // Append the synced values to the current values. | 198 // Append the synced values to the current values. |
| 199 MergeLists(&new_tokens, synced_tokens); | 199 MergeLists(&new_tokens, synced_tokens); |
| 200 preferred_languages_syncable_.SetValue(base::JoinString(new_tokens, ",")); | 200 preferred_languages_syncable_.SetValue(JoinString(new_tokens, ',')); |
| 201 | 201 |
| 202 base::SplitString( | 202 base::SplitString( |
| 203 enabled_extension_imes_syncable_.GetValue(), ',', &synced_tokens); | 203 enabled_extension_imes_syncable_.GetValue(), ',', &synced_tokens); |
| 204 base::SplitString(enabled_extension_imes_.GetValue(), ',', &new_tokens); | 204 base::SplitString(enabled_extension_imes_.GetValue(), ',', &new_tokens); |
| 205 | 205 |
| 206 MergeLists(&new_tokens, synced_tokens); | 206 MergeLists(&new_tokens, synced_tokens); |
| 207 enabled_extension_imes_syncable_.SetValue(base::JoinString(new_tokens, ",")); | 207 enabled_extension_imes_syncable_.SetValue(JoinString(new_tokens, ',')); |
| 208 | 208 |
| 209 // Revert preload engines to legacy component IDs. | 209 // Revert preload engines to legacy component IDs. |
| 210 base::SplitString(preload_engines_.GetValue(), ',', &new_tokens); | 210 base::SplitString(preload_engines_.GetValue(), ',', &new_tokens); |
| 211 std::transform(new_tokens.begin(), new_tokens.end(), new_tokens.begin(), | 211 std::transform(new_tokens.begin(), new_tokens.end(), new_tokens.begin(), |
| 212 extension_ime_util::GetComponentIDByInputMethodID); | 212 extension_ime_util::GetComponentIDByInputMethodID); |
| 213 base::SplitString( | 213 base::SplitString( |
| 214 preload_engines_syncable_.GetValue(), ',', &synced_tokens); | 214 preload_engines_syncable_.GetValue(), ',', &synced_tokens); |
| 215 | 215 |
| 216 MergeLists(&new_tokens, synced_tokens); | 216 MergeLists(&new_tokens, synced_tokens); |
| 217 preload_engines_syncable_.SetValue(base::JoinString(new_tokens, ",")); | 217 preload_engines_syncable_.SetValue(JoinString(new_tokens, ',')); |
| 218 | 218 |
| 219 // Second, set the local prefs, incorporating new values from the sync server. | 219 // Second, set the local prefs, incorporating new values from the sync server. |
| 220 preload_engines_.SetValue( | 220 preload_engines_.SetValue( |
| 221 AddSupportedInputMethodValues(preload_engines_.GetValue(), | 221 AddSupportedInputMethodValues(preload_engines_.GetValue(), |
| 222 preload_engines_syncable, | 222 preload_engines_syncable, |
| 223 prefs::kLanguagePreloadEngines)); | 223 prefs::kLanguagePreloadEngines)); |
| 224 enabled_extension_imes_.SetValue( | 224 enabled_extension_imes_.SetValue( |
| 225 AddSupportedInputMethodValues(enabled_extension_imes_.GetValue(), | 225 AddSupportedInputMethodValues(enabled_extension_imes_.GetValue(), |
| 226 enabled_extension_imes_syncable, | 226 enabled_extension_imes_syncable, |
| 227 prefs::kLanguageEnabledExtensionImes)); | 227 prefs::kLanguageEnabledExtensionImes)); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 ime_state_->GetInputMethodExtensions(supported_descriptors.get()); | 271 ime_state_->GetInputMethodExtensions(supported_descriptors.get()); |
| 272 } | 272 } |
| 273 CheckAndResolveInputMethodIDs(*supported_descriptors, &new_tokens); | 273 CheckAndResolveInputMethodIDs(*supported_descriptors, &new_tokens); |
| 274 } else if (pref_name != prefs::kLanguagePreferredLanguages) { | 274 } else if (pref_name != prefs::kLanguagePreferredLanguages) { |
| 275 NOTREACHED() << "Attempting to merge an invalid preference."; | 275 NOTREACHED() << "Attempting to merge an invalid preference."; |
| 276 // kLanguagePreferredLanguages is checked in CheckAndResolveLocales(). | 276 // kLanguagePreferredLanguages is checked in CheckAndResolveLocales(). |
| 277 } | 277 } |
| 278 | 278 |
| 279 // Do the actual merging. | 279 // Do the actual merging. |
| 280 MergeLists(&old_tokens, new_tokens); | 280 MergeLists(&old_tokens, new_tokens); |
| 281 return base::JoinString(old_tokens, ","); | 281 return JoinString(old_tokens, ','); |
| 282 } | 282 } |
| 283 | 283 |
| 284 void InputMethodSyncer::FinishMerge(const std::string& languages) { | 284 void InputMethodSyncer::FinishMerge(const std::string& languages) { |
| 285 // Since the merge only removed locales that are unsupported on this system, | 285 // Since the merge only removed locales that are unsupported on this system, |
| 286 // we don't need to update the syncable prefs. If the local preference changes | 286 // we don't need to update the syncable prefs. If the local preference changes |
| 287 // later, the sync server will lose the values we dropped. That's okay since | 287 // later, the sync server will lose the values we dropped. That's okay since |
| 288 // the values from this device should then become the new defaults anyway. | 288 // the values from this device should then become the new defaults anyway. |
| 289 preferred_languages_.SetValue(languages); | 289 preferred_languages_.SetValue(languages); |
| 290 | 290 |
| 291 // We've finished merging. | 291 // We've finished merging. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 304 // e.g., use a stale languages setting but push a new preload engines setting. | 304 // e.g., use a stale languages setting but push a new preload engines setting. |
| 305 preferred_languages_syncable_.SetValue(preferred_languages_.GetValue()); | 305 preferred_languages_syncable_.SetValue(preferred_languages_.GetValue()); |
| 306 enabled_extension_imes_syncable_.SetValue(enabled_extension_imes_.GetValue()); | 306 enabled_extension_imes_syncable_.SetValue(enabled_extension_imes_.GetValue()); |
| 307 | 307 |
| 308 // For preload engines, use legacy xkb IDs so the preference can sync | 308 // For preload engines, use legacy xkb IDs so the preference can sync |
| 309 // across Chrome OS and Chromium OS. | 309 // across Chrome OS and Chromium OS. |
| 310 std::vector<std::string> engines; | 310 std::vector<std::string> engines; |
| 311 base::SplitString(preload_engines_.GetValue(), ',', &engines); | 311 base::SplitString(preload_engines_.GetValue(), ',', &engines); |
| 312 std::transform(engines.begin(), engines.end(), engines.begin(), | 312 std::transform(engines.begin(), engines.end(), engines.begin(), |
| 313 extension_ime_util::GetComponentIDByInputMethodID); | 313 extension_ime_util::GetComponentIDByInputMethodID); |
| 314 preload_engines_syncable_.SetValue(base::JoinString(engines, ",")); | 314 preload_engines_syncable_.SetValue(JoinString(engines, ',')); |
| 315 } | 315 } |
| 316 | 316 |
| 317 void InputMethodSyncer::OnIsSyncingChanged() { | 317 void InputMethodSyncer::OnIsSyncingChanged() { |
| 318 if (prefs_->GetBoolean(prefs::kLanguageShouldMergeInputMethods) && | 318 if (prefs_->GetBoolean(prefs::kLanguageShouldMergeInputMethods) && |
| 319 prefs_->IsSyncing()) { | 319 prefs_->IsSyncing()) { |
| 320 MergeSyncedPrefs(); | 320 MergeSyncedPrefs(); |
| 321 } | 321 } |
| 322 } | 322 } |
| 323 | 323 |
| 324 } // namespace input_method | 324 } // namespace input_method |
| 325 } // namespace chromeos | 325 } // namespace chromeos |
| OLD | NEW |