closeUrl() is supposed to close the currently open url, so we should not
leave the old url() around if someone explicitly calls this method.
To avoid urlChanged() being emitted twice if we call openUrl(), we use a
special boolean set in openUrl(). We need this boolean because openUrl()
is both public and virtual and we need to make sure to call the
openUrl() re-implemented by subclasses.