| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java | 
| index 23e115f2a52abf5b5c1cba05939f8efc06fbd396..619b0e1dc4d2821df067bd502e03913b58d7c926 100644 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java | 
| @@ -12,8 +12,12 @@ import android.widget.TextView; | 
| import org.chromium.base.ApiCompatibilityUtils; | 
| import org.chromium.base.annotations.CalledByNative; | 
| import org.chromium.chrome.R; | 
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; | 
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason; | 
| import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; | 
| import org.chromium.chrome.browser.tab.Tab; | 
| +import org.chromium.content_public.browser.WebContents; | 
| +import org.chromium.content_public.browser.WebContentsObserver; | 
|  | 
| /** | 
| * This is the InfoBar implementation of the Reader Mode UI. This is used in place of the | 
| @@ -23,6 +27,12 @@ public class ReaderModeInfoBar extends InfoBar { | 
| /** A handle to the {@link ReaderModeManager} to trigger page navigations. */ | 
| private static ReaderModeManager sManager; | 
|  | 
| +    /** A {@link WebContentsObserver} to watch for page navigations. */ | 
| +    private WebContentsObserver mWebContentsObserver; | 
| + | 
| +    /** The {@link WebContents} that this infobar is operating on. */ | 
| +    private WebContents mWebContents; | 
| + | 
| /** | 
| * Default constructor. | 
| */ | 
| @@ -46,20 +56,53 @@ public class ReaderModeInfoBar extends InfoBar { | 
| ApiCompatibilityUtils.getColor(layout.getResources(), R.color.default_text_color)); | 
| prompt.setGravity(Gravity.CENTER_VERTICAL); | 
|  | 
| +        mWebContentsObserver = new WebContentsObserver() { | 
| +            @Override | 
| +            public void didStartNavigation(String url, boolean isInMainFrame, | 
| +                    boolean isSameDocument, boolean isErrorPage) { | 
| +                if (!isInMainFrame) return; | 
| + | 
| +                // If a navigation was triggered close this infobar. | 
| +                nativeHide(getNativeInfoBarPtr()); | 
| +                destroyWebContentsObserver(); | 
| +            } | 
| +        }; | 
| + | 
| +        mWebContents = sManager.getBasePageWebContents(); | 
| +        sManager.getBasePageWebContents().addObserver(mWebContentsObserver); | 
| + | 
| prompt.setOnClickListener(new View.OnClickListener() { | 
| @Override | 
| public void onClick(View v) { | 
| -                // TODO(mdjones): Trigger navigation from manager. | 
| +                destroyWebContentsObserver(); | 
| +                sManager.navigateToReaderMode(); | 
| } | 
| }); | 
|  | 
| layout.addContent(prompt, 1f); | 
| } | 
|  | 
| +    @Override | 
| public void onCloseButtonClicked() { | 
| super.onCloseButtonClicked(); | 
| +        destroyWebContentsObserver(); | 
| +        sManager.onClosed(StateChangeReason.CLOSE_BUTTON); | 
| +    } | 
| + | 
| +    /** | 
| +     * Detach and null the infobar's web contents observer. | 
| +     */ | 
| +    private void destroyWebContentsObserver() { | 
| +        if (mWebContentsObserver == null) return; | 
|  | 
| -        // TODO(mdjones): Notifiy the manager that the infobar was closed. | 
| +        mWebContents.removeObserver(mWebContentsObserver); | 
| +        mWebContentsObserver = null; | 
| +    } | 
| + | 
| +    @Override | 
| +    protected void onNativeDestroyed() { | 
| +        super.onNativeDestroyed(); | 
| +        destroyWebContentsObserver(); | 
| } | 
|  | 
| /** | 
| @@ -81,4 +124,5 @@ public class ReaderModeInfoBar extends InfoBar { | 
| } | 
|  | 
| private static native void nativeCreate(Tab tab); | 
| +    private native void nativeHide(long nativeReaderModeInfoBar); | 
| } | 
|  |