| Index: chrome/browser/spellchecker/spellcheck_service_browsertest.cc | 
| diff --git a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc | 
| index 91d15cc775cad0f6fbef9a2c75a2be69a6eb334c..4459884a63e839d4799ae49be1e8550abcb6fa30 100644 | 
| --- a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc | 
| +++ b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc | 
| @@ -13,6 +13,8 @@ | 
| #include "base/macros.h" | 
| #include "base/path_service.h" | 
| #include "base/run_loop.h" | 
| +#include "base/strings/string_split.h" | 
| +#include "base/strings/string_util.h" | 
| #include "base/synchronization/waitable_event.h" | 
| #include "base/tuple.h" | 
| #include "base/values.h" | 
| @@ -86,11 +88,13 @@ class SpellcheckServiceBrowserTest : public InProcessBrowserTest { | 
|  | 
| void InitSpellcheck(bool enable_spellcheck, | 
| const std::string& single_dictionary, | 
| -                      const std::vector<std::string>& multiple_dictionaries) { | 
| +                      const std::string& multiple_dictionaries) { | 
| prefs_->SetBoolean(prefs::kEnableContinuousSpellcheck, enable_spellcheck); | 
| prefs_->SetString(prefs::kSpellCheckDictionary, single_dictionary); | 
| base::ListValue dictionaries_value; | 
| -    dictionaries_value.AppendStrings(multiple_dictionaries); | 
| +    dictionaries_value.AppendStrings( | 
| +        base::SplitString(multiple_dictionaries, ",", base::TRIM_WHITESPACE, | 
| +                          base::SPLIT_WANT_NONEMPTY)); | 
| prefs_->Set(prefs::kSpellCheckDictionaries, dictionaries_value); | 
| SpellcheckService* spellcheck = | 
| SpellcheckServiceFactory::GetForRenderProcessId(renderer_->GetID()); | 
| @@ -108,14 +112,32 @@ class SpellcheckServiceBrowserTest : public InProcessBrowserTest { | 
| prefs_->SetString(prefs::kSpellCheckDictionary, single_dictionary); | 
| } | 
|  | 
| -  void SetMultiLingualDictionaries( | 
| -      const std::vector<std::string>& multiple_dictionaries) { | 
| +  void SetMultiLingualDictionaries(const std::string& multiple_dictionaries) { | 
| ScopedPreferenceChange scope(&renderer_->sink()); | 
| base::ListValue dictionaries_value; | 
| -    dictionaries_value.AppendStrings(multiple_dictionaries); | 
| +    dictionaries_value.AppendStrings( | 
| +        base::SplitString(multiple_dictionaries, ",", base::TRIM_WHITESPACE, | 
| +                          base::SPLIT_WANT_NONEMPTY)); | 
| prefs_->Set(prefs::kSpellCheckDictionaries, dictionaries_value); | 
| } | 
|  | 
| +  std::string GetMultilingualDictionaries() { | 
| +    const base::ListValue* list_value = | 
| +        prefs_->GetList(prefs::kSpellCheckDictionaries); | 
| +    std::vector<std::string> dictionaries; | 
| +    for (const auto& item_value : *list_value) { | 
| +      std::string dictionary; | 
| +      EXPECT_TRUE(item_value->GetAsString(&dictionary)); | 
| +      dictionaries.push_back(dictionary); | 
| +    } | 
| +    return base::JoinString(dictionaries, ","); | 
| +  } | 
| + | 
| +  void SetAcceptLanguages(const std::string& accept_languages) { | 
| +    ScopedPreferenceChange scope(&renderer_->sink()); | 
| +    prefs_->SetString(prefs::kAcceptLanguages, accept_languages); | 
| +  } | 
| + | 
| // Returns the boolean parameter sent in the first | 
| // SpellCheckMsg_EnableSpellCheck message. For example, if spellcheck service | 
| // sent the SpellCheckMsg_EnableSpellCheck(true) message, then this method | 
| @@ -143,14 +165,29 @@ class SpellcheckServiceBrowserTest : public InProcessBrowserTest { | 
| PrefService* prefs_; | 
| }; | 
|  | 
| +// Removing a spellcheck language from accept languages should remove it from | 
| +// spellcheck languages list as well. | 
| +IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| +                       RemoveSpellcheckLanguageFromAcceptLanguages) { | 
| +  InitSpellcheck(true, "", "en-US,fr"); | 
| +  SetAcceptLanguages("en-US,es,ru"); | 
| +  EXPECT_EQ("en-US", GetMultilingualDictionaries()); | 
| +} | 
| + | 
| +// Keeping spellcheck languages in accept languages should not alter spellcheck | 
| +// languages list. | 
| +IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| +                       KeepSpellcheckLanguagesInAcceptLanguages) { | 
| +  InitSpellcheck(true, "", "en-US,fr"); | 
| +  SetAcceptLanguages("en-US,fr,es"); | 
| +  EXPECT_EQ("en-US,fr", GetMultilingualDictionaries()); | 
| +} | 
| + | 
| // Starting with spellcheck enabled should send the 'enable spellcheck' message | 
| // to the renderer. Consequently disabling spellcheck should send the 'disable | 
| // spellcheck' message to the renderer. | 
| IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, StartWithSpellcheck) { | 
| -  std::vector<std::string> dictionaries; | 
| -  dictionaries.push_back("en-US"); | 
| -  dictionaries.push_back("fr"); | 
| -  InitSpellcheck(true, "", dictionaries); | 
| +  InitSpellcheck(true, "", "en-US,fr"); | 
| EXPECT_TRUE(GetFirstEnableSpellcheckMessageParam()); | 
|  | 
| EnableSpellcheck(false); | 
| @@ -162,10 +199,10 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, StartWithSpellcheck) { | 
| // languages should disable spellcheck. | 
| IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| StartWithSingularLanguagePreference) { | 
| -  InitSpellcheck(true, "en-US", std::vector<std::string>()); | 
| +  InitSpellcheck(true, "en-US", ""); | 
| EXPECT_TRUE(GetFirstEnableSpellcheckMessageParam()); | 
|  | 
| -  SetMultiLingualDictionaries(std::vector<std::string>()); | 
| +  SetMultiLingualDictionaries(""); | 
| EXPECT_FALSE(GetFirstEnableSpellcheckMessageParam()); | 
| } | 
|  | 
| @@ -174,13 +211,10 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| // languages should disable spellcheck. | 
| IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| StartWithMultiLanguagePreference) { | 
| -  std::vector<std::string> dictionaries; | 
| -  dictionaries.push_back("en-US"); | 
| -  dictionaries.push_back("fr"); | 
| -  InitSpellcheck(true, "", dictionaries); | 
| +  InitSpellcheck(true, "", "en-US,fr"); | 
| EXPECT_TRUE(GetFirstEnableSpellcheckMessageParam()); | 
|  | 
| -  SetMultiLingualDictionaries(std::vector<std::string>()); | 
| +  SetMultiLingualDictionaries(""); | 
| EXPECT_FALSE(GetFirstEnableSpellcheckMessageParam()); | 
| } | 
|  | 
| @@ -189,13 +223,10 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| // removing spellcheck languages should disable spellcheck. | 
| IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| StartWithBothLanguagePreferences) { | 
| -  std::vector<std::string> dictionaries; | 
| -  dictionaries.push_back("en-US"); | 
| -  dictionaries.push_back("fr"); | 
| -  InitSpellcheck(true, "en-US", dictionaries); | 
| +  InitSpellcheck(true, "en-US", "en-US,fr"); | 
| EXPECT_TRUE(GetFirstEnableSpellcheckMessageParam()); | 
|  | 
| -  SetMultiLingualDictionaries(std::vector<std::string>()); | 
| +  SetMultiLingualDictionaries(""); | 
| EXPECT_FALSE(GetFirstEnableSpellcheckMessageParam()); | 
| } | 
|  | 
| @@ -203,10 +234,10 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, | 
| // message to the renderer. Consequently adding spellchecking languages should | 
| // enable spellcheck. | 
| IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, StartWithoutLanguages) { | 
| -  InitSpellcheck(true, "", std::vector<std::string>()); | 
| +  InitSpellcheck(true, "", ""); | 
| EXPECT_FALSE(GetFirstEnableSpellcheckMessageParam()); | 
|  | 
| -  SetMultiLingualDictionaries(std::vector<std::string>(1, "en-US")); | 
| +  SetMultiLingualDictionaries("en-US"); | 
| EXPECT_TRUE(GetFirstEnableSpellcheckMessageParam()); | 
| } | 
|  | 
| @@ -214,10 +245,7 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, StartWithoutLanguages) { | 
| // message to the renderer. Consequently enabling spellcheck should send the | 
| // 'enable spellcheck' message to the renderer. | 
| IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, StartWithoutSpellcheck) { | 
| -  std::vector<std::string> dictionaries; | 
| -  dictionaries.push_back("en-US"); | 
| -  dictionaries.push_back("fr"); | 
| -  InitSpellcheck(false, "", dictionaries); | 
| +  InitSpellcheck(false, "", "en-US,fr"); | 
| EXPECT_FALSE(GetFirstEnableSpellcheckMessageParam()); | 
|  | 
| EnableSpellcheck(true); | 
|  |