@startuml [*] --> notScheduled: initialize notScheduled --> scheduling: setTimeout/\nXMLHttpRequest.send\nand so on scheduling: zoneSpec.onScheduleTask scheduling: zoneSpec.onHasTask scheduling --> scheduled scheduled --> running: timeout callback\nreadystatechange\ncallback running: zoneSpec:onInvokeTask scheduled --> canceling: clearTimeout\n/abort request canceling: zoneSpec.onCancelTask canceling --> notScheduled canceling: zoneSpec.onHasTask running --> notScheduled running: zoneSpec.onHasTask @enduml