Update API to get/setLoginItemSettings
authorKevin Sawicki <kevinsawicki@gmail.com>
Thu, 7 Jul 2016 23:29:09 +0000 (16:29 -0700)
committerKevin Sawicki <kevinsawicki@gmail.com>
Thu, 7 Jul 2016 23:29:09 +0000 (16:29 -0700)
atom/browser/api/atom_api_app.cc
atom/browser/browser.h
atom/browser/browser_mac.mm
spec/api-app-spec.js

index f8a7077a1268eb7d9a0951dd7a9968407996bdd4..b0a842d4ca1846b159a4d47cbba99ff88c1b13b8 100644 (file)
@@ -71,6 +71,33 @@ struct Converter<Browser::UserTask> {
 };
 #endif
 
+#if defined(OS_MACOSX)
+template<>
+struct Converter<Browser::LoginItemSettings> {
+  static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
+                     Browser::LoginItemSettings* out) {
+    mate::Dictionary dict;
+    if (!ConvertFromV8(isolate, val, &dict))
+      return false;
+
+    dict.Get("openAtLogin", &(out->open_at_login));
+    dict.Get("openAsHidden", &(out->open_as_hidden));
+    return true;
+  }
+
+  static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
+                                   Browser::LoginItemSettings val) {
+    mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
+    dict.Set("openAtLogin", val.open_at_login);
+    dict.Set("openAsHidden", val.open_as_hidden);
+    dict.Set("restoreState", val.restore_state);
+    dict.Set("openedAtLogin", val.opened_at_login);
+    dict.Set("openedAsHidden", val.opened_as_hidden);
+    return dict.GetHandle();
+  }
+};
+#endif
+
 }  // namespace mate
 
 
@@ -529,12 +556,10 @@ void App::BuildPrototype(
                  base::Bind(&Browser::SetUserActivity, browser))
       .SetMethod("getCurrentActivityType",
                  base::Bind(&Browser::GetCurrentActivityType, browser))
-      .SetMethod("getLoginItemStatus",
-                 base::Bind(&Browser::GetLoginItemStatus, browser))
-      .SetMethod("setAsLoginItem",
-                 base::Bind(&Browser::SetAsLoginItem, browser))
-      .SetMethod("removeAsLoginItem",
-                 base::Bind(&Browser::RemoveAsLoginItem, browser))
+      .SetMethod("getLoginItemSettings",
+                 base::Bind(&Browser::GetLoginItemSettings, browser))
+      .SetMethod("setLoginItemSettings",
+                 base::Bind(&Browser::SetLoginItemSettings, browser))
 #endif
 #if defined(OS_WIN)
       .SetMethod("setUserTasks", base::Bind(&Browser::SetUserTasks, browser))
index 6aeb6ed0923eb69d3a21ba3c474585f7a42bb396..be51d7ec006d08c99637e70c4d596c54cf616b56 100644 (file)
@@ -92,6 +92,14 @@ class Browser : public WindowListObserver {
   int GetBadgeCount();
 
 #if defined(OS_MACOSX)
+  struct LoginItemSettings {
+    bool open_at_login = false;
+    bool open_as_hidden = false;
+    bool restore_state = false;
+    bool opened_at_login = false;
+    bool opened_as_hidden = false;
+  };
+
   // Hide the application.
   void Hide();
 
@@ -135,14 +143,11 @@ class Browser : public WindowListObserver {
   // Set docks' icon.
   void DockSetIcon(const gfx::Image& image);
 
-  // Get login item status of app
-  v8::Local<v8::Value> GetLoginItemStatus(mate::Arguments* args);
-
-  // Set app as a login item
-  void SetAsLoginItem(mate::Arguments* args);
+  // Get login item settings of app
+  LoginItemSettings GetLoginItemSettings();
 
-  // Remove app as a login item
-  void RemoveAsLoginItem();
+  // Set login item settings of app
+  void SetLoginItemSettings(LoginItemSettings settings);
 #endif  // defined(OS_MACOSX)
 
 #if defined(OS_WIN)
index 6207a221e644279df6df61f9a9c80e0392a0269e..4dfa3aa96308d9b600fb38775508bf1d002c9651 100644 (file)
@@ -15,7 +15,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/sys_string_conversions.h"
 #include "brightray/common/application_info.h"
-#include "native_mate/dictionary.h"
 #include "net/base/mac/url_conversions.h"
 #include "url/gurl.h"
 
@@ -150,26 +149,22 @@ bool Browser::ContinueUserActivity(const std::string& type,
   return prevent_default;
 }
 
-v8::Local<v8::Value> Browser::GetLoginItemStatus(mate::Arguments* args) {
-  bool hidden = false;
-  mate::Dictionary dict = mate::Dictionary::CreateEmpty(args->isolate());
-  dict.Set("openAtLogin", base::mac::CheckLoginItemStatus(&hidden));
-  dict.Set("openAsHidden", hidden);
-  dict.Set("restoreState", base::mac::WasLaunchedAsLoginItemRestoreState());
-  dict.Set("openedAtLogin", base::mac::WasLaunchedAsLoginOrResumeItem());
-  dict.Set("openedAsHidden", base::mac::WasLaunchedAsHiddenLoginItem());
-
-  return dict.GetHandle();
-}
-
-void Browser::SetAsLoginItem(mate::Arguments* args) {
-  bool hidden = false;
-  args->GetNext(&hidden);
-  base::mac::AddToLoginItems(hidden);
+Browser::LoginItemSettings Browser::GetLoginItemSettings() {
+  LoginItemSettings settings;
+  settings.open_at_login = base::mac::CheckLoginItemStatus(
+      &settings.open_as_hidden);
+  settings.restore_state = base::mac::WasLaunchedAsLoginItemRestoreState();
+  settings.opened_at_login = base::mac::WasLaunchedAsLoginOrResumeItem();
+  settings.opened_as_hidden = base::mac::WasLaunchedAsHiddenLoginItem();
+  return settings;
 }
 
-void Browser::RemoveAsLoginItem() {
-  base::mac::RemoveFromLoginItems();
+void Browser::SetLoginItemSettings(LoginItemSettings settings) {
+  if (settings.open_at_login) {
+    base::mac::AddToLoginItems(settings.open_as_hidden);
+  } else {
+    base::mac::RemoveFromLoginItems();
+  }
 }
 
 std::string Browser::GetExecutableFileVersion() const {
index af6a7c7e6887e6d3cf24a38b310c6dfe373b0927..de582358553d17a85e3969148f32c2f48d20c88a 100644 (file)
@@ -299,28 +299,44 @@ describe('app module', function () {
     })
   })
 
-  describe('app.getLoginItemStatus API', function () {
+  describe('app.get/setLoginItemSettings API', function () {
     if (process.platform !== 'darwin') return
 
     beforeEach(function () {
-      assert.equal(app.getLoginItemStatus().openedAtLogin, false)
-      assert.equal(app.getLoginItemStatus().openedAsHidden, false)
-      assert.equal(app.getLoginItemStatus().restoreState, false)
+      app.setLoginItemSettings({openAtLogin: false})
     })
 
     afterEach(function () {
-      app.removeAsLoginItem()
-      assert.equal(app.getLoginItemStatus().openAtLogin, false)
+      app.setLoginItemSettings({openAtLogin: false})
     })
 
     it('returns the login item status of the app', function () {
-      app.setAsLoginItem(true)
-      assert.equal(app.getLoginItemStatus().openAtLogin, true)
-      assert.equal(app.getLoginItemStatus().openAsHidden, true)
+      app.setLoginItemSettings({openAtLogin: true})
+      assert.deepEqual(app.getLoginItemSettings(), {
+        openAtLogin: true,
+        openAsHidden: false,
+        openedAtLogin: false,
+        openedAsHidden: false,
+        restoreState: false
+      })
+
+      app.setLoginItemSettings({openAtLogin: true, openAsHidden: true})
+      assert.deepEqual(app.getLoginItemSettings(), {
+        openAtLogin: true,
+        openAsHidden: true,
+        openedAtLogin: false,
+        openedAsHidden: false,
+        restoreState: false
+      })
 
-      app.setAsLoginItem(false)
-      assert.equal(app.getLoginItemStatus().openAtLogin, true)
-      assert.equal(app.getLoginItemStatus().openAsHidden, false)
+      app.setLoginItemSettings({})
+      assert.deepEqual(app.getLoginItemSettings(), {
+        openAtLogin: false,
+        openAsHidden: false,
+        openedAtLogin: false,
+        openedAsHidden: false,
+        restoreState: false
+      })
     })
   })
 })