1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/spellcheck/common/spellcheck_features.h"
6 
7 #include "base/system/sys_info.h"
8 #include "base/win/windows_version.h"
9 #include "build/build_config.h"
10 #include "components/spellcheck/spellcheck_buildflags.h"
11 
12 namespace spellcheck {
13 
14 #if BUILDFLAG(ENABLE_SPELLCHECK)
15 
16 #if BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
17 const base::Feature kWinUseHybridSpellChecker{
18     "WinUseHybridSpellChecker", base::FEATURE_DISABLED_BY_DEFAULT};
19 #endif  // BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
20 
UseBrowserSpellChecker()21 bool UseBrowserSpellChecker() {
22 #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER)
23   return false;
24 #elif defined(OS_WIN)
25   return base::FeatureList::IsEnabled(spellcheck::kWinUseBrowserSpellChecker) &&
26          WindowsVersionSupportsSpellchecker();
27 #else
28   return true;
29 #endif
30 }
31 
32 #if defined(OS_WIN)
33 const base::Feature kWinUseBrowserSpellChecker{
34     "WinUseBrowserSpellChecker", base::FEATURE_DISABLED_BY_DEFAULT};
35 
WindowsVersionSupportsSpellchecker()36 bool WindowsVersionSupportsSpellchecker() {
37   return base::win::GetVersion() > base::win::Version::WIN7 &&
38          base::win::GetVersion() < base::win::Version::WIN_LAST;
39 }
40 
UseWinHybridSpellChecker()41 bool UseWinHybridSpellChecker() {
42 #if BUILDFLAG(USE_WIN_HYBRID_SPELLCHECKER)
43   return base::FeatureList::IsEnabled(spellcheck::kWinUseHybridSpellChecker) &&
44          UseBrowserSpellChecker();
45 #else
46   return false;
47 #endif
48 }
49 #endif  // defined(OS_WIN)
50 
51 #if defined(OS_ANDROID)
52 // Enables/disables Android spellchecker.
53 const base::Feature kAndroidSpellChecker{
54     "AndroidSpellChecker", base::FEATURE_DISABLED_BY_DEFAULT};
55 
56 // Enables/disables Android spellchecker on non low-end Android devices.
57 const base::Feature kAndroidSpellCheckerNonLowEnd{
58     "AndroidSpellCheckerNonLowEnd", base::FEATURE_ENABLED_BY_DEFAULT};
59 
IsAndroidSpellCheckFeatureEnabled()60 bool IsAndroidSpellCheckFeatureEnabled() {
61   if (base::FeatureList::IsEnabled(spellcheck::kAndroidSpellCheckerNonLowEnd)) {
62     return !base::SysInfo::IsLowEndDevice();
63   }
64 
65   if (base::FeatureList::IsEnabled(spellcheck::kAndroidSpellChecker)) {
66     return true;
67   }
68 
69   return false;
70 }
71 #endif  // defined(OS_ANDROID)
72 
73 #endif  // BUILDFLAG(ENABLE_SPELLCHECK)
74 
75 }  // namespace spellcheck
76