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 db6840cbe8ba356be7b13afe0c77aa46e9d4d596..734f3cd65a045ffaa09f9092966cd98a93933c08 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 |
@@ -153,6 +153,9 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
tabInfo.setWebContentsObserver(createWebContentsObserver(shownTab.getWebContents())); |
} |
+ // Make sure there is a distillability delegate set on the WebContents. |
+ setDistillabilityCallback(); |
+ |
requestReaderPanelShow(StateChangeReason.UNKNOWN); |
} |
@@ -205,6 +208,8 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
mReaderModePageUrl = tab.getUrl(); |
mReaderModePanel.closePanel(StateChangeReason.CONTENT_CHANGED, true); |
} |
+ // Make sure there is a distillability delegate set on the WebContents. |
+ setDistillabilityCallback(); |
} |
if (tab.getInfoBarContainer() != null) tab.getInfoBarContainer().addObserver(this); |
@@ -297,27 +302,6 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
return new WebContentsObserver(webContents) { |
@Override |
- public void didFinishLoad(long frameId, String validatedUrl, boolean isMainFrame) { |
- if (!isMainFrame) return; |
- if (DomDistillerUrlUtils.isDistilledPage( |
- mTabModelSelector.getTabById(readerTabId).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( |
- mTabModelSelector.getTabById(readerTabId).getUrl())) { |
- return; |
- } |
- updateStatusBasedOnReaderModeCriteria(true); |
- } |
- |
- @Override |
public void didStartProvisionalLoadForFrame(long frameId, long parentFrameId, |
boolean isMainFrame, String validatedUrl, boolean isErrorPage, |
boolean isIframeSrcdoc) { |
@@ -345,8 +329,6 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
mReaderModePageUrl))) { |
mTabStatusMap.get(readerTabId).setStatus(NOT_POSSIBLE); |
mIsUmaRecorded = false; |
- // Do not call updateStatusBasedOnReaderModeCriteria here. |
- // For ADABOOST_MODEL, it is unlikely to get valid info at this event. |
} |
mReaderModePageUrl = null; |
if (mTabStatusMap.containsKey(readerTabId) |
@@ -406,8 +388,9 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
TabModel.TabLaunchType.FROM_LINK, mChromeActivity.getActivityTab()); |
} |
- // 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() { |
Tab currentTab = mTabModelSelector.getCurrentTab(); |
if (currentTab == null || currentTab.getWebContents() == null |
|| currentTab.getContentViewCore() == null) { |
@@ -415,11 +398,14 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
} |
final int readerTabId = currentTab.getId(); |
- DistillablePageUtils.isPageDistillable(currentTab.getWebContents(), |
- currentTab.getContentViewCore().getIsMobileOptimizedHint(), |
- new DistillablePageUtils.PageDistillableCallback() { |
+ if (mTabStatusMap.get(readerTabId).isCallbackSet()) { |
+ return; |
+ } |
+ |
+ DistillablePageUtils.setDelegate(currentTab.getWebContents(), |
+ new DistillablePageUtils.PageDistillableDelegate() { |
@Override |
- public void onIsPageDistillableResult(boolean isDistillable) { |
+ public void onIsPageDistillableResult(boolean isDistillable, boolean isLast) { |
if (!mTabStatusMap.containsKey(readerTabId)) return; |
ReaderModeTabInfo tabInfo = mTabStatusMap.get(readerTabId); |
@@ -437,8 +423,7 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
} else { |
tabInfo.setStatus(NOT_POSSIBLE); |
} |
- if (!mIsUmaRecorded |
- && (tabInfo.getStatus() == POSSIBLE || forceRecord)) { |
+ if (!mIsUmaRecorded && (tabInfo.getStatus() == POSSIBLE || isLast)) { |
mIsUmaRecorded = true; |
RecordHistogram.recordBooleanHistogram( |
"DomDistiller.PageDistillable", |
@@ -446,6 +431,7 @@ public class ReaderModeManager extends TabModelSelectorTabObserver |
} |
} |
}); |
+ mTabStatusMap.get(readerTabId).setIsCallbackSet(true); |
} |
/** |