Chromium Code Reviews| Index: chrome/browser/web_resource/web_resource_service.h |
| =================================================================== |
| --- chrome/browser/web_resource/web_resource_service.h (revision 75300) |
| +++ chrome/browser/web_resource/web_resource_service.h (working copy) |
| @@ -1,4 +1,4 @@ |
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// 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. |
| @@ -8,33 +8,24 @@ |
| #include <string> |
| -#include "base/file_path.h" |
| -#include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/utility_process_host.h" |
| -#include "chrome/common/web_resource/web_resource_unpacker.h" |
| +#include "chrome/common/notification_type.h" |
| +class PrefService; |
| class Profile; |
| -namespace WebResourceServiceUtil { |
| - |
| -// 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 WebResourceService |
| - |
| -// A WebResourceService 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.) |
| +// A WebResourceService fetches data from a web resource server and store |
| +// locally as user preference. |
| class WebResourceService |
| : public UtilityProcessHost::Client { |
| public: |
| - explicit WebResourceService(Profile* profile); |
| + WebResourceService(Profile* profile, |
| + const char* web_resource_server, |
| + bool apply_locale_to_url_, |
| + NotificationType::Type notification_type, |
| + const char* last_update_time_pref_name, |
| + int start_fetch_delay = 5000, // 5 seconds |
|
Miranda Callahan
2011/02/18 16:59:43
The Google C++ Style Guide doesn't allow default p
Zhenyao Mo
2011/02/18 17:32:09
I removed the defaults. Instead, I added back you
|
| + int cache_update_delay = 172800000); // 48 hours |
| // Sleep until cache needs to be updated, but always for at least 5 seconds |
| // so we don't interfere with startup. Then begin updating resources. |
| @@ -44,118 +35,26 @@ |
| // the process that will parse the JSON, and then update the cache. |
| void UpdateResourceCache(const std::string& json_data); |
| - // 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); |
| + protected: |
| + virtual ~WebResourceService(); |
| - // 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); |
| + virtual void Unpack(const DictionaryValue& parsed_json) = 0; |
| - // Unpack the web 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); |
| + // If delay_ms is positive, schedule notification with the delay. |
| + // If delay_ms is 0, notify immediately by calling WebResourceStateChange(). |
| + // If delay_ms is negative, do nothing. |
| + void PostNotification(int64 delay_ms); |
| - int cache_update_delay() const { return cache_update_delay_; } |
| + // We need to be able to load parsed resource data into preferences file, |
| + // and get proper install directory. |
| + PrefService* prefs_; |
| - Profile* profile() const { return profile_; } |
| - |
| - static const char* kCurrentTipPrefName; |
| - static const char* kTipCachePrefName; |
| - |
| - // Default server of dynamically loaded NTP HTML elements (promotions, tips): |
| - static const char* kDefaultWebResourceServer; |
| - |
| private: |
| class WebResourceFetcher; |
| friend class WebResourceFetcher; |
| class UnpackerClient; |
| - ~WebResourceService(); |
| - |
| - void Init(); |
| - |
| // Set in_fetch_ to false, clean up temp directories (in the future). |
| void EndFetch(); |
| @@ -165,16 +64,7 @@ |
| // Notify listeners that the state of a web resource has changed. |
| void WebResourceStateChange(); |
| - // 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); |
| - |
| - // We need to be able to load parsed resource data into preferences file, |
| - // and get proper install directory. |
| - PrefService* prefs_; |
| - |
| - // Display and fetch of promo lines depends on data associated with a user's |
| - // profile. |
| + // Data are associated with a user's profile. |
|
Miranda Callahan
2011/02/18 16:59:43
Remove comment altogether; it's clear what a Profi
Zhenyao Mo
2011/02/18 17:32:09
Done.
|
| Profile* profile_; |
| scoped_ptr<WebResourceFetcher> web_resource_fetcher_; |
| @@ -186,15 +76,26 @@ |
| // Page immediately when a new web resource should be shown or removed. |
| ScopedRunnableMethodFactory<WebResourceService> service_factory_; |
| - // 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_; |
| - |
| // True if we are currently mid-fetch. If we are asked to start a fetch |
| // when we are still fetching resource data, schedule another one in |
| // kCacheUpdateDelay time, and silently exit. |
| bool in_fetch_; |
| + // URL hosts the web resource. |
|
Miranda Callahan
2011/02/18 16:59:43
"URL that hosts the web resource."
Zhenyao Mo
2011/02/18 17:32:09
Done.
|
| + const char* web_resource_server_; |
| + |
| + // Indicates whether we should append locale to the web resource server URL. |
| + bool apply_locale_to_url_; |
| + |
| + // Notification type when an update is done. |
| + NotificationType::Type notification_type_; |
| + |
| + // Pref name to store the last update's time. |
| + const char* last_update_time_pref_name_; |
| + |
| + // Delay on first fetch so we don't interfere with startup. |
| + int start_fetch_delay_; |
| + |
| // Delay between calls to update the web resource cache. This delay may be |
| // different for different builds of Chrome. |
| int cache_update_delay_; |