Hm, ok I got the right sequence of events dispatched by changing the sequence of fireChromeEvent() calls to be sleep -> volume -> sleep instead of volume -> sleep -> volume

(which seems to make sense. not sure why it passed before...)