feat: add ability to close connections for a session (#24945)
These methods are needed for closing all idle and in-flight connections after switching to another proxy from same origin for a session, otherwise these connections may be reused for future requests which is unexpected for most of users.
This commit is contained in:
parent
fb11a12d5b
commit
e4213e326b
3 changed files with 24 additions and 0 deletions
|
@ -295,6 +295,9 @@ Sets the proxy settings.
|
||||||
When `pacScript` and `proxyRules` are provided together, the `proxyRules`
|
When `pacScript` and `proxyRules` are provided together, the `proxyRules`
|
||||||
option is ignored and `pacScript` configuration is applied.
|
option is ignored and `pacScript` configuration is applied.
|
||||||
|
|
||||||
|
You may need `ses.closeAllConnections` to close currently in flight connections to prevent
|
||||||
|
pooled sockets using previous proxy from being reused by future requests.
|
||||||
|
|
||||||
The `proxyRules` has to follow the rules below:
|
The `proxyRules` has to follow the rules below:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -404,6 +407,12 @@ window.webContents.session.enableNetworkEmulation({ offline: true })
|
||||||
|
|
||||||
Preconnects the given number of sockets to an origin.
|
Preconnects the given number of sockets to an origin.
|
||||||
|
|
||||||
|
#### `ses.closeAllConnections()`
|
||||||
|
|
||||||
|
Returns `Promise<void>` - Resolves when all connections are closed.
|
||||||
|
|
||||||
|
**Note:** It will terminate / fail all requests currently in flight.
|
||||||
|
|
||||||
#### `ses.disableNetworkEmulation()`
|
#### `ses.disableNetworkEmulation()`
|
||||||
|
|
||||||
Disables any network emulation already active for the `session`. Resets to
|
Disables any network emulation already active for the `session`. Resets to
|
||||||
|
|
|
@ -903,6 +903,19 @@ void Session::Preconnect(const gin_helper::Dictionary& options,
|
||||||
url, num_sockets_to_preconnect));
|
url, num_sockets_to_preconnect));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v8::Local<v8::Promise> Session::CloseAllConnections() {
|
||||||
|
v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
|
||||||
|
gin_helper::Promise<void> promise(isolate);
|
||||||
|
auto handle = promise.GetHandle();
|
||||||
|
|
||||||
|
content::BrowserContext::GetDefaultStoragePartition(browser_context_)
|
||||||
|
->GetNetworkContext()
|
||||||
|
->CloseAllConnections(base::BindOnce(
|
||||||
|
gin_helper::Promise<void>::ResolvePromise, std::move(promise)));
|
||||||
|
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||||
base::Value Session::GetSpellCheckerLanguages() {
|
base::Value Session::GetSpellCheckerLanguages() {
|
||||||
return browser_context_->prefs()
|
return browser_context_->prefs()
|
||||||
|
@ -1106,6 +1119,7 @@ gin::ObjectTemplateBuilder Session::GetObjectTemplateBuilder(
|
||||||
&Session::RemoveWordFromSpellCheckerDictionary)
|
&Session::RemoveWordFromSpellCheckerDictionary)
|
||||||
#endif
|
#endif
|
||||||
.SetMethod("preconnect", &Session::Preconnect)
|
.SetMethod("preconnect", &Session::Preconnect)
|
||||||
|
.SetMethod("closeAllConnections", &Session::CloseAllConnections)
|
||||||
.SetProperty("cookies", &Session::Cookies)
|
.SetProperty("cookies", &Session::Cookies)
|
||||||
.SetProperty("netLog", &Session::NetLog)
|
.SetProperty("netLog", &Session::NetLog)
|
||||||
.SetProperty("protocol", &Session::Protocol)
|
.SetProperty("protocol", &Session::Protocol)
|
||||||
|
|
|
@ -122,6 +122,7 @@ class Session : public gin::Wrappable<Session>,
|
||||||
v8::Local<v8::Value> WebRequest(v8::Isolate* isolate);
|
v8::Local<v8::Value> WebRequest(v8::Isolate* isolate);
|
||||||
v8::Local<v8::Value> NetLog(v8::Isolate* isolate);
|
v8::Local<v8::Value> NetLog(v8::Isolate* isolate);
|
||||||
void Preconnect(const gin_helper::Dictionary& options, gin::Arguments* args);
|
void Preconnect(const gin_helper::Dictionary& options, gin::Arguments* args);
|
||||||
|
v8::Local<v8::Promise> CloseAllConnections();
|
||||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||||
base::Value GetSpellCheckerLanguages();
|
base::Value GetSpellCheckerLanguages();
|
||||||
void SetSpellCheckerLanguages(gin_helper::ErrorThrower thrower,
|
void SetSpellCheckerLanguages(gin_helper::ErrorThrower thrower,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue