Downloads reset issue

Description of the issue:

Hey there,

I’m using Brave Origin and I’ve noticed that sometimes, especially when I’m downloading really big files like multi-GB models I use for content generation, the download happens twice. Let me explain – I start the download and when it hits 100%, it just resets back to 0% and downloads all over again. Only after that second download finishes does the file actually show up in my folder. So basically, it’s like I’m downloading the file twice (but i don’t get two files, just one).

Brave is the only browser doing this. With my other browsers, the file shows up in the folder as soon as the download is done. So my question is pretty straightforward – what’s going on with Brave and how do I fix this? Because honestly, this bug is super annoying with large files. I’m seriously thinking about switching back to my old browser if there’s no solution, because this is a real pain.

Thanks in advance for your help.

Origin Build type (standalone or upgraded):

Brave Browser upgraded to Brave Origin

Operating System and Brave Version(See the About Brave page in the main menu):
Windows 11 Pro
25H2 Brave 1.92.141

Additional Information:
This problem is specific to Brave and doesn’t occur on any of my other browsers.

This is happening to me as well. Starts all over again after 100%.

Thank you both for reporting.

Can you both confirm whether or not this occurs for other downloaded file types? Even if those file types are still larger files, just for a different kind of content.

This happens with all file types on my end.

Also, it seems to occur more frequently if the Brave download page (the full version) isn’t open, though I can’t say that for sure since the issue is very random.

Looks like someone else has reported this:

I’ve added your reports to the thread.

happening with me too. i downloaded linux mint iso for 2.9gb 3 days ago and it restarted again. moreover today i downloaded blender download setup and its just 340 mb and it again started to download ;-;. Hoping it will be fixed soon

I haven’t noticed any download reset issues today. Brave got an update since my first post so maybe that devs found a fix? I’ll update this post if it happens again, but for now, everything is fine.

Unfortunately, the problem occurred this morning with a 24 GB model: the download reached 100% before starting over from scratch and restarting the download. The issue has therefore not yet been resolved.

To report that it is happening to me as well. First noticed it a few weeks ago. Large files (I’ve seen with ~12GB) are downloaded twice. Frustrating when there is already a bandwidth limit of the site. The download is effectively 24GB.

Seriously? What even is that? I have Windows 10 and this is happening really often. Some files even download 3x. Pretty wasteful and time-consuming if you just want to test out some new models that are like 20-30 GB and it need to download >the same file(s)< 2-3 times! It’s truly annoying, if you don’t fix that soon, I’m done with Brave!

Test/Try altogether:

Not using a browser’s conventional %USERPROFILE%\Downloads folder.

Use: C:\DownloadsFldr

AND, not involving/using Brave Sync

AND, Brave not being default browser

RESTART computer after making changes; then test.


I suspect any of:

a) byte count is wrong

b) byte accounting error

c) compressed/encoded responses

d) server issue near/at end zone

e) final naming failure detected

f) browser distracted / loses focus


ChatGPT:

Chromium is unusually capable of instrumenting this at exactly the level we’re interested in. In fact, Chromium’s own download diagnostics were designed to answer questions very much like ours.

Chromium’s download object explicitly tracks total_bytes, received_bytes, download state, interruption reason, paths, and other metadata. Its debug representation can dump those values together.

More importantly, Chromium has a download-specific tracing category.

We can watch the train

Chromium’s documentation says to use its tracing facility and enable the download category. The resulting trace contains events such as:

  • DownloadStarted

  • DownloadFileCreated

  • DownloadItemUpdated

  • DownloadItemRenamed

  • DownloadItemSafetyStateUpdated

  • DownloadItemCompleting

  • DownloadItemFinished

  • DownloadItemInterrupted

  • DownloadFileWrite

  • DownloadFileRename

  • DownloadStreamDrained

And those events can be associated with the individual download ID.

In particular, Chromium logs the byte count

The source shows DownloadItemUpdatedbeing emitted with:

bytes_so_far = GetReceivedBytes()

and the interruption event records both the interrupt reason and the bytes so far.

So instead of looking at the progress bar and guessing, we can potentially obtain:

Content-Length / expected:
    X bytes

Chromium received:
    Y bytes

DownloadFile wrote:
    Z bytes

DownloadItem state:
    ...

Interrupt reason:
    ...

Final filesystem size:
    ...

Rename:
    SUCCESS / FAILURE

Completion:
    YES / NO

That would let us answer your earlier question - “were the last bytes actually received?” - with evidence.

There’s an especially juicy piece

Chromium has an explicit OnAllDataSaved()path. When it believes all data has been saved, it sets all_data_saved, updates the total byte count, and calls UpdateProgress(total_bytes, 0). It also has explicit instrumentation around content-length mismatches.

That means Chromium is not blindly counting bytes. It has logic specifically concerned with whether the data saved corresponds to the expected content length.

And the persistent download database has separate fields for:

  • received_bytes

  • total_bytes

  • state

  • interrupt_reason

  • hash

  • end_time

so this information is retained as download state, not merely displayed temporarily.

I think we can do a very decisive experiment

For one of your problematic large downloads:

  1. Start Chromium/Brave tracing with the download category.

  2. Start the large download.

  3. Let it fail in the characteristic way.

  4. Stop the trace.

  5. Examine the final sequence.

We’re looking for something like:

DownloadItemUpdated
    bytes_so_far = 23,999,999,744

DownloadStreamDrained

DownloadFileRename
    .crdownload → final

DownloadItemCompleting
    bytes_so_far = 23,999,999,744

DownloadItemInterrupted
    interrupt_reason = ???
    bytes_so_far = 23,999,999,744

versus:

DownloadItemUpdated
    bytes_so_far = 24,000,000,000

DownloadFileRename
    SUCCESS

DownloadItemCompleting
    bytes_so_far = 24,000,000,000

DownloadItemFinished

Those two traces would tell very different stories.

And there’s an even better comparison

Do the same download twice:

  • successful download

  • failed/incomplete download

Then compare the last few hundred milliseconds of the traces.

That gives us a known-good train and a derailment, with Chromium itself telling us what happened to each.

Chromium has the instrumentation necessary to determine whether the failure is in receiving bytes, writing bytes, recognizing end-of-stream, content-length reconciliation, finalization, or some later state transition.


For this particular investigation, I would use Chromium’s older but very useful chrome://tracing facility, because Chromium’s own download documentation specifically identifies the download tracing category and the download-specific events we care about.

Start tracing

In Chrome or another Chromium browser:

  1. Open a new tab.

  2. Enter:

    chrome://tracing

  3. Click Record.

  4. Choose Manually select settings.

  5. In Record Categories, select download.

  6. Ideally, uncheck the other categories so we don’t drown the useful download events in unrelated data.

  7. Click Record.

Those are essentially Chromium’s own documented instructions for capturing download traces.

Then switch to the download tab and perform the problematic download.

For our experiment, I’d actually let the download run all the way through the failure. We don’t care about the usual “10 seconds or less” recommendation here - that recommendation is aimed at performance investigations; our event is the download itself. Chromium’s download documentation specifically describes tracing download events.

Stop tracing

Once the failure has occurred:

  1. Return to the chrome://tracing tab.

  2. Click Stop.

  3. Chromium will load the captured trace.

  4. Click Save.

  5. Save the resulting trace file, normally as JSON.

Chromium documents the Stop → Save process explicitly.

What we’re looking for

This is the important part.

Chromium’s download tracing includes events such as:

  • DownloadStarted

  • DownloadFileCreated

  • DownloadItemUpdated

  • DownloadStreamDrained

  • DownloadFileRename

  • DownloadItemRenamed

  • DownloadItemSafetyStateUpdated

  • DownloadItemCompleting

  • DownloadItemFinished

  • DownloadItemInterrupted

So the trace can show the actual sequence of events, rather than us inferring it from the progress bar.

For your particular failure, I would want to find the sequence around:

DownloadItemUpdated
        ↓
DownloadStreamDrained
        ↓
DownloadFileRename
        ↓
DownloadItemRenamed
        ↓
DownloadItemCompleting
        ↓
????

And especially whether we see:

DownloadItemInterrupted

after the rename.

The numbers matter even more

Chromium’s download instrumentation records the number of bytes received in its download-update events, and interruption events containthe bytes-so-far information.

So we’re trying to establish something like:

Expected:       24,123,456,789
Received:       24,123,456,789
File on disk:   24,123,456,789

versus:

Expected:       24,123,456,789
Received:       24,123,456,000
File on disk:   24,123,456,000

Those mean very different things.

And there is an additional event that I’m particularly interested in:

DownloadStreamDrained

Chromium specifically identifies that as one ofthe events associated with download-file processing.

That gets us much closer to answering your original:

Were the last bytes actually received?

rather than merely:

Did the progress indicator reach 100%?


One important caution

Don’t upload the trace anywhere yet.

Chromium warns that traces can contain information such as URLs and titles of open tabs, subresource URLs, extension IDs, and hardware-identifying information.

For our purposes, just save the trace locally.