### Preflight Checklist

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

### Electron Version

13.0.0-beta-11

### What operating system are you using?

macOS

### Operating System Version

11.2.3

### What arch are you using?

x64

### Last Known Working Electron version

NA

### Expected Behavior

The service worker should be invoked first, falling back to the custom protocol

In the example, you can see that resources from the custom protocol, such as `test-scheme://authority/inner-img.png`, do not seem to trigger a fetch event in the service worker. Instead I only see the `test-scheme` protocol being invoked.  You can see this in the main log as `Trying to load resource using protocol: test-scheme://authority/inner-img.png`

However resources outside of the custom protocol, such `http://example.com/img.png`, do go through the service worker, Here if you open the developer tools, you can see `fetching in worker http://example.com/img.png` is logged

### Actual Behavior

The requests on the custom protocol seem to bypass the service worker and go directly to the custom protocol

### Testcase Gist URL

https://gist.github.com/775d15105c18d704741f1e4a460e4c5e

**Example Explained**
1. Register a custom protocol (`test-scheme`)
2. Load an iframe using the custom protocol: `test-scheme://authority/index.html`
3. Inside the iframe, register a service worker
4. After the service worker is registered, try loading resources inside the iframe. In the example, I use setTimeout to make sure the worker is fully ready before writing two images into the iframe: one image that uses the `test-scheme` protocol and one that comes from a fake external endpoint (`http://example.com/img.png`)


shell/browser/api/electron_api_protocol.cc
gin::Arguments* args) {
  bool removed = protocol_registry_->UninterceptProtocol(scheme);
  HandleOptionalCallback(
      args, removed ? ProtocolError::kOK : ProtocolError::kNotIntercepted);
  return removed;
}
bool Protocol::IsProtocolIntercepted(const std::string& scheme) {
  return protocol_registry_->IsProtocolIntercepted(scheme);
}
v8::Local<v8::Promise> Protocol::IsProtocolHandled(const std::string& scheme,
                                                   gin::Arguments* args) {
  node::Environment* env = node::Environment::GetCurrent(args->isolate());
  EmitWarning(env,
              "The protocol.isProtocolHandled API is deprecated, use "
              "protocol.isProtocolRegistered or protocol.isProtocolIntercepted "
              "instead.",
              "ProtocolDeprecateIsProtocolHandled");
  return gin_helper::Promise<bool>::ResolvedPromise(
      args->isolate(),
      IsProtocolRegistered(scheme) || IsProtocolIntercepted(scheme) ||
          
          
          
          
          
          
          
          base::Contains(kBuiltinSchemes, scheme));
}
void Protocol::HandleOptionalCallback(gin::Arguments* args,