Browse Source

refactor: add SessionPreferences::CreateForBrowserContext() (#38712)

Copy the NativeWindowRelay::CreateForWebContents() idiom
to simplify SessionPreferences's constructor and lifecycle.

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <[email protected]>
trop[bot] 1 year ago
parent
commit
bb2f62f95f

+ 1 - 1
shell/browser/api/electron_api_session.cc

@@ -342,7 +342,7 @@ Session::Session(v8::Isolate* isolate, ElectronBrowserContext* browser_context)
   // Observe DownloadManager to get download notifications.
   browser_context->GetDownloadManager()->AddObserver(this);
 
-  new SessionPreferences(browser_context);
+  SessionPreferences::CreateForBrowserContext(browser_context);
 
   protocol_.Reset(isolate, Protocol::Create(isolate, browser_context).ToV8());
 

+ 7 - 2
shell/browser/session_preferences.cc

@@ -13,10 +13,15 @@ namespace electron {
 // static
 int SessionPreferences::kLocatorKey = 0;
 
-SessionPreferences::SessionPreferences(content::BrowserContext* context) {
-  context->SetUserData(&kLocatorKey, base::WrapUnique(this));
+// static
+void SessionPreferences::CreateForBrowserContext(
+    content::BrowserContext* context) {
+  DCHECK(context);
+  context->SetUserData(&kLocatorKey,
+                       base::WrapUnique(new SessionPreferences{}));
 }
 
+SessionPreferences::SessionPreferences() = default;
 SessionPreferences::~SessionPreferences() = default;
 
 // static

+ 4 - 1
shell/browser/session_preferences.h

@@ -23,7 +23,8 @@ class SessionPreferences : public base::SupportsUserData::Data {
   static std::vector<base::FilePath> GetValidPreloads(
       content::BrowserContext* context);
 
-  explicit SessionPreferences(content::BrowserContext* context);
+  static void CreateForBrowserContext(content::BrowserContext* context);
+
   ~SessionPreferences() override;
 
   void set_preloads(const std::vector<base::FilePath>& preloads) {
@@ -32,6 +33,8 @@ class SessionPreferences : public base::SupportsUserData::Data {
   const std::vector<base::FilePath>& preloads() const { return preloads_; }
 
  private:
+  SessionPreferences();
+
   // The user data key.
   static int kLocatorKey;