Maybe I don't understand the problem correctly, but why not just preflight an HTTPS request when your widget loads?
In the time it takes the user to pick their file(s) to upload, the initial SSL negotiation will most likely have finished. And if you upload multiple files serially, the browser should even reuse the current SSL context, so it wouldn't be ~300ms per file.
We don't make any connections until the website calls us. At that point we load a personalized dialog for the user and we want that request to be as fast as possible.
In the time it takes the user to pick their file(s) to upload, the initial SSL negotiation will most likely have finished. And if you upload multiple files serially, the browser should even reuse the current SSL context, so it wouldn't be ~300ms per file.