Index: chrome/browser/web_resource/notification_promo.h |
=================================================================== |
--- chrome/browser/web_resource/notification_promo.h (revision 111558) |
+++ chrome/browser/web_resource/notification_promo.h (working copy) |
@@ -10,30 +10,40 @@ |
#include "base/basictypes.h" |
#include "base/gtest_prod_util.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
namespace base { |
class DictionaryValue; |
} |
+namespace net { |
+ class URLRequestContextGetter; |
+} |
+ |
class PrefService; |
+class Profile; |
// Helper class for PromoResourceService that parses promo notification info |
// from json or prefs. |
-class NotificationPromo { |
+class NotificationPromo |
+ : public base::RefCountedThreadSafe<NotificationPromo> { |
public: |
class Delegate { |
public: |
virtual ~Delegate() {} |
- virtual void OnNewNotification(double start, double end) = 0; |
+ virtual void OnNotificationParsed(double start, double end, |
+ bool new_notification) = 0; |
// For testing. |
virtual bool IsBuildAllowed(int builds_targeted) const { return false; } |
virtual int CurrentPlatform() const { return PLATFORM_NONE; } |
}; |
- explicit NotificationPromo(PrefService* prefs, Delegate* delegate); |
+ // Static factory for creating new notification promos. |
+ static NotificationPromo* Create(Profile* profile, Delegate* delegate); |
// Initialize from json/prefs. |
- void InitFromJson(const base::DictionaryValue& json); |
+ void InitFromJson(const base::DictionaryValue& json, bool do_cookie_check); |
void InitFromPrefs(); |
// Can this promo be shown? |
@@ -51,6 +61,10 @@ |
static void RegisterUserPrefs(PrefService* prefs); |
private: |
+ friend class base::RefCountedThreadSafe<NotificationPromo>; |
+ NotificationPromo(Profile* profile, Delegate* delegate); |
+ virtual ~NotificationPromo(); |
+ |
// For testing. |
friend class NotificationPromoTestDelegate; |
FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, GetNextQuestionValueTest); |
@@ -65,6 +79,12 @@ |
PLATFORM_ALL = (1 << 4) -1, |
}; |
+ // Flags for feature_mask_. |
+ enum Feature { |
+ NO_FEATURE = 0, |
+ FEATURE_GPLUS = 1, |
+ }; |
+ |
// Users are randomly assigned to one of kMaxGroupSize + 1 buckets, in order |
// to be able to roll out promos slowly, or display different promos to |
// different groups. |
@@ -75,16 +95,26 @@ |
void Parse(const base::DictionaryValue* dict); |
// Set promo notification params from a question string, which is of the form |
- // <build_type>:<time_slice>:<max_group>:<max_views> |
+ // <build_type>:<time_slice>:<max_group>:<max_views>:<platform>:<feature_mask> |
void ParseParams(const base::DictionaryValue* dict); |
// Check if this promo notification is new based on start/end times, |
// and trigger events accordingly. |
- void CheckForNewNotification(); |
+ void CheckForNewNotification(bool found_cookie); |
// Actions on receiving a new promo notification. |
void OnNewNotification(); |
+ // Async method to get cookies from GPlus url. Used to check if user is |
+ // logged in to GPlus. |
+ void GetCookies(net::URLRequestContextGetter* getter); |
+ |
+ // Callback for GetCookies. |
+ void GetCookiesCallback(const std::string& cookies); |
+ |
+ // Parse cookies in search of a SID= value. |
+ static bool CheckForGPlusCookie(const std::string& cookies); |
+ |
// Create a new promo notification group. |
static int NewGroup(); |
@@ -110,6 +140,7 @@ |
// For testing. |
bool operator==(const NotificationPromo& other) const; |
+ Profile* profile_; |
PrefService* prefs_; |
Delegate* delegate_; |
@@ -121,11 +152,13 @@ |
int max_group_; |
int max_views_; |
int platform_; |
+ int feature_mask_; |
int group_; |
int views_; |
std::string text_; |
bool closed_; |
+ bool gplus_; |
DISALLOW_COPY_AND_ASSIGN(NotificationPromo); |
}; |