Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(extensions): implement missing web_request hooks #22655

Merged
merged 56 commits into from Dec 18, 2020
Merged
Changes from 11 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
792f228
fix(extensions): implement missing web_request hooks
sentialx Mar 11, 2020
6d1a43f
Merge branch 'master' into web-request-api-hooks
sentialx Mar 11, 2020
3f67969
fix: buildflag typo
sentialx Mar 11, 2020
5647f6f
Merge branch 'web-request-api-hooks' of https://github.com/sentialx/e…
sentialx Mar 11, 2020
3dac5bc
fix: undeclared identifier frame
sentialx Mar 11, 2020
a77fb19
fix: condition
sentialx Mar 11, 2020
9d3cbd1
refactor: simplify the code
sentialx Mar 11, 2020
1b8a740
Merge branch 'master' of https://github.com/electron/electron into we…
sentialx Mar 12, 2020
3c06852
fix: update condition
sentialx Apr 6, 2020
89e3517
fix: ProxyWebSocket hitting DCHECK
sentialx Apr 6, 2020
a73ab76
Merge branch 'master' into web-request-api-hooks
sentialx Apr 7, 2020
7a5a9fc
Merge branch 'master' into web-request-api-hooks
sentialx Apr 10, 2020
bb847ac
fix: chrome.webRequest now takes precendence over Electron.webRequest
sentialx Apr 10, 2020
351af18
refactor: remove redundant use_proxy variable
sentialx Apr 10, 2020
9e9075c
fix: return in CreateWebSocket
sentialx Apr 10, 2020
8bb79bb
test: add chrome.webRequest.onBeforeRequest tests
sentialx Apr 10, 2020
d3da8eb
fix: tests
sentialx Apr 10, 2020
44718cc
fix: tests
sentialx Apr 11, 2020
cbe08d1
fix: add slash in url
sentialx Apr 11, 2020
95a8005
fix: correct extension permissions
sentialx Apr 11, 2020
f2cfafc
Merge branch 'master' into web-request-api-hooks
sentialx Jun 4, 2020
b47ff30
fix: attempt to fix tests
sentialx Jun 4, 2020
138a94d
fix: headers under enable_electron_extensions
sentialx Jun 4, 2020
3e3c8e8
lint: fix spaces
sentialx Jun 4, 2020
2923414
fix: use fetch instead of ajax
sentialx Jun 4, 2020
50829fb
fix: tests
sentialx Jun 5, 2020
e7eb2a9
feat: websocket tests
sentialx Jun 5, 2020
9b9a60b
fix: no requestHeaders
sentialx Jun 5, 2020
f0c1558
Apply suggestions from code review
sentialx Jun 5, 2020
d37ff74
fix: remaining tests
sentialx Jun 5, 2020
a1cdc70
test: add a case
sentialx Jun 5, 2020
a6ded49
fix: remove DCHECK
sentialx Jun 5, 2020
5bb508a
fix: precedence test
sentialx Jun 5, 2020
03ee78d
fix: test url filters
sentialx Jun 5, 2020
38906dd
fix: webRequest events not firing
sentialx Jul 8, 2020
7912b32
Merge branch 'master' into web-request-api-hooks
sentialx Jul 9, 2020
d7f4bbb
fix: requests made from service workers
sentialx Jul 11, 2020
1530eb2
Merge branch 'master' into web-request-api-hooks
sentialx Jul 20, 2020
540ef6e
fix: build errors
sentialx Jul 20, 2020
39eb683
docs: add a note about chrome.webRequest
sentialx Jul 30, 2020
06583a0
Merge branch 'master' into web-request-api-hooks
sentialx Aug 5, 2020
e00d117
Merge branch 'master' into web-request-api-hooks
sentialx Sep 6, 2020
b8b30ee
Update extensions.md
sentialx Sep 6, 2020
6967b36
Update electron_browser_client.cc
sentialx Sep 6, 2020
df95993
Update extensions-spec.ts
sentialx Sep 6, 2020
39894b3
Update electron_browser_client.cc
sentialx Sep 7, 2020
4efc318
Merge branch 'master' into web-request-api-hooks
samuelmaddock Sep 29, 2020
b5d407f
refactor: cleanup webRequest tests
samuelmaddock Sep 29, 2020
8d837e4
refactor: write minimal extension prefs to satisfy DCHECK
samuelmaddock Sep 30, 2020
436235f
fix: make electron webrequest take priority over chrome
sentialx Nov 18, 2020
fbdb5ca
Merge remote-tracking branch 'upstream/master' into web-request-api-h…
sentialx Nov 18, 2020
56ced0f
fix: tests
sentialx Nov 19, 2020
73056ba
Apply suggestions from code review
nornagon Nov 26, 2020
f229990
lint
nornagon Nov 30, 2020
16a62fd
Update electron_extension_loader.cc
sentialx Dec 18, 2020
f063a27
fix: lint
sentialx Dec 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
40 changes: 40 additions & 0 deletions shell/browser/electron_browser_client.cc
Expand Up @@ -44,6 +44,8 @@
#include "content/public/common/web_preferences.h"
#include "electron/buildflags/buildflags.h"
#include "electron/grit/electron_resources.h"
#include "extensions/browser/api/web_request/web_request_api.h"
deepak1556 marked this conversation as resolved.
Show resolved Hide resolved
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/extension_navigation_ui_data.h"
#include "extensions/browser/extension_protocols.h"
#include "extensions/common/constants.h"
Expand Down Expand Up @@ -1313,6 +1315,15 @@ bool ElectronBrowserClient::WillInterceptWebSocket(
if (!web_request.get())
return false;

#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
const auto* web_request_api =
extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get(
browser_context);

if (web_request_api)
return web_request->HasListener() || web_request_api->MayHaveProxies();
nornagon marked this conversation as resolved.
Show resolved Hide resolved
sentialx marked this conversation as resolved.
Show resolved Hide resolved
#endif

return web_request->HasListener();
}

Expand All @@ -1327,6 +1338,21 @@ void ElectronBrowserClient::CreateWebSocket(
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
auto* browser_context = frame->GetProcess()->GetBrowserContext();

#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
auto* web_request_api =
extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get(
browser_context);

DCHECK(web_request_api);
sentialx marked this conversation as resolved.
Show resolved Hide resolved

if (web_request_api->MayHaveProxies()) {
web_request_api->ProxyWebSocket(frame, std::move(factory), url,
sentialx marked this conversation as resolved.
Show resolved Hide resolved
site_for_cookies.RepresentativeUrl(),
user_agent, std::move(handshake_client));
}
#endif

auto web_request = api::WebRequest::FromOrCreate(isolate, browser_context);
DCHECK(web_request.get());
ProxyingWebSocket::StartProxying(
Expand All @@ -1350,6 +1376,19 @@ bool ElectronBrowserClient::WillCreateURLLoaderFactory(
bool* bypass_redirect_checks,
bool* disable_secure_dns,
network::mojom::URLLoaderFactoryOverridePtr* factory_override) {
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
auto* web_request_api =
extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get(
browser_context);

// NOTE: Some unit test environments do not initialize
// BrowserContextKeyedAPI factories for e.g. WebRequest.
sentialx marked this conversation as resolved.
Show resolved Hide resolved
if (web_request_api) {
web_request_api->MaybeProxyURLLoaderFactory(
browser_context, frame_host, render_process_id, type,
std::move(navigation_id), factory_receiver, header_client);
sentialx marked this conversation as resolved.
Show resolved Hide resolved
}
#endif
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
auto web_request = api::WebRequest::FromOrCreate(isolate, browser_context);
Expand Down Expand Up @@ -1386,6 +1425,7 @@ bool ElectronBrowserClient::WillCreateURLLoaderFactory(

if (bypass_redirect_checks)
*bypass_redirect_checks = true;

return true;
}

Expand Down