| Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java | 
| index 82b0d37d7c9e25e25badfb4c090e613bfeec7918..2620311b2d42aa68c489c0deae2d59be36336d83 100644 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java | 
| @@ -87,6 +87,7 @@ import org.chromium.chrome.browser.metrics.StartupMetrics; | 
| import org.chromium.chrome.browser.metrics.UmaSessionStats; | 
| import org.chromium.chrome.browser.metrics.UmaUtils; | 
| import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; | 
| +import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; | 
| import org.chromium.chrome.browser.nfc.BeamController; | 
| import org.chromium.chrome.browser.nfc.BeamProvider; | 
| import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; | 
| @@ -101,6 +102,7 @@ import org.chromium.chrome.browser.printing.PrintShareActivity; | 
| import org.chromium.chrome.browser.printing.TabPrinter; | 
| import org.chromium.chrome.browser.profiles.Profile; | 
| import org.chromium.chrome.browser.share.ShareHelper; | 
| +import org.chromium.chrome.browser.snackbar.DataReductionPromoSnackbarController; | 
| import org.chromium.chrome.browser.snackbar.DataUseSnackbarController; | 
| import org.chromium.chrome.browser.snackbar.SnackbarManager; | 
| import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable; | 
| @@ -222,6 +224,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity | 
| private ReaderModeManager mReaderModeManager; | 
| private SnackbarManager mSnackbarManager; | 
| private DataUseSnackbarController mDataUseSnackbarController; | 
| +    private DataReductionPromoSnackbarController mDataReductionPromoSnackbarController; | 
| private AppMenuPropertiesDelegate mAppMenuPropertiesDelegate; | 
| private AppMenuHandler mAppMenuHandler; | 
| private ToolbarManager mToolbarManager; | 
| @@ -472,6 +475,19 @@ public abstract class ChromeActivity extends AsyncInitializationActivity | 
| && DataUseTabUIManager.checkAndResetDataUseTrackingEnded(tab)) { | 
| mDataUseSnackbarController.showDataUseTrackingEndedBar(); | 
| } | 
| + | 
| +                // Only alert about data savings once the first paint has happened. It doesn't make | 
| +                // sense to show a snackbar about savings when nothing has been displayed yet. | 
| +                if (DataReductionProxySettings.getInstance().isSnackbarPromoAllowed(tab.getUrl())) { | 
| +                    if (mDataReductionPromoSnackbarController == null) { | 
| +                        mDataReductionPromoSnackbarController = | 
| +                                new DataReductionPromoSnackbarController( | 
| +                                        getApplicationContext(), getSnackbarManager()); | 
| +                    } | 
| +                    mDataReductionPromoSnackbarController.maybeShowDataReductionPromoSnackbar( | 
| +                            DataReductionProxySettings.getInstance() | 
| +                                    .getTotalHttpContentLengthSaved()); | 
| +                } | 
| } | 
|  | 
| @Override | 
|  |