From f55f43cd76f098ac1c72341f6e62bf10b231f01a Mon Sep 17 00:00:00 2001 From: Brian Clifton Date: Tue, 28 Sep 2021 00:08:49 -0700 Subject: [PATCH 1/3] Update default search engines for CA/DE/FR/GB/US Fixes https://github.com/brave/brave-browser/issues/18331 --- ..._template_url_prepopulate_data_unittest.cc | 15 +++- .../template_url_prepopulate_data.cc | 69 ++++++++++++++----- .../brave_prepopulated_engines.cc | 2 +- 3 files changed, 65 insertions(+), 21 deletions(-) diff --git a/chromium_src/components/search_engines/brave_template_url_prepopulate_data_unittest.cc b/chromium_src/components/search_engines/brave_template_url_prepopulate_data_unittest.cc index ea42919d342b..838b8af34bda 100644 --- a/chromium_src/components/search_engines/brave_template_url_prepopulate_data_unittest.cc +++ b/chromium_src/components/search_engines/brave_template_url_prepopulate_data_unittest.cc @@ -152,15 +152,24 @@ TEST_F(BraveTemplateURLPrepopulateDataTest, ProvidersFromPrepopulated) { // Verifies default search provider for locale TEST_F(BraveTemplateURLPrepopulateDataTest, DefaultSearchProvidersForUSA) { - CheckForCountry('U', 'S', "Google"); + CheckForCountry('U', 'S', "Brave"); } TEST_F(BraveTemplateURLPrepopulateDataTest, DefaultSearchProvidersForGermany) { - CheckForCountry('D', 'E', "Google"); + CheckForCountry('D', 'E', "Brave"); } TEST_F(BraveTemplateURLPrepopulateDataTest, DefaultSearchProvidersForFrance) { - CheckForCountry('F', 'R', "Qwant"); + CheckForCountry('F', 'R', "Brave"); +} + +TEST_F(BraveTemplateURLPrepopulateDataTest, + DefaultSearchProvidersForGreatBritain) { + CheckForCountry('G', 'B', "Brave"); +} + +TEST_F(BraveTemplateURLPrepopulateDataTest, DefaultSearchProvidersForCanada) { + CheckForCountry('C', 'A', "Brave"); } TEST_F(BraveTemplateURLPrepopulateDataTest, diff --git a/chromium_src/components/search_engines/template_url_prepopulate_data.cc b/chromium_src/components/search_engines/template_url_prepopulate_data.cc index 5cb279504b6a..cdfc0f737af2 100644 --- a/chromium_src/components/search_engines/template_url_prepopulate_data.cc +++ b/chromium_src/components/search_engines/template_url_prepopulate_data.cc @@ -59,36 +59,30 @@ const std::vector brave_engines_with_yandex = { }; const std::vector brave_engines_DE = { - PREPOPULATED_ENGINE_ID_DUCKDUCKGO_DE, PREPOPULATED_ENGINE_ID_BRAVE, - PREPOPULATED_ENGINE_ID_QWANT, PREPOPULATED_ENGINE_ID_GOOGLE, - PREPOPULATED_ENGINE_ID_BING, PREPOPULATED_ENGINE_ID_STARTPAGE, + PREPOPULATED_ENGINE_ID_BRAVE, PREPOPULATED_ENGINE_ID_DUCKDUCKGO_DE, + PREPOPULATED_ENGINE_ID_QWANT, PREPOPULATED_ENGINE_ID_GOOGLE, + PREPOPULATED_ENGINE_ID_BING, PREPOPULATED_ENGINE_ID_STARTPAGE, PREPOPULATED_ENGINE_ID_ECOSIA, }; const std::vector brave_engines_FR = { - PREPOPULATED_ENGINE_ID_QWANT, PREPOPULATED_ENGINE_ID_BRAVE, + PREPOPULATED_ENGINE_ID_BRAVE, PREPOPULATED_ENGINE_ID_QWANT, PREPOPULATED_ENGINE_ID_GOOGLE, PREPOPULATED_ENGINE_ID_DUCKDUCKGO, PREPOPULATED_ENGINE_ID_BING, PREPOPULATED_ENGINE_ID_STARTPAGE, PREPOPULATED_ENGINE_ID_ECOSIA, }; const std::vector brave_engines_AU_IE = { - PREPOPULATED_ENGINE_ID_DUCKDUCKGO_AU_NZ_IE, - PREPOPULATED_ENGINE_ID_BRAVE, - PREPOPULATED_ENGINE_ID_GOOGLE, - PREPOPULATED_ENGINE_ID_QWANT, - PREPOPULATED_ENGINE_ID_BING, - PREPOPULATED_ENGINE_ID_STARTPAGE, + PREPOPULATED_ENGINE_ID_BRAVE, PREPOPULATED_ENGINE_ID_DUCKDUCKGO_AU_NZ_IE, + PREPOPULATED_ENGINE_ID_GOOGLE, PREPOPULATED_ENGINE_ID_QWANT, + PREPOPULATED_ENGINE_ID_BING, PREPOPULATED_ENGINE_ID_STARTPAGE, PREPOPULATED_ENGINE_ID_ECOSIA, }; const std::vector brave_engines_NZ = { - PREPOPULATED_ENGINE_ID_DUCKDUCKGO_AU_NZ_IE, - PREPOPULATED_ENGINE_ID_BRAVE, - PREPOPULATED_ENGINE_ID_GOOGLE, - PREPOPULATED_ENGINE_ID_QWANT, - PREPOPULATED_ENGINE_ID_BING, - PREPOPULATED_ENGINE_ID_STARTPAGE, + PREPOPULATED_ENGINE_ID_BRAVE, PREPOPULATED_ENGINE_ID_DUCKDUCKGO_AU_NZ_IE, + PREPOPULATED_ENGINE_ID_GOOGLE, PREPOPULATED_ENGINE_ID_QWANT, + PREPOPULATED_ENGINE_ID_BING, PREPOPULATED_ENGINE_ID_STARTPAGE, }; // A map to keep track of a full list of default engines for countries @@ -234,7 +228,48 @@ BravePrepopulatedEngineID GetDefaultSearchEngine(int country_id, int version) { {country_codes::CountryCharsToCountryID('U', 'Z'), PREPOPULATED_ENGINE_ID_YANDEX}, }); - if (version > 15) { + static const base::NoDestructor< + base::flat_map> + content_v17({ + {country_codes::CountryCharsToCountryID('A', 'M'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('A', 'Z'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('B', 'Y'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('C', 'A'), + PREPOPULATED_ENGINE_ID_BRAVE}, + {country_codes::CountryCharsToCountryID('D', 'E'), + PREPOPULATED_ENGINE_ID_BRAVE}, + {country_codes::CountryCharsToCountryID('F', 'R'), + PREPOPULATED_ENGINE_ID_BRAVE}, + {country_codes::CountryCharsToCountryID('G', 'B'), + PREPOPULATED_ENGINE_ID_BRAVE}, + {country_codes::CountryCharsToCountryID('K', 'G'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('K', 'Z'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('M', 'D'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('R', 'U'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('T', 'J'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('T', 'M'), + PREPOPULATED_ENGINE_ID_YANDEX}, + {country_codes::CountryCharsToCountryID('U', 'S'), + PREPOPULATED_ENGINE_ID_BRAVE}, + {country_codes::CountryCharsToCountryID('U', 'Z'), + PREPOPULATED_ENGINE_ID_YANDEX}, + }); + + if (version > 16) { + auto it = content_v17->find(country_id); + if (it == content_v17->end()) { + return default_v6; + } + return it->second; + } else if (version > 15) { auto it = content_v16->find(country_id); if (it == content_v16->end()) { return default_v6; diff --git a/components/search_engines/brave_prepopulated_engines.cc b/components/search_engines/brave_prepopulated_engines.cc index 1ca7863e7510..c75ccebbfdc8 100644 --- a/components/search_engines/brave_prepopulated_engines.cc +++ b/components/search_engines/brave_prepopulated_engines.cc @@ -12,7 +12,7 @@ namespace TemplateURLPrepopulateData { // IMPORTANT! Make sure to bump this value if you make changes to the // engines below or add/remove engines. -const int kBraveCurrentDataVersion = 16; +const int kBraveCurrentDataVersion = 17; // DO NOT CHANGE THIS ONE. Used for backfilling kBraveDefaultSearchVersion. const int kBraveFirstTrackedDataVersion = 6; From 205868248407d79df4ad014e7f5aae90f5920468 Mon Sep 17 00:00:00 2001 From: Brian Clifton Date: Wed, 29 Sep 2021 16:49:44 -0700 Subject: [PATCH 2/3] Update Desktop onboarding to skip Search card for specific regions Fixes https://github.com/brave/brave-browser/issues/18415 --- components/brave_welcome_ui/containers/app.tsx | 12 +++++++++--- .../reducers/welcome_reducer.ts | 9 +++++---- components/brave_welcome_ui/storage.ts | 3 ++- components/definitions/welcome.d.ts | 3 ++- .../brave_welcome_ui/components/app_test.tsx | 6 ++---- .../reducers/welcome_reducer_test.ts | 17 +++++------------ 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/components/brave_welcome_ui/containers/app.tsx b/components/brave_welcome_ui/containers/app.tsx index 74d870c398e9..0f23860130fc 100644 --- a/components/brave_welcome_ui/containers/app.tsx +++ b/components/brave_welcome_ui/containers/app.tsx @@ -40,7 +40,7 @@ export interface State { shouldUpdateElementOverflow: boolean } -const totalScreensSize = 5 +let totalScreensSize = 5 export class WelcomePage extends React.Component { constructor (props: Props) { @@ -51,6 +51,8 @@ export class WelcomePage extends React.Component { skipped: false, shouldUpdateElementOverflow: false } + const { welcomeData } = this.props + totalScreensSize = welcomeData.hideSearchOnboarding ? 4 : 5 } componentDidUpdate (prevProps: Props) { @@ -129,13 +131,17 @@ export class WelcomePage extends React.Component { /> - + = (state: Welcome.State chrome.send('setDefaultSearchEngine', [modelIndex]) break case types.IMPORT_DEFAULT_SEARCH_PROVIDERS_SUCCESS: - // TODO(bsclifton): remove when ready for other regions + // Regions approved for Brave Search will skip search welcome card + // Regions not approved show the card- but without Brave Search const showBraveSearch: boolean = - ['US', 'CA'].includes(loadTimeData.getString('countryString')) - // Only show Brave Search during onboarding for US/CA + ['US', 'CA', 'DE', 'FR', 'GB'].includes(loadTimeData.getString('countryString')) const filteredSearchList = payload.filter((item: any) => { return !(item.name && item.name.startsWith('Brave ') && item.canBeRemoved) }) state = { ...state, - searchProviders: showBraveSearch ? payload : filteredSearchList + searchProviders: showBraveSearch ? payload : filteredSearchList, + hideSearchOnboarding: showBraveSearch } break case types.IMPORT_BROWSER_PROFILES_SUCCESS: diff --git a/components/brave_welcome_ui/storage.ts b/components/brave_welcome_ui/storage.ts index 54a0e9ea6d7b..97a0da6c8a24 100644 --- a/components/brave_welcome_ui/storage.ts +++ b/components/brave_welcome_ui/storage.ts @@ -9,7 +9,8 @@ const keyName = 'welcome-data' export const defaultState = { searchProviders: [], - browserProfiles: [] + browserProfiles: [], + hideSearchOnboarding: false } const cleanData = (state: Welcome.State) => { diff --git a/components/definitions/welcome.d.ts b/components/definitions/welcome.d.ts index c91bbd163037..0da446d9ac95 100644 --- a/components/definitions/welcome.d.ts +++ b/components/definitions/welcome.d.ts @@ -41,6 +41,7 @@ declare namespace Welcome { export interface State { searchProviders: Array - browserProfiles: Array + browserProfiles: Array, + hideSearchOnboarding: boolean } } diff --git a/components/test/brave_welcome_ui/components/app_test.tsx b/components/test/brave_welcome_ui/components/app_test.tsx index 8899cac19bd0..31232b0d5ff2 100644 --- a/components/test/brave_welcome_ui/components/app_test.tsx +++ b/components/test/brave_welcome_ui/components/app_test.tsx @@ -1,6 +1,7 @@ import * as React from 'react' import { shallow } from 'enzyme' import { welcomeInitialState } from '../../testData' +import * as storage from '../../../brave_welcome_ui/storage' import { WelcomePage, mapStateToProps @@ -10,10 +11,7 @@ describe('welcomePage component', () => { describe('mapStateToProps', () => { it('should map the default state', () => { expect(mapStateToProps(welcomeInitialState)).toEqual({ - welcomeData: { - searchProviders: [], - browserProfiles: [] - } + welcomeData: storage.defaultState }) }) }) diff --git a/components/test/brave_welcome_ui/reducers/welcome_reducer_test.ts b/components/test/brave_welcome_ui/reducers/welcome_reducer_test.ts index 7a7e64487026..4eb32d408d85 100644 --- a/components/test/brave_welcome_ui/reducers/welcome_reducer_test.ts +++ b/components/test/brave_welcome_ui/reducers/welcome_reducer_test.ts @@ -23,10 +23,7 @@ describe('welcomeReducer', () => { }) it('calls storage.load() when initial state is undefined', () => { const assertion = welcomeReducer(undefined, actions.closeTabRequested()) - expect(assertion).toEqual({ - searchProviders: [], - browserProfiles: [] - }) + expect(assertion).toEqual(storage.defaultState) expect(spy).toBeCalled() expect(spy.mock.calls[0][1]).toBe(undefined) }) @@ -125,11 +122,7 @@ describe('welcomeReducer', () => { type: types.IMPORT_DEFAULT_SEARCH_PROVIDERS_SUCCESS, payload: mockSearchProviders }) - const expected = { - ...mockState, - searchProviders: mockSearchProviders - } - expect(result).toEqual(expected) + expect(result.searchProviders).toEqual(mockSearchProviders) }) describe('with the region', () => { @@ -167,7 +160,7 @@ describe('welcomeReducer', () => { expect(spy).toBeCalledWith('countryString') }) - describe('when user is in US/Canada', () => { + describe('when user is in US/Canada/approved regions', () => { it('should NOT filter out the Brave engine', () => { const result = welcomeReducer(mockState, { type: types.IMPORT_DEFAULT_SEARCH_PROVIDERS_SUCCESS, @@ -177,9 +170,9 @@ describe('welcomeReducer', () => { }) }) - describe('when user is NOT in US/Canada', () => { + describe('when user is NOT in US/Canada/approved regions', () => { beforeEach(() => { - countryString = 'GB' + countryString = 'CN' }) afterEach(() => { countryString = 'US' From 5f72f124898a2e032f48b6ccdd45848d65afc0db Mon Sep 17 00:00:00 2001 From: Deep Date: Mon, 4 Oct 2021 01:55:16 -0400 Subject: [PATCH 3/3] Remove onboarding screen for brave default serach engine --- .../chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java index 6a1d6cd32551..7275be0730bd 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java +++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java @@ -121,6 +121,7 @@ import org.chromium.url.GURL; import java.net.URL; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.EnumSet; @@ -132,6 +133,8 @@ public abstract class BraveToolbarLayoutImpl extends ToolbarLayout BraveRewardsObserver, BraveRewardsNativeWorker.PublisherObserver { public static final String PREF_HIDE_BRAVE_REWARDS_ICON = "hide_brave_rewards_icon"; private static final String JAPAN_COUNTRY_CODE = "JP"; + private static final List mBraveSearchEngineDefaultRegions = + Arrays.asList("CA", "DE", "FR", "GB", "US"); private static final long MB_10 = 10000000; private static final long MINUTES_10 = 10 * 60 * 1000; private static final int URL_FOCUS_TOOLBAR_BUTTONS_TRANSLATION_X_DP = 10; @@ -939,12 +942,14 @@ public boolean onLongClick(View v) { @Override public void onUrlFocusChange(boolean hasFocus) { Context context = getContext(); + String countryCode = Locale.getDefault().getCountry(); if (hasFocus && PackageUtils.isFirstInstall(context) && BraveActivity.getBraveActivity() != null && BraveActivity.getBraveActivity().getActivityTab() != null && UrlUtilities.isNTPUrl( BraveActivity.getBraveActivity().getActivityTab().getUrl().getSpec()) - && !OnboardingPrefManager.getInstance().hasSearchEngineOnboardingShown()) { + && !OnboardingPrefManager.getInstance().hasSearchEngineOnboardingShown() + && !mBraveSearchEngineDefaultRegions.contains(countryCode)) { Intent searchActivityIntent = new Intent(context, SearchActivity.class); context.startActivity(searchActivityIntent); }