<!--  As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->

### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->

* [X] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [X] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [X] I have searched the issue tracker for an issue that matches the one I want to file, without success.

### Issue Details

* **Electron Version:**
  * v11.1.1
* **Operating System:**
  * Linux 5.10.7 / Windows 10 (1803)
* **Last Known Working Electron version:**
  * unknown

### Expected Behavior
Using `interceptHttpProtocol` should not introduce random data corruption.

### Actual Behavior
Apparently, when `interceptHttpProtocol` is used (by itself), it introduces random corruption in transfered data.

### To Reproduce
Enable `interceptHttpProtocol` with no other behavior, e.g.:

```js
  protocol.interceptHttpProtocol('http', (request, callback) => {
    console.log('interceptHttpProtocol:', request)
    request.session = null
    callback(request)
  })
```

Then load a large file. I noticed this issue with JavaScript scripts, possibly other file types are affected.

Full test case can be found here:
https://github.com/lucybythec/electron-intercept-bug/blob/master/main.js

```sh
$ git clone https://github.com/lucybythec/electron-intercept-bug
$ cd electron-intercept-bug
$ npm install
$ npm start
```

In the example, the loaded page should print the MD5 of data contained in a big file.
However, very often the data corruption results in a syntax error instead.
(Check the "Console" tab in the Dev Tools).

I reproduce the problem on Windows and Linux.
Due to the random nature of the problem, it may not reproduce the first time. The application may need to be restarted several times.

### Screenshots
Example of corruption:
![image](https://user-images.githubusercontent.com/75380261/105265976-02c45300-5b89-11eb-821e-7fc9f99a7c1e.png)
![image](https://user-images.githubusercontent.com/75380261/105265500-cdb80080-5b88-11eb-95a8-28b134609998.png)


### Additional Information
<!-- Add any other context about the problem here. -->
Tested on different machines, so this is not a hardware defect.
shell/browser/net/url_pipe_loader.cc
client_->OnComplete(network::URLLoaderCompletionStatus(result));
  delete this;
}
void URLPipeLoader::OnResponseStarted(
    const GURL& final_url,
    const network::mojom::URLResponseHead& response_head) {
  mojo::ScopedDataPipeProducerHandle producer;
  mojo::ScopedDataPipeConsumerHandle consumer;
  MojoResult rv = mojo::CreateDataPipe(nullptr, producer, consumer);
  if (rv != MOJO_RESULT_OK) {
    NotifyComplete(net::ERR_INSUFFICIENT_RESOURCES);
    return;
  }
  producer_ = std::make_unique<mojo::DataPipeProducer>(std::move(producer));
  client_->OnReceiveResponse(response_head.Clone());
  client_->OnStartLoadingResponseBody(std::move(consumer));
}
void URLPipeLoader::OnWrite(base::OnceClosure resume, MojoResult result) {