summaryrefslogtreecommitdiffstats
path: root/toolkit/components/nimbus/lib/NimbusFeatures.h
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/nimbus/lib/NimbusFeatures.h')
-rw-r--r--toolkit/components/nimbus/lib/NimbusFeatures.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/toolkit/components/nimbus/lib/NimbusFeatures.h b/toolkit/components/nimbus/lib/NimbusFeatures.h
new file mode 100644
index 0000000000..7fe9ac8b5c
--- /dev/null
+++ b/toolkit/components/nimbus/lib/NimbusFeatures.h
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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 mozilla_NimbusFeatures_h
+#define mozilla_NimbusFeatures_h
+
+#include "mozilla/Preferences.h"
+#include "nsTHashSet.h"
+
+namespace mozilla {
+
+class NimbusFeatures {
+ private:
+ // This branch is used to store experiment data
+ static constexpr auto kSyncDataPrefBranch = "nimbus.syncdatastore."_ns;
+ // This branch is used to store rollouts data
+ static constexpr auto kSyncRolloutsPrefBranch =
+ "nimbus.syncdefaultsstore."_ns;
+ static void GetPrefName(const nsACString& branchPrefix,
+ const nsACString& aFeatureId,
+ const nsACString& aVariable, nsACString& aPref);
+
+ static nsresult GetExperimentSlug(const nsACString& aFeatureId,
+ nsACString& aExperimentSlug,
+ nsACString& aBranchSlug);
+
+ public:
+ static bool GetBool(const nsACString& aFeatureId, const nsACString& aVariable,
+ bool aDefault);
+
+ static int GetInt(const nsACString& aFeatureId, const nsACString& aVariable,
+ int aDefault);
+
+ static nsresult OnUpdate(const nsACString& aFeatureId,
+ const nsACString& aVariable,
+ PrefChangedFunc aUserCallback, void* aUserData);
+
+ static nsresult OffUpdate(const nsACString& aFeatureId,
+ const nsACString& aVariable,
+ PrefChangedFunc aUserCallback, void* aUserData);
+
+ static nsresult RecordExposureEvent(const nsACString& aFeatureId,
+ const bool aOnce = false);
+};
+
+} // namespace mozilla
+
+#endif