<!--  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
When protocol's interceptor (created using [protocol.interceptStreamProtocol(scheme, handler[, completion])](https://www.electronjs.org/docs/api/protocol#protocolinterceptstreamprotocolscheme-handler-completion)) handles a redirect (with a 30X HTTP status code, and the 'Location' header set with a new resource location), it is being followed (resources are being downloaded from a new URL), however, Chromium is not-aware of the redirect (e.g. window.location is not updated). This causes invalid handling of requests with relative paths on the redirected page. For example: 

1. Navigate to https://google.com/ 
2. Server will send a redirect to https://www.google.com/
3. Electron will download https://www.google.com/
4. The site (https://www.google.com/), requests resources (images, style sheets etc) with a relative path (e.g. `<img alt="Google" id="hplogo" src="/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" style="padding-top:109px" data-atf="1" width="272" height="92">`
5. Electron tries to get the resource from https://google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png instead of https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
6. The request fails with 404 


* **Electron Version:**
  * Found on 7.2.1, tested and confirmed on 9.0.0, and latest from master
* **Operating System:**
  * Found on Windows, 
* **Last Known Working Electron version:**
  * 4.2.9 (should be working before https://github.com/electron/electron/pull/18464/files)

### Expected Behavior
The intercepted protocol should follow Redirects, and chromium should be aware of those (e.g. window.location should be updated)
<!-- A clear and concise description of what you expected to happen. -->

### Actual Behavior
The intercepted protocol follows Redirect, but chromium isn't aware of those (resulting in broken handling of sub-requests) 
<!-- A clear and concise description of what actually happened. -->

### To Reproduce
<!--
Your best chance of getting this bug looked at quickly is to provide an example.
-->
```
git clone https://github.com/wjch-krl/electron-redirects
cd electron-redirects
npm install
npm run start
```
It will start a new application, that would navigate to http://google.com/, with protocol interceptor
<!--
For bugs that can be encapsulated in a small experiment, you can use Electron Fiddle (https://github.com/electron/fiddle) to publish your example to a GitHub Gist and link it your bug report.
-->

<!--
If Fiddle is insufficient to produce an example, please provide an example REPOSITORY that can be cloned and run. You can fork electron-quick-start (https://github.com/electron/electron-quick-start) and include a link to the branch with your changes.
-->

<!--
If you provide a URL, please list the commands required to clone/setup/run your repo e.g.
```sh
$ git clone $YOUR_URL -b $BRANCH
$ npm install
$ npm start || electron .
```
-->

### Screenshots

![image](https://user-images.githubusercontent.com/6430297/82799806-ef86a980-9e7a-11ea-95ce-a6cf0699dee9.png)

<!-- If applicable, add screenshots to help explain your problem. -->

### Additional Information
<!-- Add any other context about the problem here. -->

shell/browser/net/electron_url_loader_factory.cc
switch (type) {
    case ProtocolType::kString:
    case ProtocolType::kFile:
    case ProtocolType::kFree:
      return false;
    default:
      return true;
  }
}
gin::Dictionary ToDict(v8::Isolate* isolate, v8::Local<v8::Value> value) {