Index: chrome/installer/util/experiment.h |
diff --git a/chrome/installer/util/experiment.h b/chrome/installer/util/experiment.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cc75f1e437a1d585274729d515a363b1724e544b |
--- /dev/null |
+++ b/chrome/installer/util/experiment.h |
@@ -0,0 +1,96 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_INSTALLER_UTIL_EXPERIMENT_H_ |
+#define CHROME_INSTALLER_UTIL_EXPERIMENT_H_ |
+ |
+#include "base/time/time.h" |
+#include "chrome/installer/util/experiment_metrics.h" |
+ |
+namespace installer { |
+ |
+class ExperimentStorage; |
+ |
+// The experiment state for the current user. Experiment state is a combination |
+// of the per-install ExperimentMetrics and the per-user experiment data. |
+class Experiment { |
+ public: |
+ Experiment(); |
+ Experiment(Experiment&&); |
+ Experiment(const Experiment&); |
+ ~Experiment(); |
+ Experiment& operator=(Experiment&&) = default; |
+ Experiment& operator=(const Experiment&) = default; |
+ |
+ // Initializes this instance based on |metrics|. |
+ void InitializeFromMetrics(const ExperimentMetrics& metrics); |
+ |
+ // Moves this user into |state|, updating metrics as appropriate. |
+ void SetState(ExperimentMetrics::State state); |
+ |
+ // Assigns this user to |group|. |
+ void AssignGroup(int group); |
+ |
+ // Setters for storing data relating to experiment. These should only be |
+ // called if the experiment is between initial and terminal states. |
+ |
+ // Fill toast location value. |
+ void SetToastLocation(ExperimentMetrics::ToastLocation location); |
+ |
+ // Fill number of days user was inactive before toast was shown. |
+ void SetInactiveDays(int days); |
+ |
+ // Fill number of times toast was displayed. |
+ void SetToastCount(int count); |
+ |
+ // Fill fine grained timestamp for first time the toast was shown. |
+ void SetDisplayTime(base::Time time); |
+ |
+ // Time delta between user session start and toast display. |
+ void SetUserSessionUptime(base::TimeDelta time_delta); |
+ |
+ // Time delta between toast display and action taken on toast display. |
+ void SetActionDelay(base::TimeDelta time_delta); |
+ |
+ const ExperimentMetrics& metrics() const { return metrics_; } |
+ |
+ ExperimentMetrics::State state() const { return state_; } |
+ |
+ int group() const { return group_; } |
+ |
+ ExperimentMetrics::ToastLocation toast_location() const { |
+ return toast_location_; |
+ } |
+ |
+ int inactive_days() const { return inactive_days_; } |
+ |
+ int toast_count() const { return toast_count_; } |
+ |
+ base::Time first_display_time() const { return first_display_time_; } |
+ |
+ base::Time latest_display_time() const { return latest_display_time_; } |
+ |
+ base::TimeDelta user_session_uptime() const { return user_session_uptime_; } |
+ |
+ base::TimeDelta action_delay() const { return action_delay_; } |
+ |
+ private: |
+ friend class ExperimentStorage; |
+ |
+ ExperimentMetrics metrics_ = ExperimentMetrics(); |
+ ExperimentMetrics::State state_ = ExperimentMetrics::kUninitialized; |
+ int group_ = 0; |
+ ExperimentMetrics::ToastLocation toast_location_ = |
+ ExperimentMetrics::kOverTaskbarPin; |
+ int inactive_days_ = 0; |
+ int toast_count_ = 0; |
+ base::Time first_display_time_; |
+ base::Time latest_display_time_; |
+ base::TimeDelta user_session_uptime_; |
+ base::TimeDelta action_delay_; |
+}; |
+ |
+} // namespace installer |
+ |
+#endif // CHROME_INSTALLER_UTIL_EXPERIMENT_H_ |