| Index: chrome/android/javatests/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarControllerTest.java | 
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarControllerTest.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..fcb6076f3e2a86675158861affc8e963da5b70a5 | 
| --- /dev/null | 
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/snackbar/DataReductionPromoSnackbarControllerTest.java | 
| @@ -0,0 +1,149 @@ | 
| +// Copyright 2016 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.snackbar; | 
| + | 
| +import android.test.UiThreadTest; | 
| +import android.test.suitebuilder.annotation.MediumTest; | 
| + | 
| +import org.chromium.base.ContextUtils; | 
| +import org.chromium.base.metrics.RecordHistogram; | 
| +import org.chromium.base.test.util.CommandLineFlags; | 
| +import org.chromium.chrome.browser.preferences.datareduction.DataReductionPromoUtils; | 
| +import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyUma; | 
| +import org.chromium.chrome.test.ChromeTabbedActivityTestBase; | 
| + | 
| +/** | 
| + * Tests the DataReductionPromoSnackbarController. Tests that the snackbar sizes are properly set | 
| + * from a field trial param and that the correct uma is recorded. | 
| + */ | 
| +public class DataReductionPromoSnackbarControllerTest extends ChromeTabbedActivityTestBase { | 
| + | 
| +    private static final int BYTES_IN_MB = 1024 * 1024; | 
| +    private static final int FIRST_SNACKBAR_SIZE_MB = 100; | 
| +    private static final int SECOND_SNACKBAR_SIZE_MB = 1024; | 
| +    private static final String FIRST_SNACKBAR_SIZE_STRING = "100 MB"; | 
| +    private static final String SECOND_SNACKBAR_SIZE_STRING = "1 GB"; | 
| + | 
| +    private SnackbarManager mManager; | 
| +    private DataReductionPromoSnackbarController mController; | 
| + | 
| +    @Override | 
| +    public void startMainActivity() throws InterruptedException { | 
| +        ContextUtils.getAppSharedPreferences().edit().clear().apply(); | 
| +        SnackbarManager.setDurationForTesting(1000); | 
| +        startMainActivityOnBlankPage(); | 
| +        mManager = getActivity().getSnackbarManager(); | 
| +        mController = new DataReductionPromoSnackbarController(getActivity(), mManager); | 
| +    } | 
| + | 
| +    @UiThreadTest | 
| +    @MediumTest | 
| +    @CommandLineFlags.Add({ | 
| +            "force-fieldtrials=" + DataReductionPromoSnackbarController.PROMO_FIELD_TRIAL_NAME | 
| +                    + "/Enabled", | 
| +            "force-fieldtrial-params=" + DataReductionPromoSnackbarController.PROMO_FIELD_TRIAL_NAME | 
| +                    + ".Enabled:" | 
| +                    + DataReductionPromoSnackbarController.PROMO_PARAM_NAME + "/" | 
| +                    + FIRST_SNACKBAR_SIZE_MB + ";" | 
| +                    + SECOND_SNACKBAR_SIZE_MB }) | 
| +    public void testDataReductionPromoSnackbarController() { | 
| +        assertFalse(DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingSavedBytes()); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(0); | 
| + | 
| +        assertFalse(mManager.isShowing()); | 
| +        assertTrue(DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingSavedBytes()); | 
| +        assertEquals(0, DataReductionPromoUtils.getDisplayedSnackbarPromoSavedBytes()); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(FIRST_SNACKBAR_SIZE_MB * BYTES_IN_MB); | 
| + | 
| +        assertTrue(mManager.isShowing()); | 
| +        assertTrue(mManager.getCurrentSnackbarForTesting().getText().toString() | 
| +                .endsWith(FIRST_SNACKBAR_SIZE_STRING)); | 
| +        assertEquals(FIRST_SNACKBAR_SIZE_MB * BYTES_IN_MB, | 
| +                DataReductionPromoUtils.getDisplayedSnackbarPromoSavedBytes()); | 
| +        mManager.dismissSnackbars(mController); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB); | 
| + | 
| +        assertTrue(mManager.isShowing()); | 
| + | 
| +        assertTrue(mManager.getCurrentSnackbarForTesting().getText().toString() | 
| +                .endsWith(SECOND_SNACKBAR_SIZE_STRING)); | 
| +        assertEquals(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB, | 
| +                DataReductionPromoUtils.getDisplayedSnackbarPromoSavedBytes()); | 
| +    } | 
| + | 
| +    @UiThreadTest | 
| +    @MediumTest | 
| +    @CommandLineFlags.Add({ | 
| +            "force-fieldtrials=" + DataReductionPromoSnackbarController.PROMO_FIELD_TRIAL_NAME | 
| +                    + "/Enabled", | 
| +            "force-fieldtrial-params=" + DataReductionPromoSnackbarController.PROMO_FIELD_TRIAL_NAME | 
| +                    + ".Enabled:" | 
| +                    + DataReductionPromoSnackbarController.PROMO_PARAM_NAME + "/" | 
| +                    + FIRST_SNACKBAR_SIZE_MB + ";" | 
| +                    + SECOND_SNACKBAR_SIZE_MB }) | 
| +    public void testDataReductionPromoSnackbarControllerExistingUser() { | 
| +        assertFalse(DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingSavedBytes()); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB); | 
| + | 
| +        assertFalse(mManager.isShowing()); | 
| +        assertTrue(DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingSavedBytes()); | 
| +        assertEquals(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB, | 
| +                DataReductionPromoUtils.getDisplayedSnackbarPromoSavedBytes()); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB + 1); | 
| + | 
| +        assertFalse(mManager.isShowing()); | 
| +        assertEquals(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB, | 
| +                DataReductionPromoUtils.getDisplayedSnackbarPromoSavedBytes()); | 
| +    } | 
| + | 
| +    @UiThreadTest | 
| +    @MediumTest | 
| +    @CommandLineFlags.Add({ | 
| +            "force-fieldtrials=" + DataReductionPromoSnackbarController.PROMO_FIELD_TRIAL_NAME | 
| +                    + "/Enabled", | 
| +            "force-fieldtrial-params=" + DataReductionPromoSnackbarController.PROMO_FIELD_TRIAL_NAME | 
| +                    + ".Enabled:" | 
| +                    + DataReductionPromoSnackbarController.PROMO_PARAM_NAME + "/" | 
| +                    + FIRST_SNACKBAR_SIZE_MB + ";" | 
| +                    + SECOND_SNACKBAR_SIZE_MB }) | 
| +    public void testDataReductionPromoSnackbarControllerHistograms() { | 
| +        assertFalse(DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingSavedBytes()); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(0); | 
| + | 
| +        assertTrue(DataReductionPromoUtils.hasSnackbarPromoBeenInitWithStartingSavedBytes()); | 
| +        assertEquals(0, RecordHistogram | 
| +                .getHistogramValueCountForTesting(DataReductionProxyUma.SNACKBAR_HISTOGRAM_NAME, | 
| +                        0)); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(FIRST_SNACKBAR_SIZE_MB * BYTES_IN_MB); | 
| + | 
| +        assertTrue(mManager.isShowing()); | 
| +        assertEquals(1, RecordHistogram | 
| +                .getHistogramValueCountForTesting(DataReductionProxyUma.SNACKBAR_HISTOGRAM_NAME, | 
| +                        FIRST_SNACKBAR_SIZE_MB)); | 
| +        mManager.getCurrentSnackbarForTesting().getController().onDismissNoAction(null); | 
| +        assertEquals(1, RecordHistogram | 
| +                .getHistogramValueCountForTesting(DataReductionProxyUma.UI_ACTION_HISTOGRAM_NAME, | 
| +                        DataReductionProxyUma.ACTION_SNACKBAR_DISMISSED)); | 
| + | 
| +        mController.maybeShowDataReductionPromoSnackbar(SECOND_SNACKBAR_SIZE_MB * BYTES_IN_MB); | 
| + | 
| +        assertTrue(mManager.isShowing()); | 
| +        assertEquals(1, RecordHistogram | 
| +                .getHistogramValueCountForTesting(DataReductionProxyUma.SNACKBAR_HISTOGRAM_NAME, | 
| +                        SECOND_SNACKBAR_SIZE_MB)); | 
| +        mManager.getCurrentSnackbarForTesting().getController().onAction(null); | 
| +        // The dismissed histogram should not have been incremented. | 
| +        assertEquals(1, RecordHistogram | 
| +                .getHistogramValueCountForTesting(DataReductionProxyUma.UI_ACTION_HISTOGRAM_NAME, | 
| +                        DataReductionProxyUma.ACTION_SNACKBAR_DISMISSED)); | 
| +    } | 
| +} | 
|  |