in facebook-common/src/main/java/com/facebook/login/WebLoginMethodHandler.kt [142:202]
open fun onComplete(request: LoginClient.Request, values: Bundle?, error: FacebookException?) {
var outcome: LoginClient.Result
val loginClient = loginClient
e2e = null
if (values != null) {
// Actual e2e we got from the dialog should be used for logging.
if (values.containsKey(ServerProtocol.DIALOG_PARAM_E2E)) {
e2e = values.getString(ServerProtocol.DIALOG_PARAM_E2E)
}
try {
val token =
createAccessTokenFromWebBundle(
request.permissions, values, tokenSource, request.applicationId)
val authenticationToken = createAuthenticationTokenFromWebBundle(values, request.nonce)
outcome =
LoginClient.Result.createCompositeTokenResult(
loginClient.pendingRequest, token, authenticationToken)
// Ensure any cookies set by the dialog are saved
// This is to work around a bug where CookieManager may fail to instantiate if
// CookieSyncManager has never been created.
if (loginClient.activity != null) {
try {
val syncManager = CookieSyncManager.createInstance(loginClient.activity)
syncManager.sync()
} catch (e: Exception) {
// A crash happens in clearing the cookies. It's likely that webview is not available.
}
if (token != null) {
saveCookieToken(token.token)
}
}
} catch (ex: FacebookException) {
outcome = LoginClient.Result.createErrorResult(loginClient.pendingRequest, null, ex.message)
}
} else {
if (error is FacebookOperationCanceledException) {
outcome =
LoginClient.Result.createCancelResult(
loginClient.pendingRequest, USER_CANCELED_LOG_IN_ERROR_MESSAGE)
} else {
// Something went wrong, don't log a completion event since it will skew timing
// results.
e2e = null
var errorCode: String? = null
var errorMessage = error?.message
if (error is FacebookServiceException) {
val requestError = error.requestError
errorCode = requestError.errorCode.toString()
errorMessage = requestError.toString()
}
outcome =
LoginClient.Result.createErrorResult(
loginClient.pendingRequest, null, errorMessage, errorCode)
}
}
if (!isNullOrEmpty(e2e)) {
logWebLoginCompleted(e2e)
}
loginClient.completeAndValidate(outcome)
}