15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/web_resource/web_resource_service.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NotificationPromo; 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySimple; 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefService; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySyncable; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A PromoResourceService fetches data from a web resource server to be used to 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// dynamically change the appearance of the New Tab Page. For example, it has 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// been used to fetch "tips" to be displayed on the NTP, or to display 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// promotional messages to certain groups of Chrome users. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PromoResourceService : public WebResourceService { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void RegisterPrefs(PrefRegistrySimple* registry); 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void MigrateUserPrefs(PrefService* user_prefs); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PromoResourceService(); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PromoResourceService(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Schedule a notification that a web resource is either going to become 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // available or be no longer valid. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ScheduleNotification(const NotificationPromo& notification_promo); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Schedules the initial notification for when the web resource is going 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to become available or no longer valid. This performs a few additional 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // checks than ScheduleNotification, namely it schedules updates immediately 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the promo service or Chrome locale has changed. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ScheduleNotificationOnInit(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If delay_ms is positive, schedule notification with the delay. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If delay_ms is 0, notify immediately by calling WebResourceStateChange(). 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If delay_ms is negative, do nothing. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PostNotification(int64 delay_ms); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify listeners that the state of a web resource has changed. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PromoResourceStateChange(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebResourceService override to process the parsed information. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Unpack(const base::DictionaryValue& parsed_json) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows the creation of tasks to send a notification. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This allows the PromoResourceService to notify the New Tab Page immediately 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when a new web resource should be shown or removed. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<PromoResourceService> weak_ptr_factory_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PromoResourceService); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_ 70