| Index: content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java | 
| diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java | 
| index 4dad75455237834b10fc241c89291a79c8d6caee..25427f9c01dd45dc88ed2c9e00f4d1e2bb3ca865 100644 | 
| --- a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java | 
| +++ b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java | 
| @@ -27,6 +27,7 @@ import org.chromium.base.test.util.CommandLineFlags; | 
| import org.chromium.base.test.util.DisabledTest; | 
| import org.chromium.base.test.util.Feature; | 
| import org.chromium.base.test.util.RetryOnFailure; | 
| +import org.chromium.base.test.util.UrlUtils; | 
| import org.chromium.base.test.util.parameter.Parameter; | 
| import org.chromium.base.test.util.parameter.ParameterizedTest; | 
| import org.chromium.content.browser.ContentViewCore; | 
| @@ -118,6 +119,36 @@ public class ImeTest extends ContentShellTestBase { | 
| resetAllStates(); | 
| } | 
|  | 
| +    private void fullyLoadUrl(final String url) throws Throwable { | 
| +        ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 
| +            @Override | 
| +            public void run() { | 
| +                getActivity().getActiveShell().loadUrl(url); | 
| +            } | 
| +        }); | 
| +        waitForActiveShellToBeDoneLoading(); | 
| +    } | 
| + | 
| +    @MediumTest | 
| +    @Feature({"TextInput", "Main"}) | 
| +    @RetryOnFailure | 
| +    public void testKeyboardDismissedWhenNavigating() throws Throwable { | 
| +        assertWaitForKeyboardStatus(true); | 
| + | 
| +        // Hide keyboard when loading a new Url. | 
| +        fullyLoadUrl(UrlUtils.getIsolatedTestFileUrl(INPUT_FORM_HTML)); | 
| +        assertWaitForKeyboardStatus(false); | 
| + | 
| +        DOMUtils.clickNode(this, mContentViewCore, "input_text"); | 
| +        assertWaitForKeyboardStatus(true); | 
| + | 
| +        // Hide keyboard when navigating. | 
| +        final String code = "document.getElementById(\"link\").click()"; | 
| +        JavaScriptUtils.executeJavaScriptAndWaitForResult( | 
| +                getContentViewCore().getWebContents(), code); | 
| +        assertWaitForKeyboardStatus(false); | 
| +    } | 
| + | 
| @MediumTest | 
| @Feature({"TextInput", "Main"}) | 
| public void testKeyboardDismissedAfterClickingGo() throws Throwable { | 
| @@ -636,21 +667,15 @@ public class ImeTest extends ContentShellTestBase { | 
| }); | 
| } | 
|  | 
| -    private void reloadPage() { | 
| +    private void reloadPage() throws Throwable { | 
| // Reload the page, then focus will be lost and keyboard should be hidden. | 
| -        ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 
| -            @Override | 
| -            public void run() { | 
| -                final String currentUrl = getContentViewCore().getWebContents().getUrl(); | 
| -                getActivity().getActiveShell().loadUrl(currentUrl); | 
| -            } | 
| -        }); | 
| +        fullyLoadUrl(getContentViewCore().getWebContents().getUrl()); | 
| } | 
|  | 
| @SmallTest | 
| @Feature({"TextInput"}) | 
| @RetryOnFailure | 
| -    public void testPhysicalKeyboard_AttachDetach() throws Exception { | 
| +    public void testPhysicalKeyboard_AttachDetach() throws Throwable { | 
| attachPhysicalKeyboard(); | 
| // We still call showSoftKeyboard, which will be ignored by physical keyboard. | 
| waitForKeyboardStates(1, 0, 1, new Integer[] {TextInputType.TEXT}); | 
|  |