diff options
author | rouslan <rouslan@chromium.org> | 2015-10-08 11:44:42 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-08 18:45:22 +0000 |
commit | 16fc75c80eda6f80f09c55c0cebe7d62b6585c24 (patch) | |
tree | bcf8abe13d5189948c2283a6dc8e1918da7f6c82 | |
parent | cb0b75575e1ebab71e76aaeb8784c18f95c0c145 (diff) | |
download | chromium_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.cc | 3 | ||||
-rw-r--r-- | chrome/browser/spellchecker/spellcheck_service_browsertest.cc | 14 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/language_options_dictionary_download_browsertest.js | 6 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/multilanguage_options_browsertest.cc | 6 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/multilanguage_options_browsertest.h | 2 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/single_language_options_browsertest.cc | 18 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/single_language_options_browsertest.h | 25 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 2 | ||||
-rw-r--r-- | chrome/chrome_tests_unit.gypi | 2 | ||||
-rw-r--r-- | chrome/common/OWNERS | 4 | ||||
-rw-r--r-- | chrome/common/chrome_switches.cc | 4 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 1 | ||||
-rw-r--r-- | chrome/common/spellcheck_common.cc | 21 | ||||
-rw-r--r-- | chrome/common/spellcheck_common.h | 3 | ||||
-rw-r--r-- | chrome/common/spellcheck_common_unittest.cc | 51 | ||||
-rw-r--r-- | chrome/test/BUILD.gn | 1 | ||||
-rw-r--r-- | tools/metrics/histograms/histograms.xml | 1 |
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"/> |