Home | History | Annotate | Download | only in web_resource
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_
      6 #define CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/memory/weak_ptr.h"
     11 #include "chrome/browser/web_resource/web_resource_service.h"
     12 
     13 class NotificationPromo;
     14 class PrefRegistrySimple;
     15 class PrefService;
     16 
     17 namespace base {
     18 class DictionaryValue;
     19 }
     20 
     21 namespace user_prefs {
     22 class PrefRegistrySyncable;
     23 }
     24 
     25 // A PromoResourceService fetches data from a web resource server to be used to
     26 // dynamically change the appearance of the New Tab Page. For example, it has
     27 // been used to fetch "tips" to be displayed on the NTP, or to display
     28 // promotional messages to certain groups of Chrome users.
     29 class PromoResourceService : public WebResourceService {
     30  public:
     31   static void RegisterPrefs(PrefRegistrySimple* registry);
     32   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
     33   static void MigrateUserPrefs(PrefService* user_prefs);
     34 
     35   PromoResourceService();
     36 
     37  private:
     38   virtual ~PromoResourceService();
     39 
     40   // Schedule a notification that a web resource is either going to become
     41   // available or be no longer valid.
     42   void ScheduleNotification(const NotificationPromo& notification_promo);
     43 
     44   // Schedules the initial notification for when the web resource is going
     45   // to become available or no longer valid. This performs a few additional
     46   // checks than ScheduleNotification, namely it schedules updates immediately
     47   // if the promo service or Chrome locale has changed.
     48   void ScheduleNotificationOnInit();
     49 
     50   // If delay_ms is positive, schedule notification with the delay.
     51   // If delay_ms is 0, notify immediately by calling WebResourceStateChange().
     52   // If delay_ms is negative, do nothing.
     53   void PostNotification(int64 delay_ms);
     54 
     55   // Notify listeners that the state of a web resource has changed.
     56   void PromoResourceStateChange();
     57 
     58   // WebResourceService override to process the parsed information.
     59   virtual void Unpack(const base::DictionaryValue& parsed_json) OVERRIDE;
     60 
     61   // Allows the creation of tasks to send a notification.
     62   // This allows the PromoResourceService to notify the New Tab Page immediately
     63   // when a new web resource should be shown or removed.
     64   base::WeakPtrFactory<PromoResourceService> weak_ptr_factory_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(PromoResourceService);
     67 };
     68 
     69 #endif  // CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_
     70