| // 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_ |