open fun onComplete()

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)
  }