Add-flag-for-omnibox-autocomplete-filtering.patch 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. From: Blaise <BlaiseD@GMail.com>
  2. Date: Sat, 22 Aug 2020 08:52:40 -0500
  3. Subject: Add flag for omnibox autocomplete filtering
  4. Adds a flag that restricts whether search history, clipboard, bookmarks
  5. and internal chrome:// pages will be used for the autocomplete results.
  6. ---
  7. chrome/browser/about_flags.cc | 22 ++++++++++++++++++-
  8. .../browser/autocomplete_controller.cc | 11 ++++++++++
  9. .../omnibox/browser/history_url_provider.cc | 3 +++
  10. components/omnibox/browser/search_provider.cc | 4 ++++
  11. components/url_formatter/url_fixer.cc | 4 ++++
  12. 5 files changed, 43 insertions(+), 1 deletion(-)
  13. diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
  14. --- a/chrome/browser/about_flags.cc
  15. +++ b/chrome/browser/about_flags.cc
  16. @@ -466,6 +466,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = {
  17. #endif // BUILDFLAG(IS_ANDROID)
  18. #if BUILDFLAG(IS_ANDROID)
  19. +const FeatureEntry::Choice kOmniboxAutocompleteFiltering[] = {
  20. + {flags_ui::kGenericExperimentChoiceDefault, "", ""},
  21. + {"Search suggestions only",
  22. + "omnibox-autocomplete-filtering",
  23. + "search"},
  24. + {"Search suggestions and bookmarks",
  25. + "omnibox-autocomplete-filtering",
  26. + "search-bookmarks"},
  27. + {"Search suggestions and internal chrome pages",
  28. + "omnibox-autocomplete-filtering",
  29. + "search-chrome"},
  30. + {"Search suggestions, bookmarks, and internal chrome pages",
  31. + "omnibox-autocomplete-filtering",
  32. + "search-bookmarks-chrome"},
  33. +};
  34. +
  35. const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNone[] = {
  36. {"mode", "always-none"}};
  37. const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNewTab[] = {
  38. @@ -3868,7 +3884,11 @@ const FeatureEntry kFeatureEntries[] = {
  39. kOsMac | kOsLinux | kOsLacros | kOsWin,
  40. FEATURE_VALUE_TYPE(features::kSystemNotifications)},
  41. #endif // BUILDFLAG(ENABLE_SYSTEM_NOTIFICATIONS) && !BUILDFLAG(IS_CHROMEOS_ASH)
  42. -#if BUILDFLAG(IS_ANDROID)
  43. +#if BUILDFLAG(IS_ANDROID) // Bromite autocomplete filtering
  44. + {"omnibox-autocomplete-filtering",
  45. + "Omnibox Autocomplete Filtering",
  46. + "Restrict omnibox autocomplete results to a combination of search suggestions (if enabled), bookmarks, and internal chrome pages.",
  47. + kOsAll, MULTI_VALUE_TYPE(kOmniboxAutocompleteFiltering)},
  48. {"adaptive-button-in-top-toolbar",
  49. flag_descriptions::kAdaptiveButtonInTopToolbarName,
  50. flag_descriptions::kAdaptiveButtonInTopToolbarDescription, kOsAndroid,
  51. diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc
  52. --- a/components/omnibox/browser/autocomplete_controller.cc
  53. +++ b/components/omnibox/browser/autocomplete_controller.cc
  54. @@ -15,6 +15,8 @@
  55. #include "base/bind.h"
  56. #include "base/check_op.h"
  57. +#include "base/containers/contains.h"
  58. +#include "base/command_line.h"
  59. #include "base/feature_list.h"
  60. #include "base/format_macros.h"
  61. #include "base/metrics/histogram.h"
  62. @@ -292,6 +294,15 @@ AutocompleteController::AutocompleteController(
  63. search_service_worker_signal_sent_(false),
  64. template_url_service_(provider_client_->GetTemplateURLService()) {
  65. provider_types &= ~OmniboxFieldTrial::GetDisabledProviderTypes();
  66. + if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) {
  67. + const std::string flag_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering");
  68. + provider_types &= AutocompleteProvider::TYPE_KEYWORD | AutocompleteProvider::TYPE_SEARCH |
  69. + AutocompleteProvider::TYPE_HISTORY_URL | AutocompleteProvider::TYPE_BOOKMARK | AutocompleteProvider::TYPE_BUILTIN;
  70. + if (!base::Contains(flag_value, "bookmarks"))
  71. + provider_types &= ~AutocompleteProvider::TYPE_BOOKMARK;
  72. + if (!base::Contains(flag_value, "chrome"))
  73. + provider_types &= ~AutocompleteProvider::TYPE_BUILTIN;
  74. + }
  75. if (provider_types & AutocompleteProvider::TYPE_BOOKMARK)
  76. providers_.push_back(new BookmarkProvider(provider_client_.get()));
  77. if (provider_types & AutocompleteProvider::TYPE_BUILTIN)
  78. diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc
  79. --- a/components/omnibox/browser/history_url_provider.cc
  80. +++ b/components/omnibox/browser/history_url_provider.cc
  81. @@ -472,6 +472,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input,
  82. if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY)
  83. matches_.push_back(what_you_typed_match);
  84. + if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
  85. + return;
  86. +
  87. // We'll need the history service to run both passes, so try to obtain it.
  88. history::HistoryService* const history_service =
  89. client()->GetHistoryService();
  90. diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc
  91. --- a/components/omnibox/browser/search_provider.cc
  92. +++ b/components/omnibox/browser/search_provider.cc
  93. @@ -12,6 +12,7 @@
  94. #include "base/base64.h"
  95. #include "base/bind.h"
  96. #include "base/callback.h"
  97. +#include "base/command_line.h"
  98. #include "base/feature_list.h"
  99. #include "base/i18n/break_iterator.h"
  100. #include "base/i18n/case_conversion.h"
  101. @@ -646,6 +647,9 @@ void SearchProvider::Run(bool query_is_private) {
  102. }
  103. void SearchProvider::DoHistoryQuery(bool minimal_changes) {
  104. + if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
  105. + return;
  106. +
  107. // The history query results are synchronous, so if minimal_changes is true,
  108. // we still have the last results and don't need to do anything.
  109. if (minimal_changes)
  110. diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc
  111. --- a/components/url_formatter/url_fixer.cc
  112. +++ b/components/url_formatter/url_fixer.cc
  113. @@ -9,6 +9,8 @@
  114. #include <algorithm>
  115. #include "base/check_op.h"
  116. +#include "base/containers/contains.h"
  117. +#include "base/command_line.h"
  118. #include "base/files/file_path.h"
  119. #include "base/files/file_util.h"
  120. #include "base/ranges/algorithm.h"
  121. @@ -607,6 +609,8 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) {
  122. FixupHost(trimmed, parts.host, parts.scheme.is_valid(), desired_tld, &url);
  123. if (chrome_url && !parts.host.is_valid())
  124. + if (!base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering") ||
  125. + base::Contains(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"), "chrome"))
  126. url.append(kChromeUIDefaultHost);
  127. FixupPort(trimmed, parts.port, &url);
  128. FixupPath(trimmed, parts.path, &url);
  129. --
  130. 2.25.1