| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/spellchecker/spellcheck_service.h" | 5 #include "chrome/browser/spellchecker/spellcheck_service.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string_split.h" | 10 #include "base/strings/string_split.h" |
| 11 #include "base/supports_user_data.h" | 11 #include "base/supports_user_data.h" |
| 12 #include "base/synchronization/waitable_event.h" | 12 #include "base/synchronization/waitable_event.h" |
| 13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
| 14 #include "chrome/browser/spellchecker/feedback_sender.h" | 14 #include "chrome/browser/spellchecker/feedback_sender.h" |
| 15 #include "chrome/browser/spellchecker/spellcheck_factory.h" | 15 #include "chrome/browser/spellchecker/spellcheck_factory.h" |
| 16 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" | 16 #include "chrome/browser/spellchecker/spellcheck_host_metrics.h" |
| 17 #include "chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h" | 17 #include "chrome/browser/spellchecker/spellcheck_hunspell_dictionary.h" |
| 18 #include "chrome/browser/spellchecker/spellcheck_platform.h" | 18 #include "chrome/browser/spellchecker/spellcheck_platform.h" |
| 19 #include "chrome/browser/spellchecker/spelling_service_client.h" | 19 #include "chrome/browser/spellchecker/spelling_service_client.h" |
| 20 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
| 21 #include "chrome/common/spellcheck_bdict_language.h" | |
| 22 #include "chrome/common/spellcheck_common.h" | |
| 23 #include "chrome/common/spellcheck_messages.h" | |
| 24 #include "components/prefs/pref_member.h" | 21 #include "components/prefs/pref_member.h" |
| 25 #include "components/prefs/pref_service.h" | 22 #include "components/prefs/pref_service.h" |
| 23 #include "components/spellcheck/common/spellcheck_bdict_language.h" |
| 24 #include "components/spellcheck/common/spellcheck_common.h" |
| 25 #include "components/spellcheck/common/spellcheck_messages.h" |
| 26 #include "components/user_prefs/user_prefs.h" | 26 #include "components/user_prefs/user_prefs.h" |
| 27 #include "content/public/browser/browser_context.h" | 27 #include "content/public/browser/browser_context.h" |
| 28 #include "content/public/browser/browser_thread.h" | 28 #include "content/public/browser/browser_thread.h" |
| 29 #include "content/public/browser/notification_service.h" | 29 #include "content/public/browser/notification_service.h" |
| 30 #include "content/public/browser/notification_types.h" | 30 #include "content/public/browser/notification_types.h" |
| 31 #include "content/public/browser/render_process_host.h" | 31 #include "content/public/browser/render_process_host.h" |
| 32 #include "content/public/browser/storage_partition.h" | 32 #include "content/public/browser/storage_partition.h" |
| 33 #include "ipc/ipc_platform_file.h" | 33 #include "ipc/ipc_platform_file.h" |
| 34 | 34 |
| 35 using content::BrowserThread; | 35 using content::BrowserThread; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 first_of_dictionaries = single_dictionary; | 76 first_of_dictionaries = single_dictionary; |
| 77 dictionaries_pref.SetValue( | 77 dictionaries_pref.SetValue( |
| 78 std::vector<std::string>(1, first_of_dictionaries)); | 78 std::vector<std::string>(1, first_of_dictionaries)); |
| 79 } | 79 } |
| 80 | 80 |
| 81 single_dictionary_pref.SetValue(""); | 81 single_dictionary_pref.SetValue(""); |
| 82 #endif // defined(USE_BROWSER_SPELLCHECKER) | 82 #endif // defined(USE_BROWSER_SPELLCHECKER) |
| 83 | 83 |
| 84 std::string language_code; | 84 std::string language_code; |
| 85 std::string country_code; | 85 std::string country_code; |
| 86 chrome::spellcheck_common::GetISOLanguageCountryCodeFromLocale( | 86 spellcheck::GetISOLanguageCountryCodeFromLocale( |
| 87 first_of_dictionaries, | 87 first_of_dictionaries, &language_code, &country_code); |
| 88 &language_code, | |
| 89 &country_code); | |
| 90 feedback_sender_.reset(new spellcheck::FeedbackSender( | 88 feedback_sender_.reset(new spellcheck::FeedbackSender( |
| 91 content::BrowserContext::GetDefaultStoragePartition(context)-> | 89 content::BrowserContext::GetDefaultStoragePartition(context)-> |
| 92 GetURLRequestContext(), | 90 GetURLRequestContext(), |
| 93 language_code, country_code)); | 91 language_code, country_code)); |
| 94 | 92 |
| 95 pref_change_registrar_.Add( | 93 pref_change_registrar_.Add( |
| 96 prefs::kSpellCheckDictionaries, | 94 prefs::kSpellCheckDictionaries, |
| 97 base::Bind(&SpellcheckService::OnSpellCheckDictionariesChanged, | 95 base::Bind(&SpellcheckService::OnSpellCheckDictionariesChanged, |
| 98 base::Unretained(this))); | 96 base::Unretained(this))); |
| 99 pref_change_registrar_.Add( | 97 pref_change_registrar_.Add( |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 spellcheck_dictionaries.insert(dictionary); | 140 spellcheck_dictionaries.insert(dictionary); |
| 143 } | 141 } |
| 144 | 142 |
| 145 dictionaries->clear(); | 143 dictionaries->clear(); |
| 146 std::vector<std::string> accept_languages = | 144 std::vector<std::string> accept_languages = |
| 147 base::SplitString(prefs->GetString(prefs::kAcceptLanguages), ",", | 145 base::SplitString(prefs->GetString(prefs::kAcceptLanguages), ",", |
| 148 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 146 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 149 for (const auto& accept_language : accept_languages) { | 147 for (const auto& accept_language : accept_languages) { |
| 150 Dictionary dictionary; | 148 Dictionary dictionary; |
| 151 dictionary.language = | 149 dictionary.language = |
| 152 chrome::spellcheck_common::GetCorrespondingSpellCheckLanguage( | 150 spellcheck::GetCorrespondingSpellCheckLanguage(accept_language); |
| 153 accept_language); | |
| 154 if (dictionary.language.empty()) | 151 if (dictionary.language.empty()) |
| 155 continue; | 152 continue; |
| 156 | 153 |
| 157 dictionary.used_for_spellcheck = | 154 dictionary.used_for_spellcheck = |
| 158 spellcheck_dictionaries.count(dictionary.language) > 0; | 155 spellcheck_dictionaries.count(dictionary.language) > 0; |
| 159 dictionaries->push_back(dictionary); | 156 dictionaries->push_back(dictionary); |
| 160 } | 157 } |
| 161 } | 158 } |
| 162 #endif // !OS_MACOSX | 159 #endif // !OS_MACOSX |
| 163 | 160 |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 if (metrics_) | 337 if (metrics_) |
| 341 metrics_->RecordSpellingServiceStats(enabled); | 338 metrics_->RecordSpellingServiceStats(enabled); |
| 342 UpdateFeedbackSenderState(); | 339 UpdateFeedbackSenderState(); |
| 343 } | 340 } |
| 344 | 341 |
| 345 void SpellcheckService::OnAcceptLanguagesChanged() { | 342 void SpellcheckService::OnAcceptLanguagesChanged() { |
| 346 PrefService* prefs = user_prefs::UserPrefs::Get(context_); | 343 PrefService* prefs = user_prefs::UserPrefs::Get(context_); |
| 347 std::vector<std::string> accept_languages = | 344 std::vector<std::string> accept_languages = |
| 348 base::SplitString(prefs->GetString(prefs::kAcceptLanguages), ",", | 345 base::SplitString(prefs->GetString(prefs::kAcceptLanguages), ",", |
| 349 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 346 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 350 std::transform( | 347 std::transform(accept_languages.begin(), accept_languages.end(), |
| 351 accept_languages.begin(), accept_languages.end(), | 348 accept_languages.begin(), |
| 352 accept_languages.begin(), | 349 &spellcheck::GetCorrespondingSpellCheckLanguage); |
| 353 &chrome::spellcheck_common::GetCorrespondingSpellCheckLanguage); | |
| 354 | 350 |
| 355 StringListPrefMember dictionaries_pref; | 351 StringListPrefMember dictionaries_pref; |
| 356 dictionaries_pref.Init(prefs::kSpellCheckDictionaries, prefs); | 352 dictionaries_pref.Init(prefs::kSpellCheckDictionaries, prefs); |
| 357 std::vector<std::string> dictionaries = dictionaries_pref.GetValue(); | 353 std::vector<std::string> dictionaries = dictionaries_pref.GetValue(); |
| 358 std::vector<std::string> filtered_dictionaries; | 354 std::vector<std::string> filtered_dictionaries; |
| 359 | 355 |
| 360 for (const auto& dictionary : dictionaries) { | 356 for (const auto& dictionary : dictionaries) { |
| 361 if (std::find(accept_languages.begin(), accept_languages.end(), | 357 if (std::find(accept_languages.begin(), accept_languages.end(), |
| 362 dictionary) != accept_languages.end()) { | 358 dictionary) != accept_languages.end()) { |
| 363 filtered_dictionaries.push_back(dictionary); | 359 filtered_dictionaries.push_back(dictionary); |
| 364 } | 360 } |
| 365 } | 361 } |
| 366 | 362 |
| 367 dictionaries_pref.SetValue(filtered_dictionaries); | 363 dictionaries_pref.SetValue(filtered_dictionaries); |
| 368 } | 364 } |
| 369 | 365 |
| 370 void SpellcheckService::UpdateFeedbackSenderState() { | 366 void SpellcheckService::UpdateFeedbackSenderState() { |
| 371 std::string feedback_language; | 367 std::string feedback_language; |
| 372 if (!hunspell_dictionaries_.empty()) | 368 if (!hunspell_dictionaries_.empty()) |
| 373 feedback_language = hunspell_dictionaries_.front()->GetLanguage(); | 369 feedback_language = hunspell_dictionaries_.front()->GetLanguage(); |
| 374 std::string language_code; | 370 std::string language_code; |
| 375 std::string country_code; | 371 std::string country_code; |
| 376 chrome::spellcheck_common::GetISOLanguageCountryCodeFromLocale( | 372 spellcheck::GetISOLanguageCountryCodeFromLocale( |
| 377 feedback_language, &language_code, &country_code); | 373 feedback_language, &language_code, &country_code); |
| 378 feedback_sender_->OnLanguageCountryChange(language_code, country_code); | 374 feedback_sender_->OnLanguageCountryChange(language_code, country_code); |
| 379 if (SpellingServiceClient::IsAvailable( | 375 if (SpellingServiceClient::IsAvailable( |
| 380 context_, SpellingServiceClient::SPELLCHECK)) { | 376 context_, SpellingServiceClient::SPELLCHECK)) { |
| 381 feedback_sender_->StartFeedbackCollection(); | 377 feedback_sender_->StartFeedbackCollection(); |
| 382 } else { | 378 } else { |
| 383 feedback_sender_->StopFeedbackCollection(); | 379 feedback_sender_->StopFeedbackCollection(); |
| 384 } | 380 } |
| 385 } | 381 } |
| OLD | NEW |