| Index: content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
 | 
| diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
 | 
| index 55746b956cbb1d2904fb20f3a6a9328116e619ed..af2fda9d30401b62c2a162a69033b51909dad9b5 100644
 | 
| --- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
 | 
| +++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapter.java
 | 
| @@ -617,18 +617,34 @@ public class ImeAdapter {
 | 
|  
 | 
|      boolean performEditorAction(int actionCode) {
 | 
|          if (!isValid()) return false;
 | 
| -        if (actionCode == EditorInfo.IME_ACTION_NEXT) {
 | 
| -            sendSyntheticKeyPress(KeyEvent.KEYCODE_TAB,
 | 
| -                    KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE
 | 
| -                    | KeyEvent.FLAG_EDITOR_ACTION);
 | 
| -        } else {
 | 
| -            sendSyntheticKeyPress(KeyEvent.KEYCODE_ENTER,
 | 
| -                    KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE
 | 
| -                    | KeyEvent.FLAG_EDITOR_ACTION);
 | 
| +        switch (actionCode) {
 | 
| +            case EditorInfo.IME_ACTION_NEXT:
 | 
| +                restartInput();
 | 
| +                advanceFocusInForm(true);
 | 
| +                break;
 | 
| +            case EditorInfo.IME_ACTION_PREVIOUS:
 | 
| +                restartInput();
 | 
| +                advanceFocusInForm(false);
 | 
| +                break;
 | 
| +            default:
 | 
| +                sendSyntheticKeyPress(KeyEvent.KEYCODE_ENTER,
 | 
| +                        KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE
 | 
| +                                | KeyEvent.FLAG_EDITOR_ACTION);
 | 
| +                break;
 | 
|          }
 | 
|          return true;
 | 
|      }
 | 
|  
 | 
| +    /**
 | 
| +     * Advances the focus to next input field in the current form.
 | 
| +     *
 | 
| +     * @param forward indicates whether to advance forward or backward direction.
 | 
| +     */
 | 
| +    public void advanceFocusInForm(boolean forward) {
 | 
| +        if (mNativeImeAdapterAndroid == 0) return;
 | 
| +        nativeAdvanceFocusInForm(mNativeImeAdapterAndroid, forward);
 | 
| +    }
 | 
| +
 | 
|      void notifyUserAction() {
 | 
|          mInputMethodManagerWrapper.notifyUserAction();
 | 
|      }
 | 
| @@ -902,4 +918,5 @@ public class ImeAdapter {
 | 
|      private native boolean nativeRequestTextInputStateUpdate(long nativeImeAdapterAndroid);
 | 
|      private native void nativeRequestCursorUpdate(long nativeImeAdapterAndroid,
 | 
|              boolean immediateRequest, boolean monitorRequest);
 | 
| +    private native void nativeAdvanceFocusInForm(long nativeImeAdapterAndroid, boolean forward);
 | 
|  }
 | 
| 
 |