Commit 815359c5 authored by Brandon Wylie's avatar Brandon Wylie Committed by Commit Bot

[SEC] Factor out metrics functions into new metrics class

This will allow for reuse for related functionality.

Bug: 1001839
Change-Id: I4d14866e453294a4cf911dee0f3ac72eb0c56346
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1814459
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699615}
parent cf1b0cdc
...@@ -1428,6 +1428,7 @@ chrome_java_sources = [ ...@@ -1428,6 +1428,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/rlz/RevenueStats.java", "java/src/org/chromium/chrome/browser/rlz/RevenueStats.java",
"java/src/org/chromium/chrome/browser/rlz/RlzPingHandler.java", "java/src/org/chromium/chrome/browser/rlz/RlzPingHandler.java",
"java/src/org/chromium/chrome/browser/safe_browsing/FileTypePolicies.java", "java/src/org/chromium/chrome/browser/safe_browsing/FileTypePolicies.java",
"java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceMetrics.java",
"java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java", "java/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotification.java",
"java/src/org/chromium/chrome/browser/search_engines/TemplateUrlServiceFactory.java", "java/src/org/chromium/chrome/browser/search_engines/TemplateUrlServiceFactory.java",
"java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java", "java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java",
......
...@@ -177,6 +177,7 @@ chrome_junit_test_java_sources = [ ...@@ -177,6 +177,7 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/preferences/password/SingleThreadBarrierClosureTest.java", "junit/src/org/chromium/chrome/browser/preferences/password/SingleThreadBarrierClosureTest.java",
"junit/src/org/chromium/chrome/browser/preferences/password/TimedCallbackDelayerTest.java", "junit/src/org/chromium/chrome/browser/preferences/password/TimedCallbackDelayerTest.java",
"junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java", "junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java",
"junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceMetricsTest.java",
"junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotificationTest.java", "junit/src/org/chromium/chrome/browser/search_engines/SearchEngineChoiceNotificationTest.java",
"junit/src/org/chromium/chrome/browser/send_tab_to_self/NotificationSharedPrefManagerTest.java", "junit/src/org/chromium/chrome/browser/send_tab_to_self/NotificationSharedPrefManagerTest.java",
"junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfAndroidBridgeTest.java", "junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfAndroidBridgeTest.java",
......
fgorski@chromium.org
# COMPONENT: UI>Browser>Search
# OS: Android
\ No newline at end of file
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.search_engines;
import androidx.annotation.IntDef;
import org.chromium.base.ContextUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.components.search_engines.TemplateUrl;
import org.chromium.components.search_engines.TemplateUrlService;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** Hosts common code for search engine choice metrics reporting. */
public class SearchEngineChoiceMetrics {
/** Key used to store the default Search Engine Type before choice is presented. */
@VisibleForTesting
public static final String PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE =
"search_engine_choice_default_type_before";
/**
* AndroidSearchEngineChoiceEvents defined in tools/metrics/histograms/enums.xml. These values
* are persisted to logs. Entries should not be renumbered and numeric values should never be
* reused.
*/
@IntDef({Events.SNACKBAR_SHOWN, Events.PROMPT_FOLLOWED, Events.SEARCH_ENGINE_CHANGED})
@Retention(RetentionPolicy.SOURCE)
public @interface Events {
int SNACKBAR_SHOWN = 0;
int PROMPT_FOLLOWED = 1;
int SEARCH_ENGINE_CHANGED = 2;
int MAX = 3;
}
/**
* Records an event to the search choice histogram. See {@link Events} and histograms.xml for
* more details.
* @param event The {@link Events} to be reported.
*/
public static void recordEvent(@Events int event) {
RecordHistogram.recordEnumeratedHistogram(
"Android.SearchEngineChoice.Events", event, Events.MAX);
}
/** Records the search engine type before the user made a choice about which engine to use. */
public static void recordSearchEngineTypeBeforeChoice() {
@SearchEngineType
int currentSearchEngineType = getDefaultSearchEngineType();
RecordHistogram.recordEnumeratedHistogram(
"Android.SearchEngineChoice.SearchEngineBeforeChoicePrompt",
currentSearchEngineType, SearchEngineType.SEARCH_ENGINE_MAX);
setPreviousSearchEngineType(currentSearchEngineType);
}
/** Records the search engine type after the user made a choice about which engine to use. */
public static void recordSearchEngineTypeAfterChoice() {
if (!isSearchEnginePossiblyDifferent()) return;
@SearchEngineType
int previousSearchEngineType = getPreviousSearchEngineType();
@SearchEngineType
int currentSearchEngineType = getDefaultSearchEngineType();
if (previousSearchEngineType != currentSearchEngineType) {
recordEvent(Events.SEARCH_ENGINE_CHANGED);
RecordHistogram.recordEnumeratedHistogram(
"Android.SearchEngineChoice.ChosenSearchEngine", currentSearchEngineType,
SearchEngineType.SEARCH_ENGINE_MAX);
}
removePreviousSearchEngineType();
}
/** @return True if the current search engine is possibly different from the previous one. */
static boolean isSearchEnginePossiblyDifferent() {
return ContextUtils.getAppSharedPreferences().contains(
PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE);
}
/** Remove the stored choice from prefs. */
@VisibleForTesting
static void removePreviousSearchEngineType() {
ContextUtils.getAppSharedPreferences()
.edit()
.remove(PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE)
.apply();
}
/** Retrieves the previously set search engine from Android prefs. */
@VisibleForTesting
@SearchEngineType
static int getPreviousSearchEngineType() {
return ContextUtils.getAppSharedPreferences().getInt(
PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE,
SearchEngineType.SEARCH_ENGINE_UNKNOWN);
}
/**
* Sets the current default search engine as the previously set search engine in Android prefs.
*/
@VisibleForTesting
static void setPreviousSearchEngineType(@SearchEngineType int engine) {
ContextUtils.getAppSharedPreferences()
.edit()
.putInt(PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE, engine)
.apply();
}
/** Translates from the default search engine url to the {@link SearchEngineType} int. */
@VisibleForTesting
@SearchEngineType
static int getDefaultSearchEngineType() {
TemplateUrlService templateUrlService = TemplateUrlServiceFactory.get();
TemplateUrl currentSearchEngine = templateUrlService.getDefaultSearchEngineTemplateUrl();
if (currentSearchEngine == null) return SearchEngineType.SEARCH_ENGINE_UNKNOWN;
return templateUrlService.getSearchEngineTypeFromTemplateUrl(
currentSearchEngine.getKeyword());
}
}
...@@ -6,11 +6,9 @@ package org.chromium.chrome.browser.search_engines; ...@@ -6,11 +6,9 @@ package org.chromium.chrome.browser.search_engines;
import android.content.Context; import android.content.Context;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeVersionInfo; import org.chromium.chrome.browser.ChromeVersionInfo;
...@@ -20,11 +18,7 @@ import org.chromium.chrome.browser.preferences.SearchEnginePreference; ...@@ -20,11 +18,7 @@ import org.chromium.chrome.browser.preferences.SearchEnginePreference;
import org.chromium.chrome.browser.snackbar.Snackbar; import org.chromium.chrome.browser.snackbar.Snackbar;
import org.chromium.chrome.browser.snackbar.SnackbarManager; import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
import org.chromium.components.search_engines.TemplateUrl;
import org.chromium.components.search_engines.TemplateUrlService;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
...@@ -40,10 +34,6 @@ public final class SearchEngineChoiceNotification { ...@@ -40,10 +34,6 @@ public final class SearchEngineChoiceNotification {
static final String PREF_SEARCH_ENGINE_CHOICE_PRESENTED_VERSION = static final String PREF_SEARCH_ENGINE_CHOICE_PRESENTED_VERSION =
"search_engine_choice_presented_version"; "search_engine_choice_presented_version";
/** Key used to store the default Search Engine Type before choice is presented. */
static final String PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE =
"search_engine_choice_default_type_before";
/** Variations parameter name for notification snackbar duration (in seconds). */ /** Variations parameter name for notification snackbar duration (in seconds). */
private static final String PARAM_NOTIFICATION_SNACKBAR_DURATION_SECONDS = private static final String PARAM_NOTIFICATION_SNACKBAR_DURATION_SECONDS =
"notification-snackbar-duration-seconds"; "notification-snackbar-duration-seconds";
...@@ -55,18 +45,6 @@ public final class SearchEngineChoiceNotification { ...@@ -55,18 +45,6 @@ public final class SearchEngineChoiceNotification {
private static final String PARAM_NOTIFICATION_INVALIDATING_VERSION_NUMBER = private static final String PARAM_NOTIFICATION_INVALIDATING_VERSION_NUMBER =
"notification-invalidating-version-number"; "notification-invalidating-version-number";
// AndroidSearchEngineChoiceEvents defined in tools/metrics/histograms/enums.xml.
// These values are persisted to logs. Entries should not be renumbered and numeric values
// should never be reused.
@IntDef({Events.SNACKBAR_SHOWN, Events.PROMPT_FOLLOWED, Events.SEARCH_ENGINE_CHANGED})
@Retention(RetentionPolicy.SOURCE)
@interface Events {
int SNACKBAR_SHOWN = 0;
int PROMPT_FOLLOWED = 1;
int SEARCH_ENGINE_CHANGED = 2;
int MAX = 3;
}
/** /**
* Snackbar controller for search engine choice notification. It takes the user to the settings * Snackbar controller for search engine choice notification. It takes the user to the settings
* page responsible for search engine choice, when button is clicked. * page responsible for search engine choice, when button is clicked.
...@@ -81,8 +59,8 @@ public final class SearchEngineChoiceNotification { ...@@ -81,8 +59,8 @@ public final class SearchEngineChoiceNotification {
@Override @Override
public void onAction(Object actionData) { public void onAction(Object actionData) {
PreferencesLauncher.launchSettingsPage(mContext, SearchEnginePreference.class); PreferencesLauncher.launchSettingsPage(mContext, SearchEnginePreference.class);
recordEvent(Events.PROMPT_FOLLOWED); SearchEngineChoiceMetrics.recordEvent(SearchEngineChoiceMetrics.Events.PROMPT_FOLLOWED);
recordSearchEngineTypeBeforeChoicePresented(); SearchEngineChoiceMetrics.recordSearchEngineTypeBeforeChoice();
} }
} }
...@@ -112,27 +90,12 @@ public final class SearchEngineChoiceNotification { ...@@ -112,27 +90,12 @@ public final class SearchEngineChoiceNotification {
if (searchEngineChoiceRequested && !searchEngineChoicePresented) { if (searchEngineChoiceRequested && !searchEngineChoicePresented) {
snackbarManager.showSnackbar(buildSnackbarNotification(context)); snackbarManager.showSnackbar(buildSnackbarNotification(context));
updateSearchEngineChoicePresented(); updateSearchEngineChoicePresented();
recordEvent(Events.SNACKBAR_SHOWN); SearchEngineChoiceMetrics.recordEvent(SearchEngineChoiceMetrics.Events.SNACKBAR_SHOWN);
} else if (isSearchEnginePossiblyDifferent()) { } else {
@SearchEngineType SearchEngineChoiceMetrics.recordSearchEngineTypeAfterChoice();
int previousSearchEngineType = getPreviousSearchEngineType();
@SearchEngineType
int currentSearchEngineType = getDefaultSearchEngineType();
if (previousSearchEngineType != currentSearchEngineType) {
recordEvent(Events.SEARCH_ENGINE_CHANGED);
RecordHistogram.recordEnumeratedHistogram(
"Android.SearchEngineChoice.ChosenSearchEngine", currentSearchEngineType,
SearchEngineType.SEARCH_ENGINE_MAX);
}
removePreviousSearchEngineType();
} }
} }
private static void recordEvent(@Events int event) {
RecordHistogram.recordEnumeratedHistogram(
"Android.SearchEngineChoice.Events", event, Events.MAX);
}
private static Snackbar buildSnackbarNotification(Context context) { private static Snackbar buildSnackbarNotification(Context context) {
int durationSeconds = ChromeFeatureList.getFieldTrialParamByFeatureAsInt( int durationSeconds = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
ChromeFeatureList.ANDROID_SEARCH_ENGINE_CHOICE_NOTIFICATION, ChromeFeatureList.ANDROID_SEARCH_ENGINE_CHOICE_NOTIFICATION,
...@@ -193,46 +156,6 @@ public final class SearchEngineChoiceNotification { ...@@ -193,46 +156,6 @@ public final class SearchEngineChoiceNotification {
PARAM_NOTIFICATION_INVALIDATING_VERSION_NUMBER)); PARAM_NOTIFICATION_INVALIDATING_VERSION_NUMBER));
} }
@SearchEngineType
private static int getDefaultSearchEngineType() {
TemplateUrlService templateUrlService = TemplateUrlServiceFactory.get();
TemplateUrl currentSearchEngine = templateUrlService.getDefaultSearchEngineTemplateUrl();
if (currentSearchEngine == null) return SearchEngineType.SEARCH_ENGINE_UNKNOWN;
return templateUrlService.getSearchEngineTypeFromTemplateUrl(
currentSearchEngine.getKeyword());
}
private static void recordSearchEngineTypeBeforeChoicePresented() {
@SearchEngineType
int currentSearchEngineType = getDefaultSearchEngineType();
RecordHistogram.recordEnumeratedHistogram(
"Android.SearchEngineChoice.SearchEngineBeforeChoicePrompt",
currentSearchEngineType, SearchEngineType.SEARCH_ENGINE_MAX);
ContextUtils.getAppSharedPreferences()
.edit()
.putInt(PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE, currentSearchEngineType)
.apply();
}
private static boolean isSearchEnginePossiblyDifferent() {
return ContextUtils.getAppSharedPreferences().contains(
PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE);
}
@SearchEngineType
private static int getPreviousSearchEngineType() {
return ContextUtils.getAppSharedPreferences().getInt(
PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE,
SearchEngineType.SEARCH_ENGINE_UNKNOWN);
}
private static void removePreviousSearchEngineType() {
ContextUtils.getAppSharedPreferences()
.edit()
.remove(PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE)
.apply();
}
private static int getNotificationSnackbarDuration() { private static int getNotificationSnackbarDuration() {
return ChromeFeatureList.getFieldTrialParamByFeatureAsInt( return ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
ChromeFeatureList.ANDROID_SEARCH_ENGINE_CHOICE_NOTIFICATION, ChromeFeatureList.ANDROID_SEARCH_ENGINE_CHOICE_NOTIFICATION,
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.search_engines;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import android.support.test.filters.SmallTest;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.chromium.base.metrics.test.ShadowRecordHistogram;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.test.support.DisableHistogramsRule;
import org.chromium.components.search_engines.TemplateUrl;
import org.chromium.components.search_engines.TemplateUrlService;
/**
* Unit tests for {@link SearchEngineChoiceMetrics}.
*/
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class})
public final class SearchEngineChoiceMetricsTest {
private static final String TEST_INITIAL_ENGINE = "google.com";
private static final String TEST_ALTERNATIVE_ENGINE = "duckduckgo.com";
private static final String HISTOGRAM_AFTER_CHOICE =
"Android.SearchEngineChoice.ChosenSearchEngine";
@Rule
public DisableHistogramsRule mDisableHistogramsRule = new DisableHistogramsRule();
@Mock
private TemplateUrlService mTemplateUrlService;
@Mock
private TemplateUrl mInitialSearchEngine;
@Mock
private TemplateUrl mAlternativeSearchEngine;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
ShadowRecordHistogram.reset();
// Sets up appropriate responses from Template URL service.
TemplateUrlServiceFactory.setInstanceForTesting(mTemplateUrlService);
doReturn(TEST_ALTERNATIVE_ENGINE).when(mAlternativeSearchEngine).getKeyword();
doReturn(SearchEngineType.SEARCH_ENGINE_DUCKDUCKGO)
.when(mTemplateUrlService)
.getSearchEngineTypeFromTemplateUrl(TEST_ALTERNATIVE_ENGINE);
doReturn(TEST_INITIAL_ENGINE).when(mInitialSearchEngine).getKeyword();
doReturn(SearchEngineType.SEARCH_ENGINE_GOOGLE)
.when(mTemplateUrlService)
.getSearchEngineTypeFromTemplateUrl(TEST_INITIAL_ENGINE);
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
}
@Test
@SmallTest
public void recordSearchEngineTypeBeforeChoice() {
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
SearchEngineChoiceMetrics.recordSearchEngineTypeBeforeChoice();
assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.SearchEngineBeforeChoicePrompt",
SearchEngineType.SEARCH_ENGINE_GOOGLE));
doReturn(mAlternativeSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
SearchEngineChoiceMetrics.recordSearchEngineTypeBeforeChoice();
assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.SearchEngineBeforeChoicePrompt",
SearchEngineType.SEARCH_ENGINE_DUCKDUCKGO));
}
@Test
@SmallTest
public void recordSearchEngineTypeAfterChoice() {
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
SearchEngineChoiceMetrics.setPreviousSearchEngineType(
SearchEngineChoiceMetrics.getDefaultSearchEngineType());
doReturn(mAlternativeSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
SearchEngineChoiceMetrics.recordSearchEngineTypeAfterChoice();
assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting(
HISTOGRAM_AFTER_CHOICE, SearchEngineType.SEARCH_ENGINE_DUCKDUCKGO));
}
@Test
@SmallTest
public void recordSearchEngineTypeAfterChoice_noChoice() {
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
SearchEngineChoiceMetrics.setPreviousSearchEngineType(
SearchEngineChoiceMetrics.getDefaultSearchEngineType());
SearchEngineChoiceMetrics.recordSearchEngineTypeAfterChoice();
assertEquals(0,
ShadowRecordHistogram.getHistogramValueCountForTesting(
HISTOGRAM_AFTER_CHOICE, SearchEngineType.SEARCH_ENGINE_GOOGLE));
}
@Test
@SmallTest
public void getDefaultSearchEngineType() {
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
assertEquals(SearchEngineType.SEARCH_ENGINE_GOOGLE,
SearchEngineChoiceMetrics.getDefaultSearchEngineType());
doReturn(mAlternativeSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
assertEquals(SearchEngineType.SEARCH_ENGINE_DUCKDUCKGO,
SearchEngineChoiceMetrics.getDefaultSearchEngineType());
}
@Test
@SmallTest
public void isSearchEnginePossiblyDifferent() {
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
SearchEngineChoiceMetrics.setPreviousSearchEngineType(
SearchEngineChoiceMetrics.getDefaultSearchEngineType());
assertTrue(SearchEngineChoiceMetrics.isSearchEnginePossiblyDifferent());
}
@Test
@SmallTest
public void isSearchEnginePossiblyDifferent_notDifferent() {
doReturn(mInitialSearchEngine)
.when(mTemplateUrlService)
.getDefaultSearchEngineTemplateUrl();
assertFalse(SearchEngineChoiceMetrics.isSearchEnginePossiblyDifferent());
}
}
...@@ -123,7 +123,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -123,7 +123,7 @@ public final class SearchEngineChoiceNotificationTest {
assertEquals(0, assertEquals(0,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SNACKBAR_SHOWN)); SearchEngineChoiceMetrics.Events.SNACKBAR_SHOWN));
} }
@Test @Test
...@@ -138,7 +138,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -138,7 +138,7 @@ public final class SearchEngineChoiceNotificationTest {
assertEquals("We are expecting exactly one snackbar shown event.", 1, assertEquals("We are expecting exactly one snackbar shown event.", 1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SNACKBAR_SHOWN)); SearchEngineChoiceMetrics.Events.SNACKBAR_SHOWN));
assertTrue("Version of the app should be persisted upon prompting.", assertTrue("Version of the app should be persisted upon prompting.",
ContextUtils.getAppSharedPreferences().contains( ContextUtils.getAppSharedPreferences().contains(
...@@ -162,8 +162,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -162,8 +162,7 @@ public final class SearchEngineChoiceNotificationTest {
SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager); SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager);
assertFalse("Second call removes the preference for search engine choice before.", assertFalse("Second call removes the preference for search engine choice before.",
ContextUtils.getAppSharedPreferences().contains( ContextUtils.getAppSharedPreferences().contains(
SearchEngineChoiceNotification SearchEngineChoiceMetrics.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager); SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager);
...@@ -172,7 +171,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -172,7 +171,7 @@ public final class SearchEngineChoiceNotificationTest {
assertEquals(1, assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SNACKBAR_SHOWN)); SearchEngineChoiceMetrics.Events.SNACKBAR_SHOWN));
} }
@Test @Test
...@@ -186,7 +185,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -186,7 +185,7 @@ public final class SearchEngineChoiceNotificationTest {
assertEquals(1, assertEquals(1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.PROMPT_FOLLOWED)); SearchEngineChoiceMetrics.Events.PROMPT_FOLLOWED));
verify(mContext, times(1)).startActivity(any(Intent.class), isNull()); verify(mContext, times(1)).startActivity(any(Intent.class), isNull());
} }
...@@ -204,13 +203,12 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -204,13 +203,12 @@ public final class SearchEngineChoiceNotificationTest {
assertFalse( assertFalse(
"First handleSearchEngineChoice call after prompt removes SE choice before pref.", "First handleSearchEngineChoice call after prompt removes SE choice before pref.",
ContextUtils.getAppSharedPreferences().contains( ContextUtils.getAppSharedPreferences().contains(
SearchEngineChoiceNotification SearchEngineChoiceMetrics.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
assertEquals(0, assertEquals(0,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SEARCH_ENGINE_CHANGED)); SearchEngineChoiceMetrics.Events.SEARCH_ENGINE_CHANGED));
assertEquals(0, assertEquals(0,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.ChosenSearchEngine", "Android.SearchEngineChoice.ChosenSearchEngine",
...@@ -230,8 +228,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -230,8 +228,7 @@ public final class SearchEngineChoiceNotificationTest {
assertFalse( assertFalse(
"First handleSearchEngineChoice call after prompt removes SE choice before pref.", "First handleSearchEngineChoice call after prompt removes SE choice before pref.",
ContextUtils.getAppSharedPreferences().contains( ContextUtils.getAppSharedPreferences().contains(
SearchEngineChoiceNotification SearchEngineChoiceMetrics.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
doReturn(mAlternativeSearchEngine) doReturn(mAlternativeSearchEngine)
.when(mTemplateUrlService) .when(mTemplateUrlService)
...@@ -241,7 +238,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -241,7 +238,7 @@ public final class SearchEngineChoiceNotificationTest {
assertEquals(0, assertEquals(0,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SEARCH_ENGINE_CHANGED)); SearchEngineChoiceMetrics.Events.SEARCH_ENGINE_CHANGED));
assertEquals(0, assertEquals(0,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.ChosenSearchEngine", "Android.SearchEngineChoice.ChosenSearchEngine",
...@@ -265,7 +262,7 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -265,7 +262,7 @@ public final class SearchEngineChoiceNotificationTest {
assertEquals("Event is recorded when search engine was changed.", 1, assertEquals("Event is recorded when search engine was changed.", 1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SEARCH_ENGINE_CHANGED)); SearchEngineChoiceMetrics.Events.SEARCH_ENGINE_CHANGED));
assertEquals("Newly chosen search engine type should be recoreded.", 1, assertEquals("Newly chosen search engine type should be recoreded.", 1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.ChosenSearchEngine", "Android.SearchEngineChoice.ChosenSearchEngine",
...@@ -274,15 +271,14 @@ public final class SearchEngineChoiceNotificationTest { ...@@ -274,15 +271,14 @@ public final class SearchEngineChoiceNotificationTest {
assertFalse( assertFalse(
"First handleSearchEngineChoice call after prompt removes SE choice before pref.", "First handleSearchEngineChoice call after prompt removes SE choice before pref.",
ContextUtils.getAppSharedPreferences().contains( ContextUtils.getAppSharedPreferences().contains(
SearchEngineChoiceNotification SearchEngineChoiceMetrics.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
.PREF_SEARCH_ENGINE_CHOICE_DEFAULT_TYPE_BEFORE));
SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager); SearchEngineChoiceNotification.handleSearchEngineChoice(mContext, mSnackbarManager);
assertEquals("Event should only be recorded once, therefore count should be still 1.", 1, assertEquals("Event should only be recorded once, therefore count should be still 1.", 1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
"Android.SearchEngineChoice.Events", "Android.SearchEngineChoice.Events",
SearchEngineChoiceNotification.Events.SEARCH_ENGINE_CHANGED)); SearchEngineChoiceMetrics.Events.SEARCH_ENGINE_CHANGED));
assertEquals("New Search Engine shoudl only be reported once, therefore count should be 1", assertEquals("New Search Engine shoudl only be reported once, therefore count should be 1",
1, 1,
ShadowRecordHistogram.getHistogramValueCountForTesting( ShadowRecordHistogram.getHistogramValueCountForTesting(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment