| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/autocomplete/model/omnibox_pedal_implementation.h" |
| |
| #import "components/omnibox/browser/actions/omnibox_pedal.h" |
| #import "components/omnibox/browser/autocomplete_input.h" |
| #import "components/omnibox/browser/autocomplete_provider_client.h" |
| #import "components/omnibox/browser/buildflags.h" |
| #import "components/omnibox/browser/omnibox_client.h" |
| #import "components/omnibox/browser/omnibox_field_trial.h" |
| #import "components/omnibox/common/omnibox_features.h" |
| #import "components/omnibox/resources/grit/omnibox_pedal_synonyms.h" |
| #import "components/prefs/pref_service.h" |
| #import "components/strings/grit/components_strings.h" |
| |
| // ============================================================================= |
| |
| class OmniboxPedalClearBrowsingData : public OmniboxPedal { |
| public: |
| explicit OmniboxPedalClearBrowsingData(bool incognito) |
| : OmniboxPedal( |
| OmniboxPedalId::CLEAR_BROWSING_DATA, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_HINT, |
| IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA), |
| GURL()), |
| incognito_(incognito) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| // Note about translation strings: English preserves original separated |
| // synonym group structure, but these strings are not translated (grit |
| // message sets translateable=false). Non-English uses simplified whole |
| // phrase trigger lists, and this string is translated. |
| if (locale_is_english) { |
| return { |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_CLEAR_BROWSING_DATA_ONE_OPTIONAL_GOOGLE_CHROME, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_CLEAR_BROWSING_DATA_ONE_REQUIRED_DELETE, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_CLEAR_BROWSING_DATA_ONE_REQUIRED_INFORMATION, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_CLEAR_BROWSING_DATA_ONE_REQUIRED_CLEAR_BROWSER_CACHE, |
| }, |
| }; |
| } |
| } |
| |
| // This method override enables this Pedal to spoof its ID for metrics |
| // reporting, making it possible to distinguish incognito usage. |
| OmniboxPedalId GetMetricsId() const override { |
| return incognito_ ? OmniboxPedalId::INCOGNITO_CLEAR_BROWSING_DATA |
| : PedalId(); |
| } |
| |
| protected: |
| ~OmniboxPedalClearBrowsingData() override = default; |
| bool incognito_; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalManagePasswords : public OmniboxPedal { |
| public: |
| OmniboxPedalManagePasswords() |
| : OmniboxPedal( |
| OmniboxPedalId::MANAGE_PASSWORDS, |
| LabelStrings(IDS_IOS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_HINT, |
| IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_MANAGE_PASSWORDS_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_MANAGE_PASSWORDS), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_PASSWORDS_ONE_OPTIONAL_GOOGLE_CHROME, |
| }, |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_PASSWORDS_ONE_OPTIONAL_MANAGER, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_PASSWORDS_ONE_REQUIRED_PASSWORDS, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_PASSWORDS_ONE_REQUIRED_MANAGE_CHROME_PASSWORDS, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalManagePasswords() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalSetChromeAsDefaultBrowser : public OmniboxPedal { |
| public: |
| explicit OmniboxPedalSetChromeAsDefaultBrowser() |
| : OmniboxPedal( |
| OmniboxPedalId::SET_CHROME_AS_DEFAULT_BROWSER, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_SET_CHROME_AS_DEFAULT_BROWSER_HINT, |
| IDS_IOS_OMNIBOX_PEDAL_SET_CHROME_AS_DEFAULT_BROWSER_SUGGESTION_CONTENTS, |
| IDS_IOS_ACC_OMNIBOX_PEDAL_SET_CHROME_AS_DEFAULT_BROWSER_SUFFIX, |
| IDS_IOS_ACC_OMNIBOX_PEDAL_SET_CHROME_AS_DEFAULT_BROWSER), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_SET_CHROME_AS_DEFAULT_BROWSER_ONE_REQUIRED_HOW_TO_MAKE_CHROME_MY_DEFAULT_BROWSER, |
| }, |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_SET_CHROME_AS_DEFAULT_BROWSER_ONE_OPTIONAL_SELECT, |
| }, |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_SET_CHROME_AS_DEFAULT_BROWSER_ONE_OPTIONAL_DEFAULT_BROWSER, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_SET_CHROME_AS_DEFAULT_BROWSER_ONE_REQUIRED_ALWAYS_OPEN_LINKS_IN_CHROME, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalSetChromeAsDefaultBrowser() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalUpdateCreditCard : public OmniboxPedal { |
| public: |
| OmniboxPedalUpdateCreditCard() |
| : OmniboxPedal( |
| OmniboxPedalId::UPDATE_CREDIT_CARD, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT, |
| IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_UPDATE_CREDIT_CARD_ONE_OPTIONAL_GOOGLE_CHROME, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_UPDATE_CREDIT_CARD_ONE_REQUIRED_CHANGE, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_UPDATE_CREDIT_CARD_ONE_REQUIRED_CREDIT_CARD_INFORMATION, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_UPDATE_CREDIT_CARD_ONE_REQUIRED_MANAGE_PAYMENT_METHODS, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalUpdateCreditCard() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalLaunchIncognito : public OmniboxPedal { |
| public: |
| OmniboxPedalLaunchIncognito() |
| : OmniboxPedal( |
| OmniboxPedalId::LAUNCH_INCOGNITO, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_HINT, |
| IDS_IOS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_LAUNCH_INCOGNITO), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_LAUNCH_INCOGNITO_ONE_OPTIONAL_GOOGLE_CHROME, |
| }, |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_LAUNCH_INCOGNITO_ONE_OPTIONAL_CREATE, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_LAUNCH_INCOGNITO_ONE_REQUIRED_INCOGNITO_WINDOW, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_LAUNCH_INCOGNITO_ONE_REQUIRED_ENTER_INCOGNITO_MODE, |
| }, |
| }; |
| } |
| } |
| |
| bool IsReadyToTrigger( |
| const AutocompleteInput& input, |
| const AutocompleteProviderClient& client) const override { |
| return client.IsIncognitoModeAvailable(); |
| } |
| |
| protected: |
| ~OmniboxPedalLaunchIncognito() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalRunChromeSafetyCheck : public OmniboxPedal { |
| public: |
| OmniboxPedalRunChromeSafetyCheck() |
| : OmniboxPedal( |
| OmniboxPedalId::RUN_CHROME_SAFETY_CHECK, |
| OmniboxPedal::LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_HINT, |
| IDS_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_RUN_CHROME_SAFETY_CHECK), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_RUN_CHROME_SAFETY_CHECK_ONE_OPTIONAL_ACTIVATE, |
| }, |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_RUN_CHROME_SAFETY_CHECK_ONE_OPTIONAL_GOOGLE_CHROME, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_RUN_CHROME_SAFETY_CHECK_ONE_REQUIRED_CHECKUP, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_RUN_CHROME_SAFETY_CHECK_ONE_REQUIRED_PASSWORDS, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_RUN_CHROME_SAFETY_CHECK_ONE_REQUIRED_RUN_CHROME_SAFETY_CHECK, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalRunChromeSafetyCheck() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalManageChromeSettings : public OmniboxPedal { |
| public: |
| OmniboxPedalManageChromeSettings() |
| : OmniboxPedal( |
| OmniboxPedalId::MANAGE_CHROME_SETTINGS, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_MANAGE_CHROME_SETTINGS_HINT, |
| IDS_OMNIBOX_PEDAL_MANAGE_CHROME_SETTINGS_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_MANAGE_CHROME_SETTINGS_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_MANAGE_CHROME_SETTINGS), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| false, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_CHROME_SETTINGS_ONE_OPTIONAL_CONTROL, |
| }, |
| {true, true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_CHROME_SETTINGS_ONE_REQUIRED_CHROME_BROWSER_SETTINGS}, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_MANAGE_CHROME_SETTINGS_ONE_REQUIRED_CHANGE_CHROME_SETTINGS, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalManageChromeSettings() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalViewChromeHistory : public OmniboxPedal { |
| public: |
| OmniboxPedalViewChromeHistory() |
| : OmniboxPedal( |
| OmniboxPedalId::VIEW_CHROME_HISTORY, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_VIEW_CHROME_HISTORY_HINT, |
| IDS_OMNIBOX_PEDAL_VIEW_CHROME_HISTORY_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_VIEW_CHROME_HISTORY_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_VIEW_CHROME_HISTORY), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_VIEW_CHROME_HISTORY_ONE_REQUIRED_REVISIT, |
| }, |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_VIEW_CHROME_HISTORY_ONE_REQUIRED_GOOGLE_CHROME_BROWSING_HISTORY, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_VIEW_CHROME_HISTORY_ONE_REQUIRED_SEE_CHROME_HISTORY, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalViewChromeHistory() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| class OmniboxPedalPlayChromeDinoGame : public OmniboxPedal { |
| public: |
| OmniboxPedalPlayChromeDinoGame() |
| : OmniboxPedal( |
| OmniboxPedalId::PLAY_CHROME_DINO_GAME, |
| LabelStrings( |
| IDS_IOS_OMNIBOX_PEDAL_PLAY_CHROME_DINO_GAME_HINT, |
| IDS_OMNIBOX_PEDAL_PLAY_CHROME_DINO_GAME_SUGGESTION_CONTENTS, |
| IDS_ACC_OMNIBOX_PEDAL_PLAY_CHROME_DINO_GAME_SUFFIX, |
| IDS_ACC_OMNIBOX_PEDAL_PLAY_CHROME_DINO_GAME), |
| GURL()) {} |
| |
| std::vector<SynonymGroupSpec> SpecifySynonymGroups( |
| bool locale_is_english) const override { |
| if (locale_is_english) { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_PLAY_CHROME_DINO_GAME_ONE_REQUIRED_PLAY_CHROME_DINO_GAME, |
| }, |
| }; |
| } else { |
| return { |
| { |
| true, |
| true, |
| IDS_OMNIBOX_PEDAL_SYNONYMS_PLAY_CHROME_DINO_GAME_ONE_REQUIRED_CHROME_DINO, |
| }, |
| }; |
| } |
| } |
| |
| protected: |
| ~OmniboxPedalPlayChromeDinoGame() override = default; |
| }; |
| |
| // ============================================================================= |
| |
| std::unordered_map<OmniboxPedalId, scoped_refptr<OmniboxPedal>> |
| GetPedalImplementations(bool incognito, bool testing) { |
| std::unordered_map<OmniboxPedalId, scoped_refptr<OmniboxPedal>> pedals; |
| __unused const auto add = [&](OmniboxPedal* pedal) { |
| pedals.insert( |
| std::make_pair(pedal->PedalId(), base::WrapRefCounted(pedal))); |
| }; |
| |
| if (!incognito) { |
| add(new OmniboxPedalClearBrowsingData(incognito)); |
| add(new OmniboxPedalViewChromeHistory()); |
| } |
| |
| add(new OmniboxPedalManagePasswords()); |
| add(new OmniboxPedalSetChromeAsDefaultBrowser()); |
| add(new OmniboxPedalUpdateCreditCard()); |
| add(new OmniboxPedalLaunchIncognito()); |
| add(new OmniboxPedalRunChromeSafetyCheck()); |
| add(new OmniboxPedalManageChromeSettings()); |
| add(new OmniboxPedalPlayChromeDinoGame()); |
| |
| return pedals; |
| } |