in swift-source/all/FxAClient/FxAccountManager.swift [334:354]
func processEvent(event: Event, completionHandler: @escaping () -> Void) {
fxaFsmQueue.async {
var toProcess: Event? = event
while let evt = toProcess {
toProcess = nil // Avoid infinite loop if `toProcess` doesn't get replaced.
guard let nextState = FxAccountManager.nextState(state: self.state, event: evt) else {
FxALog.error("Got invalid event \(evt) for state \(self.state).")
continue
}
FxALog.debug("Processing event \(evt) for state \(self.state). Next state is \(nextState).")
self.state = nextState
toProcess = self.stateActions(forState: self.state, via: evt)
if let successiveEvent = toProcess {
FxALog.debug(
"Ran \(evt) side-effects for state \(self.state), got successive event \(successiveEvent)."
)
}
}
completionHandler()
}
}