private void createAudioElement() { if (endedRegistration != null) { endedRegistration.removeHandler(); } if (audio != null) { // TODO: remove, once DOM attachment no longer required to sink (bitless) events audio.removeFromParent(); } assert Audio.isSupported(); audio = Audio.createIfSupported(); assert audio != null; AudioElement elem = audio.getAudioElement(); assert elem != null; endedRegistration = audio.addEndedHandler(endedHandler); // TODO: remove, once DOM attachment no longer required to sink (bitless) events RootPanel.get().add(audio); if (isCrossOrigin()) { elem.setAttribute("crossOrigin", "anonymous"); } elem.setSrc(getUrl()); }