diff --git a/docs/api/session.md b/docs/api/session.md index 4b4495592f3..68d337bea51 100644 --- a/docs/api/session.md +++ b/docs/api/session.md @@ -439,6 +439,13 @@ example `"en-US,fr,de,ko,zh-CN,ja"`. This doesn't affect existing `WebContents`, and each `WebContents` can use `webContents.setUserAgent` to override the session-wide user agent. +#### `ses.isPersistent()` + +Returns `Boolean` - Whether or not this session is a persistent one. The default +`webContents` session of a `BrowserWindow` is persistent. When creating a session +from a partition, session prefixed with `persist:` will be persistent, while others +will be temporary. + #### `ses.getUserAgent()` Returns `String` - The user agent for this session. diff --git a/shell/browser/api/electron_api_session.cc b/shell/browser/api/electron_api_session.cc index b45a8bc53ad..85c59d7b354 100644 --- a/shell/browser/api/electron_api_session.cc +++ b/shell/browser/api/electron_api_session.cc @@ -615,6 +615,10 @@ std::string Session::GetUserAgent() { return browser_context_->GetUserAgent(); } +bool Session::IsPersistent() { + return !browser_context_->IsOffTheRecord(); +} + v8::Local Session::GetBlobData(v8::Isolate* isolate, const std::string& uuid) { gin::Handle holder = DataPipeHolder::From(isolate, uuid); @@ -981,6 +985,7 @@ void Session::BuildPrototype(v8::Isolate* isolate, .SetMethod("clearAuthCache", &Session::ClearAuthCache) .SetMethod("allowNTLMCredentialsForDomains", &Session::AllowNTLMCredentialsForDomains) + .SetMethod("isPersistent", &Session::IsPersistent) .SetMethod("setUserAgent", &Session::SetUserAgent) .SetMethod("getUserAgent", &Session::GetUserAgent) .SetMethod("getBlobData", &Session::GetBlobData) diff --git a/shell/browser/api/electron_api_session.h b/shell/browser/api/electron_api_session.h index eedc2c67797..dfa3a089b94 100644 --- a/shell/browser/api/electron_api_session.h +++ b/shell/browser/api/electron_api_session.h @@ -86,6 +86,7 @@ class Session : public gin_helper::TrackableObject, void AllowNTLMCredentialsForDomains(const std::string& domains); void SetUserAgent(const std::string& user_agent, gin_helper::Arguments* args); std::string GetUserAgent(); + bool IsPersistent(); v8::Local GetBlobData(v8::Isolate* isolate, const std::string& uuid); void DownloadURL(const GURL& url); diff --git a/spec-main/api-session-spec.ts b/spec-main/api-session-spec.ts index 0e064d0dcfb..bda27c89889 100644 --- a/spec-main/api-session-spec.ts +++ b/spec-main/api-session-spec.ts @@ -898,6 +898,30 @@ describe('session module', () => { }) }) + describe('ses.isPersistent()', () => { + afterEach(closeAllWindows) + + it('returns default session as persistent', () => { + const w = new BrowserWindow({ + show: false + }) + + const ses = w.webContents.session + + expect(ses.isPersistent()).to.be.true() + }) + + it('returns persist: session as persistent', () => { + const ses = session.fromPartition(`persist:${Math.random()}`) + expect(ses.isPersistent()).to.be.true() + }) + + it('returns temporary session as not persistent', () => { + const ses = session.fromPartition(`${Math.random()}`) + expect(ses.isPersistent()).to.be.false() + }) + }) + describe('ses.setUserAgent()', () => { afterEach(closeAllWindows)