@startuml
[*] --> notScheduled: initialize
notScheduled --> scheduling: scheduleTask

scheduling: zoneSpec.onScheduleTask
scheduling: zoneSpec.onHasTask

scheduling --> scheduled: override with\n anotherZone
scheduled --> running: timeout callback\nreadystatechange\ncallback
running: anotherZoneSpec:onInvokeTask

scheduled --> canceling: clearTimeout\n/abort request
canceling: anotherZoneSpec.onCancelTask
canceling --> notScheduled
canceling: zneSpec.onHasTask
running --> notScheduled
running: zoneSpec.onHasTask
@enduml