Index: chrome/browser/instant/promo_counter.h |
diff --git a/chrome/browser/instant/promo_counter.h b/chrome/browser/instant/promo_counter.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..480f67714f3a6cf4b7d3c4faf588df04349203a5 |
--- /dev/null |
+++ b/chrome/browser/instant/promo_counter.h |
@@ -0,0 +1,78 @@ |
+// Copyright (c) 2010 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_BROWSER_INSTANT_PROMO_COUNTER_H_ |
+#define CHROME_BROWSER_INSTANT_PROMO_COUNTER_H_ |
+#pragma once |
+ |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/time.h" |
+ |
+class PrefService; |
+class Profile; |
+ |
+// PromoCounter is used to track whether a promo should be shown. The promo is |
+// shown for a specified number of days or sessions (launches of chrome). |
+class PromoCounter { |
+ public: |
+ // Creates a new PromoCounter. |pref_key| is used to store prefs related to |
+ // the promo. |histogram_key| is the key used to store histograms related to |
+ // the promo. See the .cc file for the exact prefs and histogram values used. |
+ // |ShouldShow| returns true until the users restarts chrome |max_sessions| or |
+ // runs Chrome for |max_days|, or |Hide| is invoked. |
+ PromoCounter(Profile* profile, |
+ const std::string& pref_key, |
+ const std::string& histogram_key, |
+ int max_sessions, |
+ int max_days); |
+ ~PromoCounter(); |
+ |
+ // Registers the preferences used by PromoCounter. |
+ static void RegisterUserPrefs(PrefService* prefs, |
+ const std::string& base_key); |
+ |
+ // Returns true if the promo should be shown. |
+ bool ShouldShow(base::Time current_time); |
+ |
+ // Permanently hides the promo. |
+ void Hide(); |
+ |
+ private: |
+ // Called the first time ShouldShow is invoked. Updates the necessary pref |
+ // state and show_. |
+ void Init(base::Time current_time); |
+ |
+ // Invoked if the max number of sessions has been encountered. |
+ void MaxSessionsEncountered(base::Time current_time); |
+ |
+ // Invoked if the max number of days has elapsed. |
+ void MaxTimeLapsed(base::Time current_time); |
+ |
+ Profile* profile_; |
+ |
+ // Base key all prefs are stored under. |
+ const std::string pref_key_; |
+ |
+ // Base key used for histograms. |
+ const std::string histogram_key_; |
+ |
+ // Max number of sessions/days before the promo stops. |
+ const int max_sessions_; |
+ const int max_days_; |
+ |
+ // Has Init been invoked? |
+ bool did_init_; |
+ |
+ // Return value from ShouldShow. |
+ bool show_; |
+ |
+ // Initial time the promo was first shown. |
+ base::Time initial_show_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PromoCounter); |
+}; |
+ |
+#endif // CHROME_BROWSER_INSTANT_PROMO_COUNTER_H_ |