| // Copyright (c) 2011 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. |
| |
| #include "chrome/browser/spellcheck_host.h" |
| |
| #include "base/string_split.h" |
| #include "chrome/browser/prefs/pref_member.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/spellcheck_host_impl.h" |
| #include "chrome/browser/spellchecker_platform_engine.h" |
| #include "chrome/common/pref_names.h" |
| #include "chrome/common/spellcheck_common.h" |
| |
| // static |
| scoped_refptr<SpellCheckHost> SpellCheckHost::Create( |
| SpellCheckHostObserver* observer, |
| const std::string& language, |
| net::URLRequestContextGetter* request_context_getter) { |
| scoped_refptr<SpellCheckHostImpl> host = |
| new SpellCheckHostImpl(observer, |
| language, |
| request_context_getter); |
| if (!host) |
| return NULL; |
| |
| host->Initialize(); |
| return host; |
| } |
| |
| // static |
| int SpellCheckHost::GetSpellCheckLanguages( |
| Profile* profile, |
| std::vector<std::string>* languages) { |
| StringPrefMember accept_languages_pref; |
| StringPrefMember dictionary_language_pref; |
| accept_languages_pref.Init(prefs::kAcceptLanguages, profile->GetPrefs(), |
| NULL); |
| dictionary_language_pref.Init(prefs::kSpellCheckDictionary, |
| profile->GetPrefs(), NULL); |
| std::string dictionary_language = dictionary_language_pref.GetValue(); |
| |
| // The current dictionary language should be there. |
| languages->push_back(dictionary_language); |
| |
| // Now scan through the list of accept languages, and find possible mappings |
| // from this list to the existing list of spell check languages. |
| std::vector<std::string> accept_languages; |
| |
| if (SpellCheckerPlatform::SpellCheckerAvailable()) |
| SpellCheckerPlatform::GetAvailableLanguages(&accept_languages); |
| else |
| base::SplitString(accept_languages_pref.GetValue(), ',', &accept_languages); |
| |
| for (std::vector<std::string>::const_iterator i = accept_languages.begin(); |
| i != accept_languages.end(); ++i) { |
| std::string language = |
| SpellCheckCommon::GetCorrespondingSpellCheckLanguage(*i); |
| if (!language.empty() && |
| std::find(languages->begin(), languages->end(), language) == |
| languages->end()) { |
| languages->push_back(language); |
| } |
| } |
| |
| for (size_t i = 0; i < languages->size(); ++i) { |
| if ((*languages)[i] == dictionary_language) |
| return i; |
| } |
| return -1; |
| } |