Browse Source

feat: add API to check if session is persistent (#22622)

Erick Zhao 5 years ago
parent
commit
34e004015d

+ 7 - 0
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.

+ 5 - 0
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<v8::Promise> Session::GetBlobData(v8::Isolate* isolate,
                                             const std::string& uuid) {
   gin::Handle<DataPipeHolder> 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)

+ 1 - 0
shell/browser/api/electron_api_session.h

@@ -86,6 +86,7 @@ class Session : public gin_helper::TrackableObject<Session>,
   void AllowNTLMCredentialsForDomains(const std::string& domains);
   void SetUserAgent(const std::string& user_agent, gin_helper::Arguments* args);
   std::string GetUserAgent();
+  bool IsPersistent();
   v8::Local<v8::Promise> GetBlobData(v8::Isolate* isolate,
                                      const std::string& uuid);
   void DownloadURL(const GURL& url);

+ 24 - 0
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)