 
     private var authSessionManager: AuthenticationSessionManager?
     private var fetchSessionError: Error?
+    // Users can cancel the web flow even if they successfully linked
+    // accounts. This flag helps us handle this edge-case.
+    private var userDidCancelInNative: Bool = false
 
     private let clientSecret: String
     private let apiClient: FinancialConnectionsAPIClient

                self.loadingView.activityIndicatorView.stp_stopAnimatingAndHide()
                switch result {
                case .success(let session):
                    self.notifyDelegate(result: .completed(session: session))
                case .failure(let error):
                    self.loadingView.errorView.isHidden = false
                    self.fetchSessionError = error

                   case .success(.webCancelled):
                       self.notifyDelegate(result: .canceled)
                   case .success(.nativeCancelled):
                        self.userDidCancelInNative = true
                        self.fetchSession()
                   case .failure(let error):
                       self.notifyDelegate(result: .failed(error: error))
                   }
