| Index: chrome/browser/web_resource/promo_resource_service.h | 
| diff --git a/chrome/browser/web_resource/promo_resource_service.h b/chrome/browser/web_resource/promo_resource_service.h | 
| index 733e6aef72f920440623ca7d5d7c9bbeef6f7048..2149890a2823fa34a5886aad93b729088300e3a8 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_ | 
| - | 
|  |