summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrouslan <rouslan@chromium.org>2015-10-08 11:44:42 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-08 18:45:22 +0000
commit16fc75c80eda6f80f09c55c0cebe7d62b6585c24 (patch)
treebcf8abe13d5189948c2283a6dc8e1918da7f6c82
parentcb0b75575e1ebab71e76aaeb8784c18f95c0c145 (diff)
downloadchromium_src-16fc75c80eda6f80f09c55c0cebe7d62b6585c24.zip
chromium_src-16fc75c80eda6f80f09c55c0cebe7d62b6585c24.tar.gz
chromium_src-16fc75c80eda6f80f09c55c0cebe7d62b6585c24.tar.bz2
Enable multilingual spellcheck by default.
This patch enables multilingual spellcheck by default with an option to disable it on demand via field trial. BUG=5102 Review URL: https://codereview.chromium.org/1389153002 Cr-Commit-Position: refs/heads/master@{#353107}
-rw-r--r--chrome/browser/about_flags.cc3
-rw-r--r--chrome/browser/spellchecker/spellcheck_service_browsertest.cc14
-rw-r--r--chrome/browser/ui/webui/options/language_options_dictionary_download_browsertest.js6
-rw-r--r--chrome/browser/ui/webui/options/multilanguage_options_browsertest.cc6
-rw-r--r--chrome/browser/ui/webui/options/multilanguage_options_browsertest.h2
-rw-r--r--chrome/browser/ui/webui/options/single_language_options_browsertest.cc18
-rw-r--r--chrome/browser/ui/webui/options/single_language_options_browsertest.h25
-rw-r--r--chrome/chrome_tests.gypi2
-rw-r--r--chrome/chrome_tests_unit.gypi2
-rw-r--r--chrome/common/OWNERS4
-rw-r--r--chrome/common/chrome_switches.cc4
-rw-r--r--chrome/common/chrome_switches.h1
-rw-r--r--chrome/common/spellcheck_common.cc21
-rw-r--r--chrome/common/spellcheck_common.h3
-rw-r--r--chrome/common/spellcheck_common_unittest.cc51
-rw-r--r--chrome/test/BUILD.gn1
-rw-r--r--tools/metrics/histograms/histograms.xml1
17 files changed, 148 insertions, 16 deletions
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index bb6fe3b..1024afc 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -871,7 +871,8 @@ const Experiment kExperiments[] = {
IDS_FLAGS_ENABLE_MULTILINGUAL_SPELLCHECKER_NAME,
IDS_FLAGS_ENABLE_MULTILINGUAL_SPELLCHECKER_DESCRIPTION,
kOsWin | kOsLinux | kOsCrOS,
- SINGLE_VALUE_TYPE(switches::kEnableMultilingualSpellChecker)},
+ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableMultilingualSpellChecker,
+ switches::kDisableMultilingualSpellChecker)},
#endif
{"enable-scroll-prediction",
IDS_FLAGS_ENABLE_SCROLL_PREDICTION_NAME,
diff --git a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
index 1d6e1e9..55b87bd 100644
--- a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
+++ b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
@@ -135,8 +135,7 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest, PreferencesNotMigrated) {
// that all languages get deselected and spellchecking gets enabled.
IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
SpellcheckingDisabledPreferenceMigration) {
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableMultilingualSpellChecker);
+ ASSERT_TRUE(chrome::spellcheck_common::IsMultilingualSpellcheckEnabled());
PrefService* prefs = user_prefs::UserPrefs::Get(GetContext());
base::ListValue dictionaries;
@@ -155,6 +154,10 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
// multilingual spellchecking.
IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
MultilingualToSingleLanguagePreferenceMigration) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableMultilingualSpellChecker);
+ ASSERT_FALSE(chrome::spellcheck_common::IsMultilingualSpellcheckEnabled());
+
PrefService* prefs = user_prefs::UserPrefs::Get(GetContext());
base::ListValue dictionaries;
dictionaries.AppendString("en-US");
@@ -175,8 +178,7 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
// preference stays the same and spellchecking stays enabled.
IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
MultilingualPreferenceNotMigrated) {
- base::CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableMultilingualSpellChecker);
+ ASSERT_TRUE(chrome::spellcheck_common::IsMultilingualSpellcheckEnabled());
PrefService* prefs = user_prefs::UserPrefs::Get(GetContext());
base::ListValue dictionaries;
@@ -203,6 +205,10 @@ IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
// the preference should not change.
IN_PROC_BROWSER_TEST_F(SpellcheckServiceBrowserTest,
SingleLanguagePreferenceNotMigrated) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableMultilingualSpellChecker);
+ ASSERT_FALSE(chrome::spellcheck_common::IsMultilingualSpellcheckEnabled());
+
PrefService* prefs = user_prefs::UserPrefs::Get(GetContext());
base::ListValue dictionaries;
dictionaries.AppendString("en-US");
diff --git a/chrome/browser/ui/webui/options/language_options_dictionary_download_browsertest.js b/chrome/browser/ui/webui/options/language_options_dictionary_download_browsertest.js
index e8a5b0f..5a134ec 100644
--- a/chrome/browser/ui/webui/options/language_options_dictionary_download_browsertest.js
+++ b/chrome/browser/ui/webui/options/language_options_dictionary_download_browsertest.js
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+GEN('#include "chrome/browser/ui/webui/options/' +
+ 'single_language_options_browsertest.h"');
+
/**
* TestFixture for testing messages of dictionary download progress in language
* options WebUI.
@@ -18,6 +21,9 @@ LanguagesOptionsDictionaryDownloadWebUITest.prototype = {
*/
browsePreload: 'chrome://settings-frame/languages',
+ /** @override */
+ typedefCppFixture: 'SingleLanguageOptionsBrowserTest',
+
/**
* Register a mock dictionary handler.
*/
diff --git a/chrome/browser/ui/webui/options/multilanguage_options_browsertest.cc b/chrome/browser/ui/webui/options/multilanguage_options_browsertest.cc
index da869f5..2ce5747 100644
--- a/chrome/browser/ui/webui/options/multilanguage_options_browsertest.cc
+++ b/chrome/browser/ui/webui/options/multilanguage_options_browsertest.cc
@@ -38,12 +38,6 @@ void MultilanguageOptionsBrowserTest::SetUpOnMainThread() {
std::string());
}
-void MultilanguageOptionsBrowserTest::SetUpCommandLine(
- base::CommandLine* command_line) {
- WebUIBrowserTest::SetUpCommandLine(command_line);
- command_line->AppendSwitch(switches::kEnableMultilingualSpellChecker);
-}
-
void MultilanguageOptionsBrowserTest::SetDictionariesPref(
const base::ListValue& value) {
browser()->profile()->GetPrefs()->Set(prefs::kSpellCheckDictionaries, value);
diff --git a/chrome/browser/ui/webui/options/multilanguage_options_browsertest.h b/chrome/browser/ui/webui/options/multilanguage_options_browsertest.h
index 7f19e17..2ea4c66 100644
--- a/chrome/browser/ui/webui/options/multilanguage_options_browsertest.h
+++ b/chrome/browser/ui/webui/options/multilanguage_options_browsertest.h
@@ -19,7 +19,7 @@ class MultilanguageOptionsBrowserTest : public WebUIBrowserTest {
void ClearSpellcheckDictionaries();
private:
- void SetUpCommandLine(base::CommandLine* command_line) override;
+ // WebUIBrowserTest implementation.
void SetUpOnMainThread() override;
void SetDictionariesPref(const base::ListValue& value);
diff --git a/chrome/browser/ui/webui/options/single_language_options_browsertest.cc b/chrome/browser/ui/webui/options/single_language_options_browsertest.cc
new file mode 100644
index 0000000..50e384e
--- /dev/null
+++ b/chrome/browser/ui/webui/options/single_language_options_browsertest.cc
@@ -0,0 +1,18 @@
+// 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.
+
+#include "chrome/browser/ui/webui/options/single_language_options_browsertest.h"
+
+#include "base/command_line.h"
+#include "chrome/common/chrome_switches.h"
+
+SingleLanguageOptionsBrowserTest::SingleLanguageOptionsBrowserTest() {}
+
+SingleLanguageOptionsBrowserTest::~SingleLanguageOptionsBrowserTest() {}
+
+void SingleLanguageOptionsBrowserTest::SetUpCommandLine(
+ base::CommandLine* command_line) {
+ WebUIBrowserTest::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(switches::kDisableMultilingualSpellChecker);
+}
diff --git a/chrome/browser/ui/webui/options/single_language_options_browsertest.h b/chrome/browser/ui/webui/options/single_language_options_browsertest.h
new file mode 100644
index 0000000..c992c16
--- /dev/null
+++ b/chrome/browser/ui/webui/options/single_language_options_browsertest.h
@@ -0,0 +1,25 @@
+// 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 CHROME_BROWSER_UI_WEBUI_OPTIONS_SINGLE_LANGUAGE_OPTIONS_BROWSERTEST_H_
+#define CHROME_BROWSER_UI_WEBUI_OPTIONS_SINGLE_LANGUAGE_OPTIONS_BROWSERTEST_H_
+
+#include "base/macros.h"
+#include "chrome/test/base/web_ui_browser_test.h"
+
+// This is a helper class for language_options_webui_browsertest.js to disable
+// multilingual-spellchecker.
+class SingleLanguageOptionsBrowserTest : public WebUIBrowserTest {
+ public:
+ SingleLanguageOptionsBrowserTest();
+ ~SingleLanguageOptionsBrowserTest() override;
+
+ private:
+ // WebUIBrowserTest implementation.
+ void SetUpCommandLine(base::CommandLine* command_line) override;
+
+ DISALLOW_COPY_AND_ASSIGN(SingleLanguageOptionsBrowserTest);
+};
+
+#endif // CHROME_BROWSER_UI_WEBUI_OPTIONS_SINGLE_LANGUAGE_OPTIONS_BROWSERTEST_H_
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 672373d..c23899eb 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -564,6 +564,8 @@
'browser/ui/webui/options/options_browsertest.cc',
'browser/ui/webui/options/options_ui_browsertest.cc',
'browser/ui/webui/options/options_ui_browsertest.h',
+ 'browser/ui/webui/options/single_language_options_browsertest.cc',
+ 'browser/ui/webui/options/single_language_options_browsertest.h',
'browser/ui/webui/password_manager_internals/password_manager_internals_ui_browsertest.cc',
'browser/ui/webui/print_preview/print_preview_ui_browsertest.cc',
'browser/ui/webui/signin/inline_login_ui_browsertest.cc',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index 0925ca5..3e23671 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -570,6 +570,7 @@
'browser/spellchecker/spellcheck_service_unittest.cc',
'browser/spellchecker/spelling_service_client_unittest.cc',
'browser/spellchecker/word_trimmer_unittest.cc',
+ 'common/spellcheck_common_unittest.cc',
'renderer/spellchecker/custom_dictionary_engine_unittest.cc',
'renderer/spellchecker/spellcheck_multilingual_unittest.cc',
'renderer/spellchecker/spellcheck_provider_hunspell_unittest.cc',
@@ -2673,6 +2674,7 @@
'../third_party/libaddressinput/libaddressinput.gyp:libaddressinput',
],
'sources!': [
+ 'common/spellcheck_common_unittest.cc',
'renderer/spellchecker/spellcheck_multilingual_unittest.cc',
'renderer/spellchecker/spellcheck_provider_hunspell_unittest.cc',
'renderer/spellchecker/spellcheck_unittest.cc',
diff --git a/chrome/common/OWNERS b/chrome/common/OWNERS
index 3a447e2..a6396e5 100644
--- a/chrome/common/OWNERS
+++ b/chrome/common/OWNERS
@@ -27,8 +27,8 @@ per-file *_messages*.h=wfh@chromium.org
# Spellcheck files. Not using spellcheck* since it covers IPC messages too.
per-file spellcheck_bdict_language.h=groby@chromium.org
per-file spellcheck_bdict_language.h=rouslan@chromium.org
-per-file spellcheck_common.*=groby@chromium.org
-per-file spellcheck_common.*=rouslan@chromium.org
+per-file spellcheck_common*=groby@chromium.org
+per-file spellcheck_common*=rouslan@chromium.org
per-file spellcheck_marker.h=groby@chromium.org
per-file spellcheck_marker.h=rouslan@chromium.org
per-file spellcheck_result.h=groby@chromium.org
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index f82b2f1..189ab43 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -1027,6 +1027,10 @@ const char kSpeculativeResourcePrefetchingEnabled[] = "enabled";
const char kEnableAndroidSpellChecker[] = "enable-android-spellchecker";
#endif
+// Disables the multilingual spellchecker.
+const char kDisableMultilingualSpellChecker[] =
+ "disable-multilingual-spellchecker";
+
// Enables the multilingual spellchecker.
const char kEnableMultilingualSpellChecker[] =
"enable-multilingual-spellchecker";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index f66b3d3..7c5691d 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -286,6 +286,7 @@ extern const char kSpeculativeResourcePrefetchingLearning[];
#if defined(OS_ANDROID)
extern const char kEnableAndroidSpellChecker[];
#endif
+extern const char kDisableMultilingualSpellChecker[];
extern const char kEnableMultilingualSpellChecker[];
extern const char kEnableSpellingAutoCorrect[];
extern const char kEnableSpellingFeedbackFieldTrial[];
diff --git a/chrome/common/spellcheck_common.cc b/chrome/common/spellcheck_common.cc
index 9aa3a02..cee0883 100644
--- a/chrome/common/spellcheck_common.cc
+++ b/chrome/common/spellcheck_common.cc
@@ -8,6 +8,8 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/macros.h"
+#include "base/metrics/field_trial.h"
+#include "base/strings/string_util.h"
#include "chrome/common/chrome_switches.h"
#include "third_party/icu/source/common/unicode/uloc.h"
#include "third_party/icu/source/common/unicode/urename.h"
@@ -16,6 +18,8 @@
namespace chrome {
namespace spellcheck_common {
+const char kMultilingualSpellcheckFieldTrial[] = "MultilingualSpellcheck";
+
struct LanguageRegion {
const char* language; // The language.
const char* language_region; // language & region, used by dictionaries.
@@ -184,8 +188,21 @@ void GetISOLanguageCountryCodeFromLocale(const std::string& locale,
}
bool IsMultilingualSpellcheckEnabled() {
- return base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableMultilingualSpellChecker);
+ // TODO(rouslan): Remove field trial and command line flags when M49 is
+ // stable.
+ const std::string& group_name =
+ base::FieldTrialList::FindFullName(kMultilingualSpellcheckFieldTrial);
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableMultilingualSpellChecker)) {
+ return false;
+ }
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableMultilingualSpellChecker)) {
+ return true;
+ }
+ // Enabled by default, but can be disabled in field trial.
+ return !base::StartsWith(group_name, "Disabled",
+ base::CompareCase::INSENSITIVE_ASCII);
}
} // namespace spellcheck_common
diff --git a/chrome/common/spellcheck_common.h b/chrome/common/spellcheck_common.h
index 7254c8c..deb3617 100644
--- a/chrome/common/spellcheck_common.h
+++ b/chrome/common/spellcheck_common.h
@@ -39,6 +39,9 @@ static const size_t MAX_SYNCABLE_DICTIONARY_WORDS = 1300;
// dictionary.
static const size_t MAX_CUSTOM_DICTIONARY_WORD_BYTES = 99;
+// The name of the field trial for multilingual spellchecker.
+extern const char kMultilingualSpellcheckFieldTrial[];
+
base::FilePath GetVersionedFileName(const std::string& input_language,
const base::FilePath& dict_dir);
diff --git a/chrome/common/spellcheck_common_unittest.cc b/chrome/common/spellcheck_common_unittest.cc
new file mode 100644
index 0000000..4f877c5
--- /dev/null
+++ b/chrome/common/spellcheck_common_unittest.cc
@@ -0,0 +1,51 @@
+// 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.
+
+#include "chrome/common/spellcheck_common.h"
+
+#include "base/command_line.h"
+#include "base/metrics/field_trial.h"
+#include "chrome/common/chrome_switches.h"
+#include "components/variations/entropy_provider.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+using chrome::spellcheck_common::IsMultilingualSpellcheckEnabled;
+using chrome::spellcheck_common::kMultilingualSpellcheckFieldTrial;
+
+TEST(SpellcheckCommonTest, MultilingualByDefault) {
+ EXPECT_TRUE(IsMultilingualSpellcheckEnabled());
+}
+
+TEST(SpellcheckCommonTest, CanDisableMultlingualInFieldTrial) {
+ base::FieldTrialList trials(new metrics::SHA1EntropyProvider("foo"));
+ scoped_refptr<base::FieldTrial> trial =
+ base::FieldTrialList::CreateFieldTrial(kMultilingualSpellcheckFieldTrial,
+ "Disabled");
+ trial->group();
+
+ EXPECT_FALSE(IsMultilingualSpellcheckEnabled());
+}
+
+TEST(SpellcheckCommonTest, CanDisableMultlingualFromCommandLine) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableMultilingualSpellChecker);
+
+ EXPECT_FALSE(IsMultilingualSpellcheckEnabled());
+}
+
+TEST(SpellcheckCommonTest, CanForceMultlingualFromCommandLine) {
+ base::FieldTrialList trials(new metrics::SHA1EntropyProvider("foo"));
+ scoped_refptr<base::FieldTrial> trial =
+ base::FieldTrialList::CreateFieldTrial(kMultilingualSpellcheckFieldTrial,
+ "Disabled");
+ trial->group();
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableMultilingualSpellChecker);
+
+ EXPECT_TRUE(IsMultilingualSpellcheckEnabled());
+}
+
+} // namespace
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 385948a..cf24c45 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1204,6 +1204,7 @@ if (!is_android) {
sources -= [
"../browser/policy/cloud/component_cloud_policy_browsertest.cc",
"../browser/prefs/pref_hash_browsertest.cc",
+ "../common/spellcheck_common_unittest.cc",
"../renderer/spellchecker/spellcheck_provider_hunspell_unittest.cc",
"../renderer/spellchecker/spellcheck_unittest.cc",
]
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 49cb3d3..49717bd 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -64408,6 +64408,7 @@ To add a new entry, add it with any value and run test to compute valid value.
label="enable-message-center-always-scroll-up-upon-notification-removal"/>
<int value="1862207743" label="enable-android-spellchecker"/>
<int value="1865799183" label="javascript-harmony"/>
+ <int value="1881036528" label="disable-multilingual-spellchecker"/>
<int value="1891210939" label="enable-blink-features"/>
<int value="1892201400" label="enable-password-separated-signin-flow"/>
<int value="1896456311" label="enable-password-save-in-page-navigation"/>