Index: chrome/browser/web_resource/promo_resource_service.h |
=================================================================== |
--- chrome/browser/web_resource/promo_resource_service.h (revision 102893) |
+++ chrome/browser/web_resource/promo_resource_service.h (working copy) |
@@ -8,6 +8,7 @@ |
#include <string> |
+#include "chrome/browser/web_resource/notification_promo.h" |
#include "chrome/browser/web_resource/web_resource_service.h" |
#include "chrome/common/chrome_version_info.h" |
@@ -27,8 +28,19 @@ |
// messages, which have until now been piggybacked onto the old tips server |
// structure. (see http://crbug.com/70634 for details.) |
class PromoResourceService |
- : public WebResourceService { |
+ : public WebResourceService, |
+ public NotificationPromo::Delegate { |
public: |
+ // Identifies types of Chrome builds for promo targeting. |
+ enum BuildType { |
+ NO_BUILD = 0, |
+ DEV_BUILD = 1, |
+ BETA_BUILD = 1 << 1, |
+ STABLE_BUILD = 1 << 2, |
+ CANARY_BUILD = 1 << 3, |
+ ALL_BUILDS = (1 << 4) - 1, |
+ }; |
+ |
// Checks for conditions to show promo: start/end times, channel, etc. |
static bool CanShowNotificationPromo(Profile* profile); |
@@ -38,13 +50,15 @@ |
explicit PromoResourceService(Profile* profile); |
+ static chrome::VersionInfo::Channel GetChannel(); |
+ static bool IsBuildTargeted(chrome::VersionInfo::Channel, int builds_allowed); |
+ |
// Default server of dynamically loaded NTP HTML elements. |
static const char* kDefaultPromoResourceServer; |
private: |
- FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, IsBuildTargeted); |
+ FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, IsBuildTargetedTest); |
FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, UnpackLogoSignal); |
- FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, UnpackNotificationSignal); |
FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, UnpackWebStoreSignal); |
FRIEND_TEST_ALL_PREFIXES( |
PromoResourceServiceTest, UnpackPartialWebStoreSignal); |
@@ -55,16 +69,6 @@ |
FRIEND_TEST_ALL_PREFIXES( |
PromoResourceServiceTest, UnpackWebStoreSignalHttpLogo); |
- // Identifies types of Chrome builds for promo targeting. |
- enum BuildType { |
- NO_BUILD = 0, |
- DEV_BUILD = 1, |
- BETA_BUILD = 1 << 1, |
- STABLE_BUILD = 1 << 2, |
- CANARY_BUILD = 1 << 3, |
- ALL_BUILDS = (1 << 4) - 1, |
- }; |
- |
virtual ~PromoResourceService(); |
int GetPromoServiceVersion(); |
@@ -75,17 +79,14 @@ |
void Init(); |
- static bool IsBuildTargeted(chrome::VersionInfo::Channel channel, |
- int builds_targeted); |
- |
// Returns true if |builds_targeted| includes the release channel Chrome |
// belongs to. For testing purposes, you can override the current channel |
// with set_channel. |
- bool IsThisBuildTargeted(int builds_targeted); |
+ bool IsBuildTargeted(int builds_targeted); |
// Schedule a notification that a web resource is either going to become |
// available or be no longer valid. |
- void ScheduleNotification(double ms_start_time, double ms_end_time); |
+ void ScheduleNotification(double start, double end); |
// Schedules the initial notification for when the web resource is going |
// to become available or no longer valid. This performs a few additional |
@@ -96,18 +97,19 @@ |
// Overrides the current Chrome release channel for testing purposes. |
void set_channel(chrome::VersionInfo::Channel channel) { channel_ = channel; } |
- virtual void Unpack(const base::DictionaryValue& parsed_json); |
+ // WebResourceService override. |
+ virtual void Unpack(const base::DictionaryValue& parsed_json) OVERRIDE; |
- // Unpack the web resource as a custom promo signal. Expects a start and end |
- // signal, with the promo to be shown in the tooltip of the start signal |
- // field. Delivery will be in json in the form of: |
+ // Unpack the web resource as a custom notification signal. Expects a start |
+ // and end signal, with the promo to be shown in the tooltip of the start |
+ // signal field. Delivery will be in json in the form of: |
// { |
// "topic": { |
// "answers": [ |
// { |
// "answer_id": "1067976", |
// "name": "promo_start", |
- // "question": "1:24:10", |
+ // "question": "1:24:10:10", |
// "tooltip": |
// "Click \u003ca href=http://www.google.com\u003ehere\u003c/a\u003e!", |
// "inproduct": "10/8/09 12:00", |
@@ -136,9 +138,10 @@ |
// this promo (see the BuildType enum in web_resource_service.cc), the |
// number of hours that each promo group should see it, and the maximum promo |
// group that should see it, separated by ":". |
- // For example, "7:24:5" would indicate that all groups with ids less than 5, |
- // and with dev, beta and stable builds, should see the promo. The groups |
- // ramp up so 1 additional group sees the promo every 24 hours. |
+ // For example, "7:24:5:10" would indicate that all groups with ids less than |
+ // 5, and with dev, beta and stable builds, should see the promo a maximum of |
+ // 10 times. The groups ramp up so 1 additional group sees the promo every |
+ // 24 hours. |
// |
void UnpackNotificationSignal(const base::DictionaryValue& parsed_json); |
@@ -202,44 +205,9 @@ |
// answer_id: the promo's id |
void UnpackWebStoreSignal(const base::DictionaryValue& parsed_json); |
- // Parse the answers array element. |
- void ParseNotification(base::DictionaryValue* a_dic, |
- std::string* promo_start_string, |
- std::string* promo_end_string); |
+ // NotificationPromo::Delegate override. |
+ virtual void OnNewNotification(double start, double end) OVERRIDE; |
- // Set notification promo params from a question string, which is of the form |
- // <build_type>:<time_slice>:<max_group>. |
- void SetNotificationParams(base::DictionaryValue* a_dic); |
- |
- // Extract the notification promo text from the tooltip string. |
- void SetNotificationLine(base::DictionaryValue* a_dic); |
- |
- // Check if this notification promo is new based on start/end times, |
- // and trigger events accordingly. |
- void CheckForNewNotification(const std::string& promo_start_string, |
- const std::string& promo_end_string); |
- |
- // Calculate the notification promo times, taking into account our group, and |
- // the group time slice. |
- void ParseNewNotificationTimes(const std::string& promo_start_string, |
- const std::string& promo_end_string, |
- double* promo_start, |
- double* promo_end); |
- |
- // Calculates notification promo start time with group-based time slice |
- // offset. |
- static double GetNotificationStartTime(PrefService* prefs); |
- |
- // Create a new notification promo group. |
- int ResetNotificationGroup(); |
- |
- // Get saved notification promo times. |
- void GetCurrentNotificationTimes(double* old_promo_start, |
- double* old_promo_end); |
- |
- // Actions on receiving a new notification promo. |
- void OnNewNotification(double promo_start, double promo_end); |
- |
// The profile this service belongs to. |
Profile* profile_; |