| Index: android_webview/java/src/org/chromium/android_webview/AwContents.java
 | 
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
 | 
| index ffa0d5e67cf3f1ce7fa7dbc706d196ccb3eb4e91..6c0e38f9c415cb891b4a265423ebbc43881f9bfa 100644
 | 
| --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
 | 
| +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
 | 
| @@ -54,8 +54,10 @@ import org.chromium.content_public.Referrer;
 | 
|  import org.chromium.content_public.browser.GestureStateListener;
 | 
|  import org.chromium.content_public.browser.JavaScriptCallback;
 | 
|  import org.chromium.content_public.browser.LoadUrlParams;
 | 
| +import org.chromium.content_public.browser.NavigationController;
 | 
|  import org.chromium.content_public.browser.NavigationHistory;
 | 
|  import org.chromium.content_public.browser.PageTransitionTypes;
 | 
| +import org.chromium.content_public.browser.WebContents;
 | 
|  import org.chromium.ui.base.ActivityWindowAndroid;
 | 
|  import org.chromium.ui.base.WindowAndroid;
 | 
|  import org.chromium.ui.gfx.DeviceDisplayInfo;
 | 
| @@ -182,6 +184,8 @@ public class AwContents {
 | 
|      private final Context mContext;
 | 
|      private ContentViewCore mContentViewCore;
 | 
|      private WindowAndroid mWindowAndroid;
 | 
| +    private WebContents mWebContents;
 | 
| +    private NavigationController mNavigationController;
 | 
|      private final AwContentsClient mContentsClient;
 | 
|      private final AwContentViewClient mContentViewClient;
 | 
|      private WebContentsObserverAndroid mWebContentsObserver;
 | 
| @@ -745,6 +749,8 @@ public class AwContents {
 | 
|          if (mNativeAwContents != 0) {
 | 
|              destroy();
 | 
|              mContentViewCore = null;
 | 
| +            mWebContents = null;
 | 
| +            mNavigationController = null;
 | 
|          }
 | 
|  
 | 
|          assert mNativeAwContents == 0 && mCleanupReference == null && mContentViewCore == null;
 | 
| @@ -768,6 +774,8 @@ public class AwContents {
 | 
|                  new AwGestureStateListener(), mContentViewClient, mZoomControls, mWindowAndroid);
 | 
|          nativeSetJavaPeers(mNativeAwContents, this, mWebContentsDelegate, mContentsClientBridge,
 | 
|                  mIoThreadClient, mInterceptNavigationDelegate);
 | 
| +        mWebContents = mContentViewCore.getWebContents();
 | 
| +        mNavigationController = mWebContents.getNavigationController();
 | 
|          installWebContentsObserver();
 | 
|          mSettings.setWebContents(nativeWebContents);
 | 
|          nativeSetDipScale(mNativeAwContents, (float) mDIPScale);
 | 
| @@ -780,8 +788,7 @@ public class AwContents {
 | 
|          if (mWebContentsObserver != null) {
 | 
|              mWebContentsObserver.detachFromWebContents();
 | 
|          }
 | 
| -        mWebContentsObserver = new AwWebContentsObserver(mContentViewCore.getWebContents(),
 | 
| -                mContentsClient);
 | 
| +        mWebContentsObserver = new AwWebContentsObserver(mWebContents, mContentsClient);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| @@ -888,6 +895,16 @@ public class AwContents {
 | 
|          return mContentViewCore;
 | 
|      }
 | 
|  
 | 
| +    @VisibleForTesting
 | 
| +    public WebContents getWebContents() {
 | 
| +        return mWebContents;
 | 
| +    }
 | 
| +
 | 
| +    @VisibleForTesting
 | 
| +    public NavigationController getNavigationController() {
 | 
| +        return mNavigationController;
 | 
| +    }
 | 
| +
 | 
|      // Can be called from any thread.
 | 
|      public AwSettings getSettings() {
 | 
|          return mSettings;
 | 
| @@ -1074,7 +1091,7 @@ public class AwContents {
 | 
|  
 | 
|          // If we are reloading the same url, then set transition type as reload.
 | 
|          if (params.getUrl() != null &&
 | 
| -                params.getUrl().equals(mContentViewCore.getUrl()) &&
 | 
| +                params.getUrl().equals(mWebContents.getUrl()) &&
 | 
|                  params.getTransitionType() == PageTransitionTypes.PAGE_TRANSITION_LINK) {
 | 
|              params.setTransitionType(PageTransitionTypes.PAGE_TRANSITION_RELOAD);
 | 
|          }
 | 
| @@ -1108,7 +1125,7 @@ public class AwContents {
 | 
|          }
 | 
|          params.setExtraHeaders(new HashMap<String, String>());
 | 
|  
 | 
| -        mContentViewCore.loadUrl(params);
 | 
| +        mNavigationController.loadUrl(params);
 | 
|  
 | 
|          // The behavior of WebViewClassic uses the populateVisitedLinks callback in WebKit.
 | 
|          // Chromium does not use this use code path and the best emulation of this behavior to call
 | 
| @@ -1132,7 +1149,7 @@ public class AwContents {
 | 
|       * @return The URL of the current page or null if it's empty.
 | 
|       */
 | 
|      public String getUrl() {
 | 
| -        String url =  mContentViewCore.getUrl();
 | 
| +        String url =  mWebContents.getUrl();
 | 
|          if (url == null || url.trim().isEmpty()) return null;
 | 
|          return url;
 | 
|      }
 | 
| @@ -1323,56 +1340,56 @@ public class AwContents {
 | 
|       * @see android.webkit.WebView#stopLoading()
 | 
|       */
 | 
|      public void stopLoading() {
 | 
| -        mContentViewCore.stopLoading();
 | 
| +        mWebContents.stop();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#reload()
 | 
|       */
 | 
|      public void reload() {
 | 
| -        mContentViewCore.reload(true);
 | 
| +        mNavigationController.reload(true);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#canGoBack()
 | 
|       */
 | 
|      public boolean canGoBack() {
 | 
| -        return mContentViewCore.canGoBack();
 | 
| +        return mNavigationController.canGoBack();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#goBack()
 | 
|       */
 | 
|      public void goBack() {
 | 
| -        mContentViewCore.goBack();
 | 
| +        mNavigationController.goBack();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#canGoForward()
 | 
|       */
 | 
|      public boolean canGoForward() {
 | 
| -        return mContentViewCore.canGoForward();
 | 
| +        return mNavigationController.canGoForward();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#goForward()
 | 
|       */
 | 
|      public void goForward() {
 | 
| -        mContentViewCore.goForward();
 | 
| +        mNavigationController.goForward();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#canGoBackOrForward(int)
 | 
|       */
 | 
|      public boolean canGoBackOrForward(int steps) {
 | 
| -        return mContentViewCore.canGoToOffset(steps);
 | 
| +        return mNavigationController.canGoToOffset(steps);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#goBackOrForward(int)
 | 
|       */
 | 
|      public void goBackOrForward(int steps) {
 | 
| -        mContentViewCore.goToOffset(steps);
 | 
| +        mNavigationController.goToOffset(steps);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| @@ -1473,7 +1490,7 @@ public class AwContents {
 | 
|      }
 | 
|  
 | 
|      public String getOriginalUrl() {
 | 
| -        NavigationHistory history = mContentViewCore.getNavigationHistory();
 | 
| +        NavigationHistory history = mNavigationController.getNavigationHistory();
 | 
|          int currentIndex = history.getCurrentEntryIndex();
 | 
|          if (currentIndex >= 0 && currentIndex < history.getEntryCount()) {
 | 
|              return history.getEntryAtIndex(currentIndex).getOriginalUrl();
 | 
| @@ -1485,21 +1502,21 @@ public class AwContents {
 | 
|       * @see ContentViewCore#getNavigationHistory()
 | 
|       */
 | 
|      public NavigationHistory getNavigationHistory() {
 | 
| -        return mContentViewCore.getNavigationHistory();
 | 
| +        return mNavigationController.getNavigationHistory();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#getTitle()
 | 
|       */
 | 
|      public String getTitle() {
 | 
| -        return mContentViewCore.getTitle();
 | 
| +        return mWebContents.getTitle();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see android.webkit.WebView#clearHistory()
 | 
|       */
 | 
|      public void clearHistory() {
 | 
| -        mContentViewCore.clearHistory();
 | 
| +        mNavigationController.clearHistory();
 | 
|      }
 | 
|  
 | 
|      public String[] getHttpAuthUsernamePassword(String host, String realm) {
 | 
| @@ -1525,7 +1542,7 @@ public class AwContents {
 | 
|       * @see android.webkit.WebView#clearSslPreferences()
 | 
|       */
 | 
|      public void clearSslPreferences() {
 | 
| -        mContentViewCore.clearSslPreferences();
 | 
| +        mNavigationController.clearSslPreferences();
 | 
|      }
 | 
|  
 | 
|      // TODO(sgurun) remove after this rolls in. To keep internal tree happy.
 | 
| @@ -1696,14 +1713,14 @@ public class AwContents {
 | 
|              };
 | 
|          }
 | 
|  
 | 
| -        mContentViewCore.evaluateJavaScript(script, jsCallback);
 | 
| +        mWebContents.evaluateJavaScript(script, jsCallback, false);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * @see ContentViewCore.evaluateJavaScriptEvenIfNotYetNavigated(String)
 | 
|       */
 | 
|      public void evaluateJavaScriptEvenIfNotYetNavigated(String script) {
 | 
| -        mContentViewCore.evaluateJavaScriptEvenIfNotYetNavigated(script);
 | 
| +        mWebContents.evaluateJavaScript(script, null, true);
 | 
|      }
 | 
|  
 | 
|      //--------------------------------------------------------------------------------------------
 | 
| @@ -1853,7 +1870,7 @@ public class AwContents {
 | 
|          // but is optimized out in the restoreState case because the title is
 | 
|          // already restored. See WebContentsImpl::UpdateTitleForEntry. So we
 | 
|          // call the callback explicitly here.
 | 
| -        if (result) mContentsClient.onReceivedTitle(mContentViewCore.getTitle());
 | 
| +        if (result) mContentsClient.onReceivedTitle(mWebContents.getTitle());
 | 
|  
 | 
|          return result;
 | 
|      }
 | 
| 
 |