feat: net.fetch() supports custom protocols (#36606)

This commit is contained in:
Jeremy Rose 2023-03-02 15:47:45 -08:00 committed by GitHub
parent 76c825d619
commit 6bd9ee6988
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 321 additions and 36 deletions

View file

@ -31,8 +31,13 @@ class Handle;
namespace network {
class SimpleURLLoader;
struct ResourceRequest;
class SharedURLLoaderFactory;
} // namespace network
namespace electron {
class ElectronBrowserContext;
}
namespace electron::api {
/** Wraps a SimpleURLLoader to make it usable from JavaScript */
@ -54,8 +59,8 @@ class SimpleURLLoaderWrapper
const char* GetTypeName() override;
private:
SimpleURLLoaderWrapper(std::unique_ptr<network::ResourceRequest> request,
network::mojom::URLLoaderFactory* url_loader_factory,
SimpleURLLoaderWrapper(ElectronBrowserContext* browser_context,
std::unique_ptr<network::ResourceRequest> request,
int options);
// SimpleURLLoaderStreamConsumer:
@ -99,6 +104,9 @@ class SimpleURLLoaderWrapper
mojo::PendingReceiver<network::mojom::URLLoaderNetworkServiceObserver>
observer) override;
scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactoryForURL(
const GURL& url);
// SimpleURLLoader callbacks
void OnResponseStarted(const GURL& final_url,
const network::mojom::URLResponseHead& response_head);
@ -112,6 +120,10 @@ class SimpleURLLoaderWrapper
void Pin();
void PinBodyGetter(v8::Local<v8::Value>);
ElectronBrowserContext* browser_context_;
int request_options_;
std::unique_ptr<network::ResourceRequest> request_;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
std::unique_ptr<network::SimpleURLLoader> loader_;
v8::Global<v8::Value> pinned_wrapper_;
v8::Global<v8::Value> pinned_chunk_pipe_getter_;