Index: chrome/android/java/src/org/chromium/chrome/browser/snackbar/LofiBarController.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LofiBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LofiBarController.java |
index 5cdc56195077ad3d34e36a1aa67e215325af7e2d..6906a853cb358f2b64947d3309d5798a4ba8ee52 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LofiBarController.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/LofiBarController.java |
@@ -32,6 +32,7 @@ public class LofiBarController implements SnackbarManager.SnackbarController { |
private final Context mContext; |
private final boolean mDisabled; |
private Tab mTab; |
+ private TabObserver mTabObserver; |
private boolean mLoFiPopupShownForPageLoad = false; |
/** |
@@ -70,21 +71,11 @@ public class LofiBarController implements SnackbarManager.SnackbarController { |
showLoFiBar(tab, isPreview); |
tab.removeObserver(this); |
} |
- |
- @Override |
- public void onHidden(Tab tab) { |
- dismissLoFiBar(); |
- } |
- |
- @Override |
- public void onDestroyed(Tab tab) { |
- dismissLoFiBar(); |
- } |
}; |
tab.addObserver(tabObserver); |
- return; |
+ } else { |
+ showLoFiBar(tab, isPreview); |
} |
- showLoFiBar(tab, isPreview); |
} |
/** |
@@ -93,6 +84,31 @@ public class LofiBarController implements SnackbarManager.SnackbarController { |
private void showLoFiBar(Tab tab, boolean isPreview) { |
if (mDisabled) return; |
mTab = tab; |
+ |
+ mTabObserver = new EmptyTabObserver() { |
+ @Override |
+ public void onHidden(Tab tab) { |
+ dismissLoFiBar(); |
+ } |
+ |
+ @Override |
+ public void onDestroyed(Tab tab) { |
+ dismissLoFiBar(); |
+ } |
+ |
+ @Override |
+ public void onDidStartProvisionalLoadForFrame(Tab tab, long frameId, |
+ long parentFrameId, boolean isMainFrame, String validatedUrl, |
+ boolean isErrorPage, boolean isIframeSrcdoc) { |
+ // When a provisional load is started for the main frame, the boolean storing if |
+ // the Lo-Fi snackbar has been shown is reset. If there was a previous Lo-Fi |
+ // snackbar showing, remove it. |
+ if (isMainFrame) dismissLoFiBar(); |
+ } |
+ |
+ }; |
+ tab.addObserver(mTabObserver); |
+ |
String message = mContext |
.getString(isPreview ? R.string.data_reduction_lo_fi_preview_snackbar_message |
: R.string.data_reduction_lo_fi_snackbar_message); |
@@ -113,15 +129,24 @@ public class LofiBarController implements SnackbarManager.SnackbarController { |
* Dismisses the snackbar. |
*/ |
private void dismissLoFiBar() { |
+ removeTabObserver(); |
if (mSnackbarManager.isShowing()) mSnackbarManager.dismissSnackbars(this); |
} |
/** |
+ * Removes the TabObserver. |
+ */ |
+ private void removeTabObserver() { |
+ mTab.removeObserver(mTabObserver); |
+ mTabObserver = null; |
+ } |
+ |
+ /** |
* Reloads the page showing all images. |
*/ |
@Override |
public void onAction(Object actionData) { |
- mSnackbarManager.dismissSnackbars(this); |
+ removeTabObserver(); |
if (actionData == null) return; |
int snackbarType = (int) actionData; |
@@ -143,5 +168,7 @@ public class LofiBarController implements SnackbarManager.SnackbarController { |
} |
@Override |
- public void onDismissNoAction(Object actionData) {} |
+ public void onDismissNoAction(Object actionData) { |
+ removeTabObserver(); |
+ } |
} |