OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_WEB_RESOURCE_WEB_RESOURCE_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_WEB_RESOURCE_WEB_RESOURCE_SERVICE_H_ |
6 #define CHROME_BROWSER_WEB_RESOURCE_WEB_RESOURCE_SERVICE_H_ | 6 #define CHROME_BROWSER_WEB_RESOURCE_WEB_RESOURCE_SERVICE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
12 #include "chrome/browser/prefs/pref_service.h" | 12 #include "chrome/browser/prefs/pref_service.h" |
13 #include "chrome/browser/utility_process_host.h" | 13 #include "chrome/browser/utility_process_host.h" |
14 #include "chrome/common/web_resource/web_resource_unpacker.h" | 14 #include "chrome/common/web_resource/web_resource_unpacker.h" |
15 | 15 |
16 class Profile; | 16 class Profile; |
17 | 17 |
| 18 namespace WebResourceServiceUtil { |
| 19 |
| 20 // Certain promotions should only be shown to certain classes of users. This |
| 21 // function will change to reflect each kind of promotion. |
| 22 bool CanShowPromo(Profile* profile); |
| 23 |
| 24 } // namespace WebResourceService |
| 25 |
18 class WebResourceService | 26 class WebResourceService |
19 : public UtilityProcessHost::Client { | 27 : public UtilityProcessHost::Client { |
20 public: | 28 public: |
21 explicit WebResourceService(Profile* profile); | 29 explicit WebResourceService(Profile* profile); |
22 | 30 |
23 // Sleep until cache needs to be updated, but always for at least 5 seconds | 31 // Sleep until cache needs to be updated, but always for at least 5 seconds |
24 // so we don't interfere with startup. Then begin updating resources. | 32 // so we don't interfere with startup. Then begin updating resources. |
25 void StartAfterDelay(); | 33 void StartAfterDelay(); |
26 | 34 |
27 // We have successfully pulled data from a resource server; now launch | 35 // We have successfully pulled data from a resource server; now launch |
(...skipping 13 matching lines...) Expand all Loading... |
41 // "inproduct": "Text here will be shown as a tip", | 49 // "inproduct": "Text here will be shown as a tip", |
42 // }, | 50 // }, |
43 // ... | 51 // ... |
44 // ] | 52 // ] |
45 // } | 53 // } |
46 // } | 54 // } |
47 // | 55 // |
48 // Public for unit testing. | 56 // Public for unit testing. |
49 void UnpackTips(const DictionaryValue& parsed_json); | 57 void UnpackTips(const DictionaryValue& parsed_json); |
50 | 58 |
51 // Unpack the web resource as a custom logo signal. Expects json in the form | 59 // Unpack the web resource as a custom promo signal. Expects a start and end |
52 // of: | 60 // signal, with the promo to be shown in the tooltip of the start signal |
| 61 // field. Delivery will be in json in the form of: |
53 // { | 62 // { |
54 // "topic": { | 63 // "topic": { |
55 // "answers": [ | 64 // "answers": [ |
56 // { | 65 // { |
57 // "custom_logo_start": "31/12/10 01:00", | 66 // "answer_id": "1067976", |
58 // "custom_logo_end": "31/01/11 01:00" | 67 // "name": "promo_start", |
| 68 // "question": "", |
| 69 // "tooltip": |
| 70 // "Click \u003ca href=http://www.google.com\u003ehere\u003c/a\u003e!", |
| 71 // "inproduct": "10/8/09 12:00", |
| 72 // "inproduct_target": null |
| 73 // }, |
| 74 // { |
| 75 // "answer_id": "1067976", |
| 76 // "name": "promo_end", |
| 77 // "question": "", |
| 78 // "tooltip": "", |
| 79 // "inproduct": "10/8/11 12:00", |
| 80 // "inproduct_target": null |
| 81 // }, |
| 82 // ... |
| 83 // ] |
| 84 // } |
| 85 // } |
| 86 // |
| 87 // Public for unit testing. |
| 88 void UnpackPromoSignal(const DictionaryValue& parsed_json); |
| 89 |
| 90 // Unpack the web resource as a custom logo signal. Expects a start and end |
| 91 // signal. Delivery will be in json in the form of: |
| 92 // { |
| 93 // "topic": { |
| 94 // "answers": [ |
| 95 // { |
| 96 // "answer_id": "107366", |
| 97 // "name": "custom_logo_start", |
| 98 // "question": "", |
| 99 // "tooltip": "", |
| 100 // "inproduct": "10/8/09 12:00", |
| 101 // "inproduct_target": null |
| 102 // }, |
| 103 // { |
| 104 // "answer_id": "107366", |
| 105 // "name": "custom_logo_end", |
| 106 // "question": "", |
| 107 // "tooltip": "", |
| 108 // "inproduct": "10/8/09 12:00", |
| 109 // "inproduct_target": null |
59 // }, | 110 // }, |
60 // ... | 111 // ... |
61 // ] | 112 // ] |
62 // } | 113 // } |
63 // } | 114 // } |
64 // | 115 // |
65 // Public for unit testing. | 116 // Public for unit testing. |
66 void UnpackLogoSignal(const DictionaryValue& parsed_json); | 117 void UnpackLogoSignal(const DictionaryValue& parsed_json); |
67 | 118 |
| 119 int cache_update_delay() const { return cache_update_delay_; } |
| 120 |
68 static const char* kCurrentTipPrefName; | 121 static const char* kCurrentTipPrefName; |
69 static const char* kTipCachePrefName; | 122 static const char* kTipCachePrefName; |
70 | 123 |
71 // Default server from which to gather resources. | 124 // Default server of dynamically loaded NTP HTML elements (promotions, tips): |
72 static const char* kDefaultResourceServer; | 125 static const char* kDefaultWebResourceServer; |
73 | 126 |
74 private: | 127 private: |
75 class WebResourceFetcher; | 128 class WebResourceFetcher; |
76 friend class WebResourceFetcher; | 129 friend class WebResourceFetcher; |
77 | 130 |
78 class UnpackerClient; | 131 class UnpackerClient; |
79 | 132 |
80 ~WebResourceService(); | 133 ~WebResourceService(); |
81 | 134 |
82 void Init(); | 135 void Init(); |
83 | 136 |
84 // Set in_fetch_ to false, clean up temp directories (in the future). | 137 // Set in_fetch_ to false, clean up temp directories (in the future). |
85 void EndFetch(); | 138 void EndFetch(); |
86 | 139 |
87 // Puts parsed json data in the right places, and writes to prefs file. | 140 // Puts parsed json data in the right places, and writes to prefs file. |
88 void OnWebResourceUnpacked(const DictionaryValue& parsed_json); | 141 void OnWebResourceUnpacked(const DictionaryValue& parsed_json); |
89 | 142 |
90 // We need to be able to load parsed resource data into preferences file, | 143 // We need to be able to load parsed resource data into preferences file, |
91 // and get proper install directory. | 144 // and get proper install directory. |
92 PrefService* prefs_; | 145 PrefService* prefs_; |
93 | 146 |
| 147 // Display and fetch of promo lines depends on data associated with a user's |
| 148 // profile. |
| 149 Profile* profile_; |
| 150 |
94 // Server from which we are currently pulling web resource data. | 151 // Server from which we are currently pulling web resource data. |
95 std::string web_resource_server_; | 152 std::string web_resource_server_; |
96 | 153 |
97 scoped_ptr<WebResourceFetcher> web_resource_fetcher_; | 154 scoped_ptr<WebResourceFetcher> web_resource_fetcher_; |
98 | 155 |
99 ResourceDispatcherHost* resource_dispatcher_host_; | 156 ResourceDispatcherHost* resource_dispatcher_host_; |
100 | 157 |
101 // Gets mutable dictionary attached to user's preferences, so that we | 158 // Gets mutable dictionary attached to user's preferences, so that we |
102 // can write resource data back to user's pref file. | 159 // can write resource data back to user's pref file. |
103 DictionaryValue* web_resource_cache_; | 160 DictionaryValue* web_resource_cache_; |
104 | 161 |
105 // True if we are currently mid-fetch. If we are asked to start a fetch | 162 // True if we are currently mid-fetch. If we are asked to start a fetch |
106 // when we are still fetching resource data, schedule another one in | 163 // when we are still fetching resource data, schedule another one in |
107 // kCacheUpdateDelay time, and silently exit. | 164 // kCacheUpdateDelay time, and silently exit. |
108 bool in_fetch_; | 165 bool in_fetch_; |
109 | 166 |
110 // Delay on first fetch so we don't interfere with startup. | 167 // Delay between calls to update the web resource cache. This delay may be |
111 static const int kStartResourceFetchDelay = 5000; | 168 // different for different builds of Chrome. |
112 | 169 int cache_update_delay_; |
113 // Delay between calls to update the cache (48 hours). | |
114 static const int kCacheUpdateDelay = 48 * 60 * 60 * 1000; | |
115 | 170 |
116 DISALLOW_COPY_AND_ASSIGN(WebResourceService); | 171 DISALLOW_COPY_AND_ASSIGN(WebResourceService); |
117 }; | 172 }; |
118 | 173 |
119 #endif // CHROME_BROWSER_WEB_RESOURCE_WEB_RESOURCE_SERVICE_H_ | 174 #endif // CHROME_BROWSER_WEB_RESOURCE_WEB_RESOURCE_SERVICE_H_ |
OLD | NEW |