Index: chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java |
index 43d17175731ece906cb2c591d73696a62ede99d7..9355a6934f1b94afcb6a2f566650db75d1d2bde8 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java |
@@ -81,6 +81,8 @@ public class ReaderModeManager extends EmptyTabObserver |
*/ |
private boolean mIsUmaRecorded; |
+ private boolean mIsCallbackSet; |
+ |
private WebContentsObserver mWebContentsObserver; |
private final Tab mTab; |
@@ -100,6 +102,7 @@ public class ReaderModeManager extends EmptyTabObserver |
? ApiCompatibilityUtils.getColor( |
context.getResources(), R.color.reader_mode_header_bg) |
: 0; |
+ mIsCallbackSet = false; |
} |
/** |
@@ -247,21 +250,6 @@ public class ReaderModeManager extends EmptyTabObserver |
private WebContentsObserver createWebContentsObserver(WebContents webContents) { |
return new WebContentsObserver(webContents) { |
@Override |
- public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) { |
- if (!isMainFrame) return; |
- if (DomDistillerUrlUtils.isDistilledPage(mTab.getUrl())) return; |
- updateStatusBasedOnReaderModeCriteria(true); |
- } |
- |
- @Override |
- public void didFailLoad(boolean isProvisionalLoad, boolean isMainFrame, int errorCode, |
- String description, String failingUrl, boolean wasIgnoredByHandler) { |
- if (!isMainFrame) return; |
- if (DomDistillerUrlUtils.isDistilledPage(mTab.getUrl())) return; |
- updateStatusBasedOnReaderModeCriteria(true); |
- } |
- |
- @Override |
public void didStartProvisionalLoadForFrame(long frameId, long parentFrameId, |
boolean isMainFrame, String validatedUrl, boolean isErrorPage, |
boolean isIframeSrcdoc) { |
@@ -288,8 +276,7 @@ public class ReaderModeManager extends EmptyTabObserver |
mReaderModePageUrl))) { |
mReaderModeStatus = NOT_POSSIBLE; |
mIsUmaRecorded = false; |
- // Do not call updateStatusBasedOnReaderModeCriteria here. |
- // For ADABOOST_MODEL, it is unlikely to get valid info at this event. |
+ if (!mIsCallbackSet) setDistillabilityCallback(); |
} |
mReaderModePageUrl = null; |
sendReaderModeStatusChangedNotification(); |
@@ -297,22 +284,22 @@ public class ReaderModeManager extends EmptyTabObserver |
}; |
} |
- // Updates reader mode status based on whether or not the page should be viewed in reader mode. |
- private void updateStatusBasedOnReaderModeCriteria(final boolean forceRecord) { |
+ // Set the callback for updating reader mode status based on whether or not the page should |
+ // be viewed in reader mode. |
+ private void setDistillabilityCallback() { |
if (mTab.getWebContents() == null) return; |
if (mTab.getContentViewCore() == null) return; |
- DistillablePageUtils.isPageDistillable(mTab.getWebContents(), |
- mTab.getContentViewCore().getIsMobileOptimizedHint(), |
+ DistillablePageUtils.setCallback(mTab.getWebContents(), |
new DistillablePageUtils.PageDistillableCallback() { |
@Override |
- public void onIsPageDistillableResult(boolean isDistillable) { |
+ public void onIsPageDistillableResult(boolean isDistillable, boolean isLast) { |
if (isDistillable) { |
mReaderModeStatus = POSSIBLE; |
} else { |
mReaderModeStatus = NOT_POSSIBLE; |
} |
- if (!mIsUmaRecorded && (mReaderModeStatus == POSSIBLE || forceRecord)) { |
+ if (!mIsUmaRecorded && (mReaderModeStatus == POSSIBLE || isLast)) { |
mIsUmaRecorded = true; |
RecordHistogram.recordBooleanHistogram( |
"DomDistiller.PageDistillable", mReaderModeStatus == POSSIBLE); |
@@ -320,6 +307,7 @@ public class ReaderModeManager extends EmptyTabObserver |
sendReaderModeStatusChangedNotification(); |
} |
}); |
+ mIsCallbackSet = true; |
} |
private void sendReaderModeStatusChangedNotification() { |