Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5219)

Unified Diff: chrome/browser/web_resource/promo_resource_service.h

Issue 6542003: Refactor WebResourceService class, making it more generic. Move all the prom... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: For the records Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/profiles/profile_manager.cc ('k') | chrome/browser/web_resource/promo_resource_service.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
+
« no previous file with comments | « chrome/browser/profiles/profile_manager.cc ('k') | chrome/browser/web_resource/promo_resource_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698