From 3b8643f3a129331f2808313d46324a52b36fbd20 Mon Sep 17 00:00:00 2001 From: Justin Donnelly Date: Wed, 17 Feb 2021 22:11:05 +0000 Subject: [PATCH] Revert "[omnibox] Enable keyword search button by default." This reverts commit 4ad67f3df55f461e0fc1ba9429b479779b296c26. Reason for revert: We're holding off on rolling this out while we evaluate some changes to how triggering works. Original change's description: > [omnibox] Enable keyword search button by default. > > Also update unit tests to use Suggestion Button > Row/Keyword Search Button test by default. > > Bug: 1046523 > Change-Id: Icbb41a9a10844b363d6d9fb89c401266b4858576 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2674166 > Commit-Queue: Angela Yoeurng > Reviewed-by: Justin Donnelly > Cr-Commit-Position: refs/heads/master@{#851918} Bug: 1046523 Change-Id: I8b6796f8e466b823792999eb869dc20ca4c24bd1 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2701652 Bot-Commit: Rubber Stamper Commit-Queue: Justin Donnelly Cr-Commit-Position: refs/heads/master@{#854975} --- .../omnibox/browser/autocomplete_controller.h | 4 + .../browser/omnibox_popup_model_unittest.cc | 361 +++++++++++++----- components/omnibox/common/omnibox_features.cc | 2 +- .../variations/fieldtrial_testing_config.json | 19 + 4 files changed, 292 insertions(+), 94 deletions(-) diff --git a/components/omnibox/browser/autocomplete_controller.h b/components/omnibox/browser/autocomplete_controller.h index b81ffd67e2e7b7..3c51321a2bbfcb 100644 --- a/components/omnibox/browser/autocomplete_controller.h +++ b/components/omnibox/browser/autocomplete_controller.h @@ -211,6 +211,10 @@ class AutocompleteController : public AutocompleteProviderListener, PopupStepSelectionWithHiddenGroupIds); FRIEND_TEST_ALL_PREFIXES(OmniboxPopupModelTest, PopupInlineAutocompleteAndTemporaryText); + FRIEND_TEST_ALL_PREFIXES(OmniboxPopupModelSuggestionButtonRowTest, + PopupStepSelectionWithButtonRow); + FRIEND_TEST_ALL_PREFIXES(OmniboxPopupModelSuggestionButtonRowTest, + PopupStepSelectionWithButtonRowAndKeywordButton); FRIEND_TEST_ALL_PREFIXES(OmniboxPopupContentsViewTest, EmitSelectedChildrenChangedAccessibilityEvent); diff --git a/components/omnibox/browser/omnibox_popup_model_unittest.cc b/components/omnibox/browser/omnibox_popup_model_unittest.cc index 4e7ceeac7ba632..03cc4881567a17 100644 --- a/components/omnibox/browser/omnibox_popup_model_unittest.cc +++ b/components/omnibox/browser/omnibox_popup_model_unittest.cc @@ -102,6 +102,38 @@ class OmniboxPopupModelTest : public ::testing::Test { OmniboxPopupModel popup_model_; }; +// A test fixture that enables the #omnibox-suggestion-button-row field trial. +class OmniboxPopupModelSuggestionButtonRowTest : public OmniboxPopupModelTest { + public: + OmniboxPopupModelSuggestionButtonRowTest() = default; + OmniboxPopupModelSuggestionButtonRowTest( + const OmniboxPopupModelSuggestionButtonRowTest&) = delete; + OmniboxPopupModelSuggestionButtonRowTest& operator=( + const OmniboxPopupModelSuggestionButtonRowTest&) = delete; + + protected: + // testing::Test: + void SetUp() override { + scoped_feature_list_ = std::make_unique(); + scoped_feature_list_->InitAndEnableFeature( + omnibox::kOmniboxSuggestionButtonRow); + OmniboxPopupModelTest::SetUp(); + } + + void TearDown() override { scoped_feature_list_.reset(); } + + void InitKeywordButtonFeature() { + scoped_feature_list_ = std::make_unique(); + scoped_feature_list_->InitWithFeatures( + {omnibox::kOmniboxSuggestionButtonRow, + omnibox::kOmniboxKeywordSearchButton}, + {}); + } + + private: + std::unique_ptr scoped_feature_list_; +}; + // This verifies that the new treatment of the user's selected match in // |SetSelectedLine()| with removed |AutocompleteResult::Selection::empty()| // is correct in the face of various replacement versions of |empty()|. @@ -192,7 +224,7 @@ TEST_F(OmniboxPopupModelTest, PopupPositionChanging) { TEST_F(OmniboxPopupModelTest, PopupStepSelection) { ACMatches matches; - for (size_t i = 0; i < 5; ++i) { + for (size_t i = 0; i < 4; ++i) { AutocompleteMatch match(nullptr, 1000, false, AutocompleteMatchType::URL_WHAT_YOU_TYPED); match.keyword = base::ASCIIToUTF16("match"); @@ -201,19 +233,14 @@ TEST_F(OmniboxPopupModelTest, PopupStepSelection) { } // Make match index 1 deletable to verify we can step to that. matches[1].deletable = true; - // Make match index 2 only have an associated keyword to verify we can step - // backwards into keyword search mode if keyword search button is enabled. + // Make match index 2 have an associated keyword for irregular state stepping. + // Make it deleteable also to verify that we correctly handle matches with + // keywords that are ALSO deleteable (this is an edge case that was broken). matches[2].associated_keyword = std::make_unique(matches.back()); - // Make match index 3 have an associated keyword, tab match, and deletable to - // verify keyword mode doesn't override tab match and remove suggestion - // buttons (as it does with button row disabled) - matches[3].associated_keyword = - std::make_unique(matches.back()); - matches[3].has_tab_match = true; - matches[3].deletable = true; - // Make match index 4 have a suggestion_group_id to test header behavior. - matches[4].suggestion_group_id = 7; + matches[2].deletable = true; + // Make match index 3 have a suggestion_group_id to test header behavior. + matches[3].suggestion_group_id = 7; auto* result = &model()->autocomplete_controller()->result_; AutocompleteInput input(base::UTF8ToUTF16("match"), @@ -226,95 +253,48 @@ TEST_F(OmniboxPopupModelTest, PopupStepSelection) { EXPECT_EQ(0u, model()->popup_model()->selected_line()); // Step by lines forward. - for (size_t n : {1, 2, 3, 4, 0}) { + for (size_t n : {1, 2, 3, 0}) { popup_model()->StepSelection(OmniboxPopupModel::kForward, OmniboxPopupModel::kWholeLine); EXPECT_EQ(n, model()->popup_model()->selected_line()); } // Step by lines backward. - for (size_t n : {4, 3, 2, 1, 0}) { + for (size_t n : {3, 2, 1, 0}) { popup_model()->StepSelection(OmniboxPopupModel::kBackward, OmniboxPopupModel::kWholeLine); EXPECT_EQ(n, model()->popup_model()->selected_line()); } - - if (base::FeatureList::IsEnabled(omnibox::kOmniboxKeywordSearchButton)) { - // Step by states forward. - for (auto selection : { - Selection(1, OmniboxPopupModel::NORMAL), - Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - Selection(2, OmniboxPopupModel::NORMAL), - Selection(2, OmniboxPopupModel::KEYWORD_MODE), - Selection(3, OmniboxPopupModel::NORMAL), - Selection(3, OmniboxPopupModel::KEYWORD_MODE), - Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH), - Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), - Selection(4, OmniboxPopupModel::NORMAL), - Selection(0, OmniboxPopupModel::NORMAL), - }) { - popup_model()->StepSelection(OmniboxPopupModel::kForward, - OmniboxPopupModel::kStateOrLine); - EXPECT_EQ(selection, model()->popup_model()->selection()); - } - // Step by states backward. Unlike prior to suggestion button row, there is - // no difference in behavior for KEYWORD mode moving forward or backward. - for (auto selection : { - Selection(4, OmniboxPopupModel::NORMAL), - Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), - Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH), - Selection(3, OmniboxPopupModel::KEYWORD_MODE), - Selection(3, OmniboxPopupModel::NORMAL), - Selection(2, OmniboxPopupModel::KEYWORD_MODE), - Selection(2, OmniboxPopupModel::NORMAL), - Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - Selection(1, OmniboxPopupModel::NORMAL), - Selection(0, OmniboxPopupModel::NORMAL), - Selection(4, OmniboxPopupModel::NORMAL), - Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), - Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - }) { - popup_model()->StepSelection(OmniboxPopupModel::kBackward, - OmniboxPopupModel::kStateOrLine); - EXPECT_EQ(selection, model()->popup_model()->selection()); - } - } else { - // Step by states forward. Without keyword search button enabled, - // Tab Switch and Remove Suggestion buttons are disabled when keyword is - // present. - for (auto selection : { - Selection(1, OmniboxPopupModel::NORMAL), - Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - Selection(2, OmniboxPopupModel::NORMAL), - Selection(2, OmniboxPopupModel::KEYWORD_MODE), - Selection(3, OmniboxPopupModel::NORMAL), - Selection(3, OmniboxPopupModel::KEYWORD_MODE), - Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), - Selection(4, OmniboxPopupModel::NORMAL), - Selection(0, OmniboxPopupModel::NORMAL), - }) { - popup_model()->StepSelection(OmniboxPopupModel::kForward, - OmniboxPopupModel::kStateOrLine); - EXPECT_EQ(selection, model()->popup_model()->selection()); - } - // Note the lack of KEYWORD. This is by design. Stepping forward - // should land on KEYWORD, but stepping backward should not. - for (auto selection : { - Selection(4, OmniboxPopupModel::NORMAL), - Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), - Selection(3, OmniboxPopupModel::NORMAL), - Selection(2, OmniboxPopupModel::NORMAL), - Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), - Selection(1, OmniboxPopupModel::NORMAL), - Selection(0, OmniboxPopupModel::NORMAL), - Selection(4, OmniboxPopupModel::NORMAL), - Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), - }) { - popup_model()->StepSelection(OmniboxPopupModel::kBackward, - OmniboxPopupModel::kStateOrLine); - EXPECT_EQ(selection, model()->popup_model()->selection()); - } + // Step by states forward. + for (auto selection : { + Selection(1, OmniboxPopupModel::NORMAL), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(2, OmniboxPopupModel::NORMAL), + Selection(2, OmniboxPopupModel::KEYWORD_MODE), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(3, OmniboxPopupModel::NORMAL), + Selection(0, OmniboxPopupModel::NORMAL), + }) { + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kStateOrLine); + EXPECT_EQ(selection, model()->popup_model()->selection()); + } + // Step by states backward. + // Note the lack of KEYWORD. This is by design. Stepping forward + // should land on KEYWORD, but stepping backward should not. + for (auto selection : { + Selection(3, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(2, OmniboxPopupModel::NORMAL), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(1, OmniboxPopupModel::NORMAL), + Selection(0, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(2, OmniboxPopupModel::NORMAL), + }) { + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kStateOrLine); + EXPECT_EQ(selection, model()->popup_model()->selection()); } // Try the kAllLines step behavior. @@ -324,7 +304,7 @@ TEST_F(OmniboxPopupModelTest, PopupStepSelection) { model()->popup_model()->selection()); popup_model()->StepSelection(OmniboxPopupModel::kForward, OmniboxPopupModel::kAllLines); - EXPECT_EQ(Selection(4, OmniboxPopupModel::NORMAL), + EXPECT_EQ(Selection(3, OmniboxPopupModel::NORMAL), model()->popup_model()->selection()); } @@ -400,6 +380,201 @@ TEST_F(OmniboxPopupModelTest, PopupStepSelectionWithHiddenGroupIds) { } } +TEST_F(OmniboxPopupModelSuggestionButtonRowTest, + PopupStepSelectionWithButtonRow) { + ACMatches matches; + for (size_t i = 0; i < 4; ++i) { + AutocompleteMatch match(nullptr, 1000, false, + AutocompleteMatchType::URL_WHAT_YOU_TYPED); + match.keyword = base::ASCIIToUTF16("match"); + match.allowed_to_be_default_match = true; + matches.push_back(match); + } + // Make match index 1 have a tab match and be deletable to verify we can step + // to each. + matches[1].has_tab_match = true; + matches[1].deletable = true; + // Make match index 2 have an associated keyword for irregular state stepping. + // Make it deleteable and with a tab match to verify that we correctly skip + // those on matches with an associated keyword. + matches[2].associated_keyword = + std::make_unique(matches.back()); + matches[2].deletable = true; + matches[2].has_tab_match = true; + // Make match index 3 have a suggestion_group_id to test header behavior. + matches[3].suggestion_group_id = 7; + + auto* result = &model()->autocomplete_controller()->result_; + AutocompleteInput input(base::UTF8ToUTF16("match"), + metrics::OmniboxEventProto::NTP, + TestSchemeClassifier()); + result->AppendMatches(input, matches); + result->MergeHeadersMap({{7, base::UTF8ToUTF16("header")}}); + result->SortAndCull(input, nullptr); + popup_model()->OnResultChanged(); + EXPECT_EQ(0u, model()->popup_model()->selected_line()); + + // Step by lines forward. + for (size_t n : {1, 2, 3, 0}) { + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kWholeLine); + EXPECT_EQ(n, model()->popup_model()->selected_line()); + } + // Step by lines backward. + for (size_t n : {3, 2, 1, 0}) { + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kWholeLine); + EXPECT_EQ(n, model()->popup_model()->selected_line()); + } + // Step by states forward. + for (auto selection : { + Selection(1, OmniboxPopupModel::NORMAL), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(2, OmniboxPopupModel::NORMAL), + Selection(2, OmniboxPopupModel::KEYWORD_MODE), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(3, OmniboxPopupModel::NORMAL), + Selection(0, OmniboxPopupModel::NORMAL), + }) { + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kStateOrLine); + EXPECT_EQ(selection, model()->popup_model()->selection()); + } + // Step by states backward. + // Note the lack of KEYWORD. This is by design. Stepping forward + // should land on KEYWORD, but stepping backward should not. + for (auto selection : { + Selection(3, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(2, OmniboxPopupModel::NORMAL), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH), + Selection(1, OmniboxPopupModel::NORMAL), + Selection(0, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(2, OmniboxPopupModel::NORMAL), + }) { + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kStateOrLine); + EXPECT_EQ(selection, model()->popup_model()->selection()); + } + + // Try the kAllLines step behavior. + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kAllLines); + EXPECT_EQ(Selection(0, OmniboxPopupModel::NORMAL), + model()->popup_model()->selection()); + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kAllLines); + EXPECT_EQ(Selection(3, OmniboxPopupModel::NORMAL), + model()->popup_model()->selection()); +} + +TEST_F(OmniboxPopupModelSuggestionButtonRowTest, + PopupStepSelectionWithButtonRowAndKeywordButton) { + InitKeywordButtonFeature(); + + ACMatches matches; + for (size_t i = 0; i < 5; ++i) { + AutocompleteMatch match(nullptr, 1000, false, + AutocompleteMatchType::URL_WHAT_YOU_TYPED); + match.keyword = base::ASCIIToUTF16("match"); + match.allowed_to_be_default_match = true; + matches.push_back(match); + } + // Make match index 1 deletable to verify we can step to that. + matches[1].deletable = true; + // Make match index 2 only have an associated keyword to verify we can step + // backwards into keyword search mode. + matches[2].associated_keyword = + std::make_unique(matches.back()); + // Make match index 3 have an associated keyword, tab match, and deletable to + // verify keyword mode doesn't override tab match and remove suggestion + // buttons (as it does with button row disabled) + matches[3].associated_keyword = + std::make_unique(matches.back()); + matches[3].has_tab_match = true; + matches[3].deletable = true; + // Make match index 4 have a suggestion_group_id to test header behavior. + matches[4].suggestion_group_id = 7; + + auto* result = &model()->autocomplete_controller()->result_; + AutocompleteInput input(base::UTF8ToUTF16("match"), + metrics::OmniboxEventProto::NTP, + TestSchemeClassifier()); + result->AppendMatches(input, matches); + result->MergeHeadersMap({{7, base::UTF8ToUTF16("header")}}); + result->SortAndCull(input, nullptr); + popup_model()->OnResultChanged(); + EXPECT_EQ(0u, model()->popup_model()->selected_line()); + + // Step by lines forward. + for (size_t n : {1, 2, 3, 4, 0}) { + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kWholeLine); + EXPECT_EQ(n, model()->popup_model()->selected_line()); + } + // Step by lines backward. + for (size_t n : {4, 3, 2, 1, 0}) { + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kWholeLine); + EXPECT_EQ(n, model()->popup_model()->selected_line()); + } + // Step by states forward. + for (auto selection : { + Selection(1, OmniboxPopupModel::NORMAL), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(2, OmniboxPopupModel::NORMAL), + Selection(2, OmniboxPopupModel::KEYWORD_MODE), + Selection(3, OmniboxPopupModel::NORMAL), + Selection(3, OmniboxPopupModel::KEYWORD_MODE), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(4, OmniboxPopupModel::NORMAL), + Selection(0, OmniboxPopupModel::NORMAL), + }) { + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kStateOrLine); + EXPECT_EQ(selection, model()->popup_model()->selection()); + } + + // Step by states backward. Unlike without suggestion button row, there is no + // difference in behavior for KEYWORD mode moving forward or backward. + for (auto selection : { + Selection(4, OmniboxPopupModel::NORMAL), + Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_TAB_SWITCH), + Selection(3, OmniboxPopupModel::KEYWORD_MODE), + Selection(3, OmniboxPopupModel::NORMAL), + Selection(2, OmniboxPopupModel::KEYWORD_MODE), + Selection(2, OmniboxPopupModel::NORMAL), + Selection(1, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + Selection(1, OmniboxPopupModel::NORMAL), + Selection(0, OmniboxPopupModel::NORMAL), + Selection(4, OmniboxPopupModel::NORMAL), + Selection(4, OmniboxPopupModel::FOCUSED_BUTTON_HEADER), + Selection(3, OmniboxPopupModel::FOCUSED_BUTTON_REMOVE_SUGGESTION), + }) { + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kStateOrLine); + EXPECT_EQ(selection, model()->popup_model()->selection()); + } + + // Try the kAllLines step behavior. + popup_model()->StepSelection(OmniboxPopupModel::kBackward, + OmniboxPopupModel::kAllLines); + EXPECT_EQ(Selection(0, OmniboxPopupModel::NORMAL), + model()->popup_model()->selection()); + popup_model()->StepSelection(OmniboxPopupModel::kForward, + OmniboxPopupModel::kAllLines); + EXPECT_EQ(Selection(4, OmniboxPopupModel::NORMAL), + model()->popup_model()->selection()); +} + TEST_F(OmniboxPopupModelTest, PopupInlineAutocompleteAndTemporaryText) { // Create a set of three matches "a|1" (inline autocompleted), "a2", "a3". // The third match has a suggestion group ID. diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc index c5b725f37811a2..2f25cc4b628044 100644 --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc @@ -328,7 +328,7 @@ const base::Feature kOmniboxPedalSuggestions{"OmniboxPedalSuggestions", // Feature used to enable the keyword search button. const base::Feature kOmniboxKeywordSearchButton{ - "OmniboxKeywordSearchButton", enabled_by_default_desktop_only}; + "OmniboxKeywordSearchButton", base::FEATURE_DISABLED_BY_DEFAULT}; // Enables new UI changes indicating focus and hover states. const base::Feature kOmniboxRefinedFocusState{ diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index da78bffeb5241d..570968938c1b2f 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json @@ -4927,6 +4927,25 @@ ] } ], + "OmniboxButtonRowPedalsDesktop": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "ButtonRowWithPedalsAndKeywordButton", + "enable_features": [ + "OmniboxKeywordSearchButton" + ] + } + ] + } + ], "OmniboxDNSInterceptionChecksPolicyRollout": [ { "platforms": [