summaryrefslogtreecommitdiffstats
path: root/toolkit/xre/nsUpdateSyncManager.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--toolkit/xre/nsUpdateSyncManager.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/toolkit/xre/nsUpdateSyncManager.h b/toolkit/xre/nsUpdateSyncManager.h
new file mode 100644
index 0000000000..4c24cde8d4
--- /dev/null
+++ b/toolkit/xre/nsUpdateSyncManager.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsUpdateSyncManager_h__
+#define nsUpdateSyncManager_h__
+
+#include "mozilla/AlreadyAddRefed.h"
+#include "nsIObserver.h"
+#include "nsIUpdateService.h"
+#include "MultiInstanceLock.h"
+
+// The update sync manager is responsible for making sure that only one
+// instance of the application is running at the time we want to start updating
+// it. It does this by taking a multi-instance lock very early during the
+// application's startup process. Then, when app update tasks are ready to run,
+// the update service asks us whether anything else has also taken that lock,
+// which, if true, would mean another instance of the application is currently
+// running and performing update tasks should be avoided (the update service
+// also runs a timeout and eventually goes ahead with the update in order to
+// prevent an external program from effectively disabling updates).
+class nsUpdateSyncManager final : public nsIUpdateSyncManager,
+ public nsIObserver {
+ public:
+ explicit nsUpdateSyncManager(nsIFile* anAppFile = nullptr);
+
+ NS_DECL_THREADSAFE_ISUPPORTS
+ NS_DECL_NSIUPDATESYNCMANAGER
+ NS_DECL_NSIOBSERVER
+
+ static already_AddRefed<nsUpdateSyncManager> GetSingleton();
+
+ private:
+ ~nsUpdateSyncManager();
+
+ nsUpdateSyncManager(nsUpdateSyncManager&) = delete;
+ nsUpdateSyncManager(nsUpdateSyncManager&&) = delete;
+ nsUpdateSyncManager& operator=(nsUpdateSyncManager&) = delete;
+ nsUpdateSyncManager& operator=(nsUpdateSyncManager&&) = delete;
+
+ nsresult OpenLock(nsIFile* anAppFile = nullptr);
+ void ReleaseLock();
+
+ mozilla::MultiInstLockHandle mLock = MULTI_INSTANCE_LOCK_HANDLE_ERROR;
+};
+
+#endif // nsUpdateSyncManager_h__