I think that `throw` doesn't get caught by the promise fulfillment/rejection chain. We should stick to `Promise.reject` so that `establishSession_` above can catch it correctly.