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