Index: chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModePanel.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModePanel.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModePanel.java |
index 1110645ca60bf41b1a4bad35becffc5151d09414..4ee22d435441b11cce2a4f3762aa88f67c1245fb 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModePanel.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModePanel.java |
@@ -154,6 +154,8 @@ public class ReaderModePanel implements ChromeAnimation.Animatable<ReaderModePan |
private WebContentsObserver mDistilledContentObserver; |
private boolean mDidFirstNonEmptyDistilledPaint; |
private ReaderModePanelLayoutDelegate mLayoutDelegate; |
+ private WebContents mOriginalWebContent; |
+ private WebContentsObserver mOriginalContentObserver; |
private float mLayoutWidth; |
private float mLayoutHeight; |
@@ -546,7 +548,9 @@ public class ReaderModePanel implements ChromeAnimation.Animatable<ReaderModePan |
public boolean isReaderModeCurrentlyAllowed() { |
return !mIsReaderModePanelHidden && !mIsReaderModePanelDismissed |
&& !mIsFullscreenModeEntered && !mIsInfobarContainerShown |
+ && mReaderModeHost.getTab() != null |
&& mReaderModeHost.getTab().getContentViewCore() != null |
+ && mReaderModeHost.getTab().getContentViewCore().getContext() != null |
&& mReaderModeHost.getTab().getWebContents() != null; |
} |
@@ -607,6 +611,7 @@ public class ReaderModePanel implements ChromeAnimation.Animatable<ReaderModePan |
&& (status != ReaderModeManager.POSSIBLE || !isReaderModeCurrentlyAllowed())) { |
animateTo(0.0f, -1.0f, true); |
mReaderModeHost.destroyReaderModeControl(); |
+ destroyCachedOriginalWebContent(); |
destroyDistilledContentViewCore(); |
requestUpdate(); |
return; |
@@ -654,12 +659,17 @@ public class ReaderModePanel implements ChromeAnimation.Animatable<ReaderModePan |
mDidFirstNonEmptyDistilledPaint = false; |
mDidStartLoad = false; |
mDidFinishLoad = false; |
+ |
+ destroyCachedOriginalWebContent(); |
+ mOriginalWebContent = mReaderModeHost.getTab().getWebContents(); |
+ mOriginalContentObserver = new WebContentsObserver(mOriginalWebContent) { |
+ }; |
+ |
mDistilledContentViewCore = createDistillerContentViewCore( |
mReaderModeHost.getTab().getContentViewCore().getContext(), |
mReaderModeHost.getTab().getWindowAndroid()); |
- mergeNavigationHistory(mDistilledContentViewCore.getWebContents(), |
- mReaderModeHost.getTab().getWebContents()); |
+ mergeNavigationHistory(mDistilledContentViewCore.getWebContents(), mOriginalWebContent); |
mDistilledContentObserver = new WebContentsObserver( |
mDistilledContentViewCore.getWebContents()) { |
@@ -723,7 +733,7 @@ public class ReaderModePanel implements ChromeAnimation.Animatable<ReaderModePan |
mDistilledContentObserver = null; |
mDistilledContentViewCore.setContentViewClient(new ContentViewClient()); |
- mReaderModeHost.getTab().swapContentViewCore(mDistilledContentViewCore, true, |
+ mReaderModeHost.getTab().swapContentViewCore(mDistilledContentViewCore, false, |
mDidStartLoad, mDidFinishLoad); |
mDistilledContentViewCore.getContentViewClient().onOffsetsForFullscreenChanged( |
mTopControlsOffsetYPix, mContentOffsetYPix, mOverdrawBottomHeightPix); |
@@ -739,6 +749,17 @@ public class ReaderModePanel implements ChromeAnimation.Animatable<ReaderModePan |
updateBottomButtonBar(); |
} |
+ private void destroyCachedOriginalWebContent() { |
+ if (mOriginalContentObserver != null) { |
+ mOriginalContentObserver.destroy(); |
+ mOriginalContentObserver = null; |
+ } |
+ if (mOriginalWebContent != null) { |
+ mOriginalWebContent.destroy(); |
+ mOriginalWebContent = null; |
+ } |
+ } |
+ |
private void destroyDistilledContentViewCore() { |
if (mDistilledContentObserver != null) { |
mDistilledContentObserver.destroy(); |