summaryrefslogtreecommitdiffstats
path: root/chrome/browser/web_resource/promo_resource_service.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/web_resource/promo_resource_service.h')
-rw-r--r--chrome/browser/web_resource/promo_resource_service.h101
1 files changed, 85 insertions, 16 deletions
diff --git a/chrome/browser/web_resource/promo_resource_service.h b/chrome/browser/web_resource/promo_resource_service.h
index 733e6ae..2149890a 100644
--- a/chrome/browser/web_resource/promo_resource_service.h
+++ b/chrome/browser/web_resource/promo_resource_service.h
@@ -16,6 +16,8 @@ bool CanShowPromo(Profile* profile);
} // namespace PromoResourceServiceUtil
+class PrefService;
+
// A PromoResourceService fetches data from a web resource server to be used to
// dynamically change the appearance of the New Tab Page. For example, it has
// been used to fetch "tips" to be displayed on the NTP, or to display
@@ -27,8 +29,61 @@ bool CanShowPromo(Profile* profile);
class PromoResourceService
: public WebResourceService {
public:
+ static bool IsBuildTargeted(const std::string& channel, int builds_targeted);
+
+ static void RegisterPrefs(PrefService* local_state);
+
+ static void RegisterUserPrefs(PrefService* prefs);
+
explicit PromoResourceService(Profile* profile);
+ // Default server of dynamically loaded NTP HTML elements.
+ static const char* kDefaultPromoResourceServer;
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, UnpackLogoSignal);
+ FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, UnpackPromoSignal);
+ FRIEND_TEST_ALL_PREFIXES(PromoResourceServiceTest, UnpackWebStoreSignal);
+
+ // 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,
+ };
+
+ virtual ~PromoResourceService();
+
+ int GetPromoServiceVersion();
+
+ // Gets the locale of the last promos fetched from the server. This is saved
+ // so we can fetch new data if the locale changes.
+ std::string GetPromoLocale();
+
+ void Init();
+
+ // 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);
+
+ // 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);
+
+ // Schedules the initial notification for when the web resource is going
+ // to become available or no longer valid. This performs a few additional
+ // checks than ScheduleNotification, namely it schedules updates immediately
+ // if the promo service or Chrome locale has changed.
+ void ScheduleNotificationOnInit();
+
+ // Overrides the current Chrome release channel for testing purposes.
+ void set_channel(const char* channel) { channel_ = channel; }
+
+ virtual void Unpack(const DictionaryValue& parsed_json);
+
// 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:
@@ -69,7 +124,6 @@ class PromoResourceService
// For example, "7:24" would indicate that all builds should see the promo,
// and each group should see it for 24 hours.
//
- // Public for unit testing.
void UnpackPromoSignal(const DictionaryValue& parsed_json);
// Unpack the promo resource as a custom logo signal. Expects a start and end
@@ -98,29 +152,44 @@ class PromoResourceService
// }
// }
//
- // Public for unit testing.
void UnpackLogoSignal(const DictionaryValue& parsed_json);
- // Default server of dynamically loaded NTP HTML elements.
- static const char* kDefaultPromoResourceServer;
-
- private:
- virtual ~PromoResourceService();
-
- virtual void Unpack(const DictionaryValue& parsed_json);
-
- void Init();
-
- // 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);
+ // Unpack the web store promo. Expects JSON delivery in the following format:
+ // {
+ // "topic": {
+ // "answers": [
+ // {
+ // "answer_id": "1143011",
+ // "name": "webstore_promo:15",
+ // "question": "Browse thousands of apps and games for Chrome.",
+ // "inproduct_target": "Visit the Chrome Web Store",
+ // "inproduct": "https://chrome.google.com/webstore?hl=en",
+ // "tooltip": "No thanks, hide this"
+ // },
+ // ...
+ // ]
+ // }
+ // }
+ // The properties are defined as follows:
+ // inproduct: the release channels targeted (bitwise or of BuildTypes)
+ // question: the promo header text
+ // inproduct_target: the promo button text
+ // inproduct: the promo button link
+ // tooltip: the text for the "hide this" link on the promo
+ // name: starts with "webstore_promo" to identify the signal. the second
+ // part contains the release channels targeted (bitwise or of
+ // BuildTypes)
+ // answer_id: the promo's id
+ void UnpackWebStoreSignal(const DictionaryValue& parsed_json);
// Gets mutable dictionary attached to user's preferences, so that we
// can write resource data back to user's pref file.
DictionaryValue* web_resource_cache_;
+ // Overrides the current Chrome release channel for testing purposes.
+ const char* channel_;
+
DISALLOW_COPY_AND_ASSIGN(PromoResourceService);
};
#endif // CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_
-