diff --git a/atom/browser/api/atom_api_session.cc b/atom/browser/api/atom_api_session.cc index 7ce902484eab..eecb2521b77a 100644 --- a/atom/browser/api/atom_api_session.cc +++ b/atom/browser/api/atom_api_session.cc @@ -164,6 +164,8 @@ namespace api { namespace { +const char kPersistPrefix[] = "persist:"; + // The wrapSession funtion which is implemented in JavaScript using WrapSessionCallback = base::Callback)>; WrapSessionCallback g_wrap_session; @@ -534,10 +536,19 @@ mate::Handle Session::CreateFrom( // static mate::Handle Session::FromPartition( - v8::Isolate* isolate, const std::string& partition, bool in_memory) { - auto browser_context = brightray::BrowserContext::From(partition, in_memory); - return CreateFrom(isolate, - static_cast(browser_context.get())); + v8::Isolate* isolate, const std::string& partition) { + scoped_refptr browser_context; + if (partition.empty()) { + browser_context = brightray::BrowserContext::From("", false); + } else if (base::StartsWith(partition, kPersistPrefix, + base::CompareCase::SENSITIVE)) { + std::string name = partition.substr(8); + browser_context = brightray::BrowserContext::From(name, false); + } else { + browser_context = brightray::BrowserContext::From(partition, true); + } + return CreateFrom( + isolate, static_cast(browser_context.get())); } // static @@ -578,13 +589,12 @@ void SetWrapSession(const WrapSessionCallback& callback) { namespace { v8::Local FromPartition( - const std::string& partition, bool in_memory, mate::Arguments* args) { + const std::string& partition, mate::Arguments* args) { if (!atom::Browser::Get()->is_ready()) { args->ThrowError("Session can only be received when app is ready"); return v8::Null(args->isolate()); } - return atom::api::Session::FromPartition( - args->isolate(), partition, in_memory).ToV8(); + return atom::api::Session::FromPartition(args->isolate(), partition).ToV8(); } void Initialize(v8::Local exports, v8::Local unused, diff --git a/atom/browser/api/atom_api_session.h b/atom/browser/api/atom_api_session.h index 0868cbe18bee..d1943ba6ed1e 100644 --- a/atom/browser/api/atom_api_session.h +++ b/atom/browser/api/atom_api_session.h @@ -47,9 +47,9 @@ class Session: public mate::TrackableObject, static mate::Handle CreateFrom( v8::Isolate* isolate, AtomBrowserContext* browser_context); - // Gets the Session of |partition| and |in_memory|. + // Gets the Session of |partition|. static mate::Handle FromPartition( - v8::Isolate* isolate, const std::string& partition, bool in_memory); + v8::Isolate* isolate, const std::string& partition); AtomBrowserContext* browser_context() const { return browser_context_.get(); } diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 8622942668b0..48ef3ce03e00 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -285,16 +285,11 @@ WebContents::WebContents(v8::Isolate* isolate, std::string partition; mate::Handle session; if (options.Get("session", &session)) { - } else if (options.Get("partition", &partition) && !partition.empty()) { - bool in_memory = true; - if (base::StartsWith(partition, "persist:", base::CompareCase::SENSITIVE)) { - in_memory = false; - partition = partition.substr(8); - } - session = Session::FromPartition(isolate, partition, in_memory); + } else if (options.Get("partition", &partition)) { + session = Session::FromPartition(isolate, partition); } else { // Use the default session if not specified. - session = Session::FromPartition(isolate, "", false); + session = Session::FromPartition(isolate, ""); } session_.Reset(isolate, session.ToV8()); diff --git a/lib/browser/api/session.js b/lib/browser/api/session.js index 2fa0baca98da..86a7902ef597 100644 --- a/lib/browser/api/session.js +++ b/lib/browser/api/session.js @@ -2,24 +2,15 @@ const {EventEmitter} = require('events') const {app} = require('electron') const {fromPartition, _setWrapSession} = process.atomBinding('session') -const PERSIST_PREFIX = 'persist:' - -// Returns the Session from |partition| string. -exports.fromPartition = function (partition = '') { - if (partition === '') return exports.defaultSession - - if (partition.startsWith(PERSIST_PREFIX)) { - return fromPartition(partition.substr(PERSIST_PREFIX.length), false) - } else { - return fromPartition(partition, true) - } -} - // Returns the default session. -Object.defineProperty(exports, 'defaultSession', { - enumerable: true, - get: function () { - return fromPartition('', false) +Object.defineProperties(exports, { + defaultSession: { + enumerable: true, + get () { return fromPartition('') } + }, + fromPartition: { + enumerable: true, + value: fromPartition } })