refactor: remove electron::WebRequestAPI interface (#48792)

* refactor: remove electron::WebRequestAPI interface

Remove the |electron::WebRequestAPI| interface class.
Use handles to the concrete class |electron::api::WebRequest| instead.

Prerequisite for https://github.com/electron/electron/pull/48762.

Two classes (electron::ProxyingURLLoaderFactory and electron::ProxyingWebSocket)
hold a handle to a WebRequest via |raw_ptr<electron::WebRequestAPI>|.
|electron::WebRequestAPI| is a pure virtual interface whose concrete impl is
|electron::api::WebRequest|.

This is a problem when migrating |electron::api::WebRequest| to cppgc:
we need to change those |raw_ptr<>|s to |cppgc::WeakPersistent<>| but
can't instantiate |cppgc::WeakPersistent<electron::WebRequestAPI>| as-is.
We also can't change it to inherit from |cppgc::GarbageCollectedMixin|,
since that causes problems when |electron::api::WebRequest| inherits from
both |electron::WebRequestAPI| and |cppgc::GarbageCollected|.

* refactor: use name web_request, not web_request_api

* refactor: make ProxyingURLLoaderFactory::web_request() private

* chore: make linter happy by fixing whitespace
This commit is contained in:
Charles Kerr
2025-11-06 02:05:50 -06:00
committed by GitHub
parent 27bea2576e
commit f6ffb55c72
8 changed files with 64 additions and 124 deletions

View File

@@ -7,9 +7,11 @@
#include <map>
#include <set>
#include <string>
#include "base/memory/raw_ptr.h"
#include "shell/browser/net/web_request_api_interface.h"
#include "net/base/completion_once_callback.h"
#include "services/network/public/cpp/resource_request.h"
#include "shell/common/gin_helper/wrappable.h"
class URLPattern;
@@ -19,6 +21,7 @@ class BrowserContext;
}
namespace extensions {
struct WebRequestInfo;
enum class WebRequestResourceType : uint8_t;
} // namespace extensions
@@ -33,9 +36,13 @@ class Handle;
namespace electron::api {
class WebRequest final : public gin_helper::DeprecatedWrappable<WebRequest>,
public WebRequestAPI {
class WebRequest final : public gin_helper::DeprecatedWrappable<WebRequest> {
public:
using BeforeSendHeadersCallback =
base::OnceCallback<void(const std::set<std::string>& removed_headers,
const std::set<std::string>& set_headers,
int error_code)>;
// Return the WebRequest object attached to |browser_context|, create if there
// is no one.
// Note that the lifetime of WebRequest object is managed by Session, instead
@@ -62,38 +69,37 @@ class WebRequest final : public gin_helper::DeprecatedWrappable<WebRequest>,
v8::Isolate* isolate) override;
const char* GetTypeName() override;
// WebRequestAPI:
bool HasListener() const override;
bool HasListener() const;
int OnBeforeRequest(extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
net::CompletionOnceCallback callback,
GURL* new_url) override;
GURL* new_url);
int OnBeforeSendHeaders(extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
BeforeSendHeadersCallback callback,
net::HttpRequestHeaders* headers) override;
net::HttpRequestHeaders* headers);
int OnHeadersReceived(
extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
net::CompletionOnceCallback callback,
const net::HttpResponseHeaders* original_response_headers,
scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
GURL* allowed_unsafe_redirect_url) override;
GURL* allowed_unsafe_redirect_url);
void OnSendHeaders(extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
const net::HttpRequestHeaders& headers) override;
const net::HttpRequestHeaders& headers);
void OnBeforeRedirect(extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
const GURL& new_location) override;
const GURL& new_location);
void OnResponseStarted(extensions::WebRequestInfo* info,
const network::ResourceRequest& request) override;
const network::ResourceRequest& request);
void OnErrorOccurred(extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
int net_error) override;
int net_error);
void OnCompleted(extensions::WebRequestInfo* info,
const network::ResourceRequest& request,
int net_error) override;
void OnRequestWillBeDestroyed(extensions::WebRequestInfo* info) override;
int net_error);
void OnRequestWillBeDestroyed(extensions::WebRequestInfo* info);
private:
WebRequest(v8::Isolate* isolate, content::BrowserContext* browser_context);