| Index: blimp/client/app/android/java/src/org/chromium/blimp/session/BlimpClientSession.java
 | 
| diff --git a/blimp/client/app/android/java/src/org/chromium/blimp/session/BlimpClientSession.java b/blimp/client/app/android/java/src/org/chromium/blimp/session/BlimpClientSession.java
 | 
| index b3012d8214e75aef716b94714df0591dd8e0e922..567c623ede69abebec7b0b5cf3b4c976648589a1 100644
 | 
| --- a/blimp/client/app/android/java/src/org/chromium/blimp/session/BlimpClientSession.java
 | 
| +++ b/blimp/client/app/android/java/src/org/chromium/blimp/session/BlimpClientSession.java
 | 
| @@ -6,6 +6,8 @@ package org.chromium.blimp.session;
 | 
|  
 | 
|  import org.chromium.base.annotations.CalledByNative;
 | 
|  import org.chromium.base.annotations.JNINamespace;
 | 
| +import org.chromium.blimp.R;
 | 
| +import org.chromium.blimp.assignment.Result;
 | 
|  
 | 
|  /**
 | 
|   * The Java representation of a native BlimpClientSession.  This is primarily used to provide access
 | 
| @@ -14,17 +16,35 @@ import org.chromium.base.annotations.JNINamespace;
 | 
|   */
 | 
|  @JNINamespace("blimp::client")
 | 
|  public class BlimpClientSession {
 | 
| +    /**
 | 
| +     * A callback for when the session needs to notify the UI about the state of the Blimp session.
 | 
| +     */
 | 
| +    public interface Callback {
 | 
| +        /**
 | 
| +         * Called when an engine assignment has been successful or failed.
 | 
| +         * @param result                     The result code of the assignment.  See
 | 
| +         *                                   assignment_source.h for details.  Maps to a value in
 | 
| +         *                                   {@link Result}.
 | 
| +         * @param suggestedMessageResourceId A suggested resource id for a string to display to the
 | 
| +         *                                   user if necessary.
 | 
| +         */
 | 
| +        void onAssignmentReceived(int result, int suggestedMessageResourceId);
 | 
| +    }
 | 
| +
 | 
| +    private final Callback mCallback;
 | 
|      private long mNativeBlimpClientSessionAndroidPtr;
 | 
|  
 | 
| -    public BlimpClientSession() {
 | 
| +    public BlimpClientSession(Callback callback) {
 | 
| +        mCallback = callback;
 | 
|          mNativeBlimpClientSessionAndroidPtr = nativeInit();
 | 
|      }
 | 
|  
 | 
|      /**
 | 
|       * Retrieves an assignment and uses it to connect to the engine.
 | 
| +     * @param token A OAuth2 access token for the account requesting access.
 | 
|       */
 | 
| -    public void connect() {
 | 
| -        nativeConnect(mNativeBlimpClientSessionAndroidPtr);
 | 
| +    public void connect(String token) {
 | 
| +        nativeConnect(mNativeBlimpClientSessionAndroidPtr, token);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| @@ -39,12 +59,56 @@ public class BlimpClientSession {
 | 
|  
 | 
|      // Methods that are called by native via JNI.
 | 
|      @CalledByNative
 | 
| +    private void onAssignmentReceived(int result) {
 | 
| +        if (mCallback == null) return;
 | 
| +
 | 
| +        int resultMessageResourceId = R.string.assignment_failure_unknown;
 | 
| +        switch (result) {
 | 
| +            case Result.OK:
 | 
| +                resultMessageResourceId = R.string.assignment_success;
 | 
| +                break;
 | 
| +            case Result.BAD_REQUEST:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_bad_request;
 | 
| +                break;
 | 
| +            case Result.BAD_RESPONSE:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_bad_response;
 | 
| +                break;
 | 
| +            case Result.INVALID_PROTOCOL_VERSION:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_bad_version;
 | 
| +                break;
 | 
| +            case Result.EXPIRED_ACCESS_TOKEN:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_expired_token;
 | 
| +                break;
 | 
| +            case Result.USER_INVALID:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_user_invalid;
 | 
| +                break;
 | 
| +            case Result.OUT_OF_VMS:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_out_of_vms;
 | 
| +                break;
 | 
| +            case Result.SERVER_ERROR:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_server_error;
 | 
| +                break;
 | 
| +            case Result.SERVER_INTERRUPTED:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_server_interrupted;
 | 
| +                break;
 | 
| +            case Result.NETWORK_FAILURE:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_network;
 | 
| +                break;
 | 
| +            case Result.UNKNOWN:
 | 
| +            default:
 | 
| +                resultMessageResourceId = R.string.assignment_failure_unknown;
 | 
| +                break;
 | 
| +        }
 | 
| +        mCallback.onAssignmentReceived(result, resultMessageResourceId);
 | 
| +    }
 | 
| +
 | 
| +    @CalledByNative
 | 
|      private long getNativePtr() {
 | 
|          assert mNativeBlimpClientSessionAndroidPtr != 0;
 | 
|          return mNativeBlimpClientSessionAndroidPtr;
 | 
|      }
 | 
|  
 | 
|      private native long nativeInit();
 | 
| -    private native void nativeConnect(long nativeBlimpClientSessionAndroid);
 | 
| +    private native void nativeConnect(long nativeBlimpClientSessionAndroid, String token);
 | 
|      private native void nativeDestroy(long nativeBlimpClientSessionAndroid);
 | 
|  }
 | 
| 
 |