+
+--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
++++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+@@ -2729,6 +2729,11 @@ void AddSearchStrings(content::WebUIData
+ {"searchEnginesCancelButton", IDS_CANCEL},
+ {"searchEnginesConfirmationToastLabel",
+ IDS_SEARCH_ENGINE_CHOICE_SETTINGS_CONFIRMATION_TOAST_LABEL},
++ {"searchAutocompleteTitle", IDS_SEARCH_AUTOCOMPLETE_TITLE},
++ {"showSearchAutocompleteHistory",
++ IDS_SEARCH_AUTOCOMPLETE_SHOW_HISTORY},
++ {"showSearchAutocompleteBookmark",
++ IDS_SEARCH_AUTOCOMPLETE_SHOW_BOOKMARK},
+ };
+ html_source->AddLocalizedStrings(kLocalizedStrings);
+ html_source->AddString("searchExplanationLearnMoreURL",
+--- a/components/omnibox/browser/omnibox_pref_names.h
++++ b/components/omnibox/browser/omnibox_pref_names.h
+@@ -81,6 +81,14 @@ inline constexpr char kShowAiModeOmnibox
+ // omnibox.
+ inline constexpr char kShowSearchTools[] = "omnibox.show_search_tools";
+
++// Booleans that specify whether history suggestions are shown in the omnibox.
++inline constexpr char kAutocompleteHistoryEnabled[] =
++ "helium.omnibox.autocomplete.history_enabled";
++
++// Booleans that specify whether bookmark suggestions are shown in the omnibox.
++inline constexpr char kAutocompleteBookmarkEnabled[] =
++ "helium.omnibox.autocomplete.bookmark_enabled";
++
+ // How many times the various IPH suggestions were shown.
+ inline constexpr char kShownCountEnterpriseSearchAggregatorIph[] =
+ "omnibox.shown_count_enterprise_search_aggregator_iph";
+--- a/components/omnibox/browser/omnibox_prefs.cc
++++ b/components/omnibox/browser/omnibox_prefs.cc
+@@ -32,6 +32,9 @@ void RegisterProfilePrefs(PrefRegistrySi
+ registry->RegisterBooleanPref(
+ kShowSearchTools, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+
++ registry->RegisterBooleanPref(omnibox::kAutocompleteHistoryEnabled, true);
++ registry->RegisterBooleanPref(omnibox::kAutocompleteBookmarkEnabled, true);
++
+ registry->RegisterBooleanPref(omnibox::kDismissedGeminiIph, false);
+ registry->RegisterBooleanPref(
+ omnibox::kDismissedEnterpriseSearchAggregatorIphPrefName, false);
+--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
++++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
+@@ -510,6 +510,10 @@ const PrefsUtil::TypedPrefMap& PrefsUtil
+ settings_api::PrefType::kDictionary;
+ (*s_allowlist)[::omnibox::kKeywordSpaceTriggeringEnabled] =
+ settings_api::PrefType::kBoolean;
++ (*s_allowlist)[::omnibox::kAutocompleteHistoryEnabled] =
++ settings_api::PrefType::kBoolean;
++ (*s_allowlist)[::omnibox::kAutocompleteBookmarkEnabled] =
++ settings_api::PrefType::kBoolean;
+
+ // Site Settings prefs.
+ (*s_allowlist)[::content_settings::kGeneratedNotificationPref] =
+--- a/components/omnibox/browser/bookmark_provider.cc
++++ b/components/omnibox/browser/bookmark_provider.cc
+@@ -20,6 +20,7 @@
+ #include "components/omnibox/browser/keyword_provider.h"
+ #include "components/omnibox/browser/match_compare.h"
+ #include "components/omnibox/browser/omnibox_field_trial.h"
++#include "components/omnibox/browser/omnibox_prefs.h"
+ #include "components/omnibox/browser/omnibox_triggered_feature_service.h"
+ #include "components/omnibox/browser/scoring_functor.h"
+ #include "components/omnibox/browser/titled_url_match_utils.h"
+@@ -45,6 +46,10 @@ void BookmarkProvider::Start(const Autoc
+ TRACE_EVENT0("omnibox", "BookmarkProvider::Start");
+ matches_.clear();
+
++ if (!client_->GetPrefs()->GetBoolean(omnibox::kAutocompleteBookmarkEnabled)) {
++ return;
++ }
++
+ if (input.IsZeroSuggest() || input.text().empty()) {
+ return;
+ }
+--- a/components/omnibox/browser/history_fuzzy_provider.cc
++++ b/components/omnibox/browser/history_fuzzy_provider.cc
+@@ -36,6 +36,7 @@
+ #include "components/omnibox/browser/bookmark_provider.h"
+ #include "components/omnibox/browser/history_quick_provider.h"
+ #include "components/omnibox/browser/omnibox_field_trial.h"
++#include "components/omnibox/browser/omnibox_prefs.h"
+ #include "components/omnibox/browser/omnibox_triggered_feature_service.h"
+ #include "components/url_formatter/elide_url.h"
+ #include "third_party/metrics_proto/omnibox_event.pb.h"
+@@ -497,6 +498,11 @@ void HistoryFuzzyProvider::Start(const A
+ bool minimal_changes) {
+ TRACE_EVENT0("omnibox", "HistoryFuzzyProvider::Start");
+ matches_.clear();
++
++ if (!client()->GetPrefs()->GetBoolean(omnibox::kAutocompleteHistoryEnabled)) {
++ return;
++ }
++
+ if (input.IsZeroSuggest() ||
+ input.type() == metrics::OmniboxInputType::EMPTY) {
+ return;
+--- a/components/omnibox/browser/history_quick_provider.cc
++++ b/components/omnibox/browser/history_quick_provider.cc
+@@ -33,6 +33,7 @@
+ #include "components/omnibox/browser/keyword_provider.h"
+ #include "components/omnibox/browser/match_compare.h"
+ #include "components/omnibox/browser/omnibox_field_trial.h"
++#include "components/omnibox/browser/omnibox_prefs.h"
+ #include "components/omnibox/browser/omnibox_triggered_feature_service.h"
+ #include "components/omnibox/browser/url_prefix.h"
+ #include "components/omnibox/common/omnibox_features.h"
+@@ -61,6 +62,11 @@ void HistoryQuickProvider::Start(const A
+ bool minimal_changes) {
+ TRACE_EVENT0("omnibox", "HistoryQuickProvider::Start");
+ matches_.clear();
++
++ if (!client()->GetPrefs()->GetBoolean(omnibox::kAutocompleteHistoryEnabled)) {
++ return;
++ }
++
+ if (disabled_ || input.IsZeroSuggest() ||
+ input.type() == metrics::OmniboxInputType::EMPTY) {
+ return;
+--- a/components/omnibox/browser/history_url_provider.cc
++++ b/components/omnibox/browser/history_url_provider.cc
+@@ -39,6 +39,7 @@
+ #include "components/omnibox/browser/in_memory_url_index_types.h"
+ #include "components/omnibox/browser/keyword_provider.h"
+ #include "components/omnibox/browser/omnibox_field_trial.h"
++#include "components/omnibox/browser/omnibox_prefs.h"
+ #include "components/omnibox/browser/url_prefix.h"
+ #include "components/omnibox/browser/verbatim_match.h"
+ #include "components/prefs/pref_service.h"
+@@ -429,6 +430,13 @@ void HistoryURLProvider::Start(const Aut
+ return;
+ }
+
++ // Unlike other providers, we can't simply stop the search here. The
++ // HistoryURLProvider doesn't only search history, it is also responsible for
++ // navigating to exact urls (i.e. https://example.com/), so we need to disable
++ // **ONLY** history searches. Fortunately, Chromium has a flag for this.
++ search_url_database_ = search_url_database_ && client()->GetPrefs()->GetBoolean(
++ omnibox::kAutocompleteHistoryEnabled);
++
+ // Remove the keyword from input if we're in keyword mode for a starter pack
+ // engine.
+ const auto [autocomplete_input, starter_pack_engine] =
+--- a/components/omnibox/browser/local_history_zero_suggest_provider.cc
++++ b/components/omnibox/browser/local_history_zero_suggest_provider.cc
+@@ -110,6 +110,11 @@ void LocalHistoryZeroSuggestProvider::St
+ bool minimal_changes) {
+ TRACE_EVENT0("omnibox", "LocalHistoryZeroSuggestProvider::Start");
+ Stop(AutocompleteStopReason::kClobbered);
++
++ if (!client_->GetPrefs()->GetBoolean(omnibox::kAutocompleteHistoryEnabled)) {
++ return;
++ }
++
+ if (!AllowLocalHistoryZeroSuggestSuggestions(client_, input)) {
+ return;
+ }
+--- a/components/omnibox/browser/search_provider.cc
++++ b/components/omnibox/browser/search_provider.cc
+@@ -44,6 +44,7 @@
+ #include "components/omnibox/browser/autocomplete_result.h"
+ #include "components/omnibox/browser/keyword_provider.h"
+ #include "components/omnibox/browser/omnibox_field_trial.h"
++#include "components/omnibox/browser/omnibox_prefs.h"
+ #include "components/omnibox/browser/omnibox_triggered_feature_service.h"
+ #include "components/omnibox/browser/page_classification_functions.h"
+ #include "components/omnibox/browser/remote_suggestions_service.h"
+@@ -663,6 +664,10 @@ void SearchProvider::DoHistoryQuery(bool
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering"))
+ return;
+
++ if (!client()->GetPrefs()->GetBoolean(omnibox::kAutocompleteHistoryEnabled)) {
++ return;
++ }
++
+ // The history query results are synchronous, so if minimal_changes is true,
+ // we still have the last results and don't need to do anything.
+ if (minimal_changes)
+--- a/components/omnibox/browser/shortcuts_provider.cc
++++ b/components/omnibox/browser/shortcuts_provider.cc
+@@ -37,6 +37,7 @@
+ #include "components/omnibox/browser/history_cluster_provider.h"
+ #include "components/omnibox/browser/history_url_provider.h"
+ #include "components/omnibox/browser/omnibox_field_trial.h"
++#include "components/omnibox/browser/omnibox_prefs.h"
+ #include "components/omnibox/browser/omnibox_triggered_feature_service.h"
+ #include "components/omnibox/browser/url_prefix.h"
+ #include "components/omnibox/common/omnibox_feature_configs.h"
+@@ -218,6 +219,10 @@ void ShortcutsProvider::Start(const Auto
+ TRACE_EVENT0("omnibox", "ShortcutsProvider::Start");
+ matches_.clear();
+
++ if (!client_->GetPrefs()->GetBoolean(omnibox::kAutocompleteHistoryEnabled)) {
++ return;
++ }
++
+ if (input.IsZeroSuggest() ||
+ input.type() == metrics::OmniboxInputType::EMPTY ||
+ input.text().empty() || !initialized_) {
diff --git a/patches/series b/patches/series
index 3e3cb59c..59b7df48 100644
--- a/patches/series
+++ b/patches/series
@@ -204,6 +204,7 @@ helium/settings/fix-appearance-page.patch
helium/settings/enable-quad9-doh-option.patch
helium/settings/reorder-settings-menu.patch
helium/settings/add-search-engine-button.patch
+helium/settings/add-autocomplete-exclusion-options.patch
helium/hop/setup.patch
helium/hop/disable-password-manager.patch