Skip to content

Commit

Permalink
fix(extensions): implement missing web_request hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
sentialx committed Apr 7, 2020
1 parent ad0d8ad commit ad12645
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions shell/browser/electron_browser_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1310,6 +1310,18 @@ bool ElectronBrowserClient::WillInterceptWebSocket(
auto* browser_context = frame->GetProcess()->GetBrowserContext();
auto web_request = api::WebRequest::FromOrCreate(isolate, browser_context);

#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
const auto* web_request_api =
extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get(
frame->GetProcess()->GetBrowserContext());

// NOTE: Some unit test environments do not initialize
// BrowserContextKeyedAPI factories for e.g. WebRequest.
if (!web_request_api && !web_request.get())
return false;

return web_request->HasListener() || web_request_api->MayHaveProxies();
#else
// NOTE: Some unit test environments do not initialize
// BrowserContextKeyedAPI factories for e.g. WebRequest.
if (!web_request.get())
Expand All @@ -1325,6 +1337,7 @@ bool ElectronBrowserClient::WillInterceptWebSocket(
#endif

return web_request->HasListener();
#endif
}

void ElectronBrowserClient::CreateWebSocket(
Expand All @@ -1335,6 +1348,19 @@ void ElectronBrowserClient::CreateWebSocket(
const base::Optional<std::string>& user_agent,
mojo::PendingRemote<network::mojom::WebSocketHandshakeClient>
handshake_client) {
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);
web_request_api->ProxyWebSocket(frame, std::move(factory), url,
site_for_cookies.RepresentativeUrl(),
user_agent, std::move(handshake_client));
#endif

v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
auto* browser_context = frame->GetProcess()->GetBrowserContext();
Expand Down

0 comments on commit ad12645

Please sign in to comment.