Index: chrome/browser/web_resource/promo_resource_service.h |
=================================================================== |
--- chrome/browser/web_resource/promo_resource_service.h (revision 0) |
+++ chrome/browser/web_resource/promo_resource_service.h (revision 0) |
@@ -0,0 +1,149 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_ |
+#define CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_ |
+#pragma once |
+ |
+#include "chrome/browser/web_resource/web_resource_service.h" |
+ |
+namespace PromoResourceServiceUtil { |
+ |
+// Certain promotions should only be shown to certain classes of users. This |
+// function will change to reflect each kind of promotion. |
+bool CanShowPromo(Profile* profile); |
+ |
+} // namespace PromoResourceServiceUtil |
+ |
+// 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 |
+// promotional messages to certain groups of Chrome users. |
+// |
+// TODO(mirandac): Arrange for a server to be set up specifically for promo |
+// 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: |
+ explicit PromoResourceService(Profile* profile); |
+ |
+ // Unpack the web resource as a set of tips. Expects json in the form of: |
+ // { |
+ // "lang": "en", |
+ // "topic": { |
+ // "topid_id": "24013", |
+ // "topics": [ |
+ // ], |
+ // "answers": [ |
+ // { |
+ // "answer_id": "18625", |
+ // "inproduct": "Text here will be shown as a tip", |
+ // }, |
+ // ... |
+ // ] |
+ // } |
+ // } |
+ // |
+ // Public for unit testing. |
+ void UnpackTips(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: |
+ // { |
+ // "topic": { |
+ // "answers": [ |
+ // { |
+ // "answer_id": "1067976", |
+ // "name": "promo_start", |
+ // "question": "1:24", |
+ // "tooltip": |
+ // "Click \u003ca href=http://www.google.com\u003ehere\u003c/a\u003e!", |
+ // "inproduct": "10/8/09 12:00", |
+ // "inproduct_target": null |
+ // }, |
+ // { |
+ // "answer_id": "1067976", |
+ // "name": "promo_end", |
+ // "question": "", |
+ // "tooltip": "", |
+ // "inproduct": "10/8/11 12:00", |
+ // "inproduct_target": null |
+ // }, |
+ // ... |
+ // ] |
+ // } |
+ // } |
+ // |
+ // Because the promo signal data is piggybacked onto the tip server, the |
+ // values don't exactly correspond with the field names: |
+ // |
+ // For "promo_start" or "promo_end", the date to start or stop showing the |
+ // promotional line is given by the "inproduct" line. |
+ // For "promo_start", the promotional line itself is given in the "tooltip" |
+ // field. The "question" field gives the type of builds that should be shown |
+ // this promo (see the BuildType enum in web_resource_service.cc) and the |
+ // number of hours that each promo group should see it, separated by ":". |
+ // 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 |
+ // signal. Delivery will be in json in the form of: |
+ // { |
+ // "topic": { |
+ // "answers": [ |
+ // { |
+ // "answer_id": "107366", |
+ // "name": "custom_logo_start", |
+ // "question": "", |
+ // "tooltip": "", |
+ // "inproduct": "10/8/09 12:00", |
+ // "inproduct_target": null |
+ // }, |
+ // { |
+ // "answer_id": "107366", |
+ // "name": "custom_logo_end", |
+ // "question": "", |
+ // "tooltip": "", |
+ // "inproduct": "10/8/09 12:00", |
+ // "inproduct_target": null |
+ // }, |
+ // ... |
+ // ] |
+ // } |
+ // } |
+ // |
+ // Public for unit testing. |
+ void UnpackLogoSignal(const DictionaryValue& parsed_json); |
+ |
+ static const char* kCurrentTipPrefName; |
+ static const char* kTipCachePrefName; |
+ |
+ // Default server of dynamically loaded NTP HTML elements (promotions, tips): |
+ 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); |
+ |
+ // 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_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PromoResourceService); |
+}; |
+ |
+#endif // CHROME_BROWSER_WEB_RESOURCE_PROMO_RESOURCE_SERVICE_H_ |
+ |