| Index: chrome/android/java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java
 | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java
 | 
| index 45677771637fefaf3e6e47a06ad38f1d6d105bd1..6543a19062599063a3ac9df68aae16da4a9ff796 100644
 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java
 | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/SwipeRefreshHandler.java
 | 
| @@ -8,9 +8,9 @@ import android.content.Context;
 | 
|  import android.view.ViewGroup.LayoutParams;
 | 
|  
 | 
|  import org.chromium.base.TraceEvent;
 | 
| -import org.chromium.base.annotations.JNINamespace;
 | 
|  import org.chromium.base.metrics.RecordUserAction;
 | 
|  import org.chromium.chrome.R;
 | 
| +import org.chromium.chrome.browser.tab.Tab;
 | 
|  import org.chromium.content.browser.ContentViewCore;
 | 
|  import org.chromium.content.browser.OverscrollRefreshHandler;
 | 
|  import org.chromium.third_party.android.swiperefresh.SwipeRefreshLayout;
 | 
| @@ -19,7 +19,6 @@ import org.chromium.third_party.android.swiperefresh.SwipeRefreshLayout;
 | 
|   * An overscroll handler implemented in terms a modified version of the Android
 | 
|   * compat library's SwipeRefreshLayout effect.
 | 
|   */
 | 
| -@JNINamespace("content")
 | 
|  public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|      // Synthetic delay between the {@link #didStopRefreshing()} signal and the
 | 
|      // call to stop the refresh animation.
 | 
| @@ -33,6 +32,9 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|      // logic, rendering and animation.
 | 
|      private final SwipeRefreshLayout mSwipeRefreshLayout;
 | 
|  
 | 
| +    // The Tab where the swipe occurs.
 | 
| +    private Tab mTab;
 | 
| +
 | 
|      // The ContentViewCore with which the handler is associated. The handler
 | 
|      // will set/unset itself as the default OverscrollRefreshHandler as the
 | 
|      // association changes.
 | 
| @@ -53,8 +55,12 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|       * Simple constructor to use when creating an OverscrollRefresh instance from code.
 | 
|       *
 | 
|       * @param context The associated context.
 | 
| +     * @param tab The Tab where the swipe occurs.
 | 
|       */
 | 
| -    public SwipeRefreshHandler(Context context) {
 | 
| +    public SwipeRefreshHandler(Context context, Tab tab) {
 | 
| +        mTab = tab;
 | 
| +        mContentViewCore = mTab.getContentViewCore();
 | 
| +
 | 
|          mSwipeRefreshLayout = new SwipeRefreshLayout(context);
 | 
|          mSwipeRefreshLayout.setLayoutParams(
 | 
|                  new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
 | 
| @@ -62,26 +68,6 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|          // SwipeRefreshLayout.LARGE layouts appear broken on JellyBean.
 | 
|          mSwipeRefreshLayout.setSize(SwipeRefreshLayout.DEFAULT);
 | 
|          mSwipeRefreshLayout.setEnabled(false);
 | 
| -    }
 | 
| -
 | 
| -    /**
 | 
| -     * Pair the effect with a given ContentViewCore instance. If that instance is null,
 | 
| -     * the effect will be disabled.
 | 
| -     * @param contentViewCore The associated ContentViewCore instance.
 | 
| -     */
 | 
| -    public void setContentViewCore(final ContentViewCore contentViewCore) {
 | 
| -        if (mContentViewCore == contentViewCore) return;
 | 
| -
 | 
| -        if (mContentViewCore != null) {
 | 
| -            setEnabled(false);
 | 
| -            cancelStopRefreshingRunnable();
 | 
| -            mSwipeRefreshLayout.setOnRefreshListener(null);
 | 
| -            mContentViewCore.setOverscrollRefreshHandler(null);
 | 
| -        }
 | 
| -
 | 
| -        mContentViewCore = contentViewCore;
 | 
| -
 | 
| -        if (mContentViewCore == null) return;
 | 
|  
 | 
|          setEnabled(true);
 | 
|          mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
 | 
| @@ -93,11 +79,10 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|                  if (mAccessibilityRefreshString == null) {
 | 
|                      int resId = R.string.accessibility_swipe_refresh;
 | 
|                      mAccessibilityRefreshString =
 | 
| -                            contentViewCore.getContext().getResources().getString(resId);
 | 
| +                            mContentViewCore.getContext().getResources().getString(resId);
 | 
|                  }
 | 
|                  mSwipeRefreshLayout.announceForAccessibility(mAccessibilityRefreshString);
 | 
| -                contentViewCore.getWebContents().getNavigationController().reloadToRefreshContent(
 | 
| -                        true);
 | 
| +                mTab.reload();
 | 
|                  RecordUserAction.record("MobilePullGestureReload");
 | 
|              }
 | 
|          });
 | 
| @@ -116,7 +101,17 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|              }
 | 
|          });
 | 
|  
 | 
| -        contentViewCore.setOverscrollRefreshHandler(this);
 | 
| +        mContentViewCore.setOverscrollRefreshHandler(this);
 | 
| +    }
 | 
| +
 | 
| +    /**
 | 
| +     * Destroys and cleans up itself.
 | 
| +     */
 | 
| +    public void destroy() {
 | 
| +        setEnabled(false);
 | 
| +        cancelStopRefreshingRunnable();
 | 
| +        mSwipeRefreshLayout.setOnRefreshListener(null);
 | 
| +        mContentViewCore.setOverscrollRefreshHandler(null);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| @@ -192,7 +187,6 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|      // with composited SurfaceView content.
 | 
|      private void attachSwipeRefreshLayoutIfNecessary() {
 | 
|          cancelDetachLayoutRunnable();
 | 
| -        if (mContentViewCore == null) return;
 | 
|          if (mSwipeRefreshLayout.getParent() == null) {
 | 
|              mContentViewCore.getContainerView().addView(mSwipeRefreshLayout);
 | 
|          }
 | 
| @@ -200,7 +194,6 @@ public class SwipeRefreshHandler implements OverscrollRefreshHandler {
 | 
|  
 | 
|      private void detachSwipeRefreshLayoutIfNecessary() {
 | 
|          cancelDetachLayoutRunnable();
 | 
| -        if (mContentViewCore == null) return;
 | 
|          if (mSwipeRefreshLayout.getParent() != null) {
 | 
|              mContentViewCore.getContainerView().removeView(mSwipeRefreshLayout);
 | 
|          }
 | 
| 
 |