Let the user handle the onprogress

By default, it does nothing. A client code could set the `onprogress` function (for example, a long download)