OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 // The QuotaService uses heuristics to limit abusive requests | 5 // The QuotaService uses heuristics to limit abusive requests |
6 // made by extensions. In this model 'items' (e.g individual bookmarks) are | 6 // made by extensions. In this model 'items' (e.g individual bookmarks) are |
7 // represented by a 'Bucket' that holds state for that item for one single | 7 // represented by a 'Bucket' that holds state for that item for one single |
8 // interval of time. The interval of time is defined as 'how long we need to | 8 // interval of time. The interval of time is defined as 'how long we need to |
9 // watch an item (for a particular heuristic) before making a decision about | 9 // watch an item (for a particular heuristic) before making a decision about |
10 // quota violations'. A heuristic is two functions: one mapping input | 10 // quota violations'. A heuristic is two functions: one mapping input |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 BucketList* buckets) = 0; | 156 BucketList* buckets) = 0; |
157 }; | 157 }; |
158 | 158 |
159 // Maps all calls to the same bucket, regardless of |args|, for this | 159 // Maps all calls to the same bucket, regardless of |args|, for this |
160 // QuotaLimitHeuristic. | 160 // QuotaLimitHeuristic. |
161 class SingletonBucketMapper : public BucketMapper { | 161 class SingletonBucketMapper : public BucketMapper { |
162 public: | 162 public: |
163 SingletonBucketMapper() {} | 163 SingletonBucketMapper() {} |
164 virtual ~SingletonBucketMapper() {} | 164 virtual ~SingletonBucketMapper() {} |
165 virtual void GetBucketsForArgs(const base::ListValue* args, | 165 virtual void GetBucketsForArgs(const base::ListValue* args, |
166 BucketList* buckets) OVERRIDE; | 166 BucketList* buckets) override; |
167 | 167 |
168 private: | 168 private: |
169 Bucket bucket_; | 169 Bucket bucket_; |
170 DISALLOW_COPY_AND_ASSIGN(SingletonBucketMapper); | 170 DISALLOW_COPY_AND_ASSIGN(SingletonBucketMapper); |
171 }; | 171 }; |
172 | 172 |
173 // Ownership of |map| is given to the new QuotaLimitHeuristic. | 173 // Ownership of |map| is given to the new QuotaLimitHeuristic. |
174 QuotaLimitHeuristic(const Config& config, | 174 QuotaLimitHeuristic(const Config& config, |
175 BucketMapper* map, | 175 BucketMapper* map, |
176 const std::string& name); | 176 const std::string& name); |
(...skipping 30 matching lines...) Expand all Loading... |
207 DISALLOW_COPY_AND_ASSIGN(QuotaLimitHeuristic); | 207 DISALLOW_COPY_AND_ASSIGN(QuotaLimitHeuristic); |
208 }; | 208 }; |
209 | 209 |
210 // A simple per-item heuristic to limit the number of events that can occur in | 210 // A simple per-item heuristic to limit the number of events that can occur in |
211 // a given period of time; e.g "no more than 100 events in an hour". | 211 // a given period of time; e.g "no more than 100 events in an hour". |
212 class QuotaService::TimedLimit : public QuotaLimitHeuristic { | 212 class QuotaService::TimedLimit : public QuotaLimitHeuristic { |
213 public: | 213 public: |
214 TimedLimit(const Config& config, BucketMapper* map, const std::string& name) | 214 TimedLimit(const Config& config, BucketMapper* map, const std::string& name) |
215 : QuotaLimitHeuristic(config, map, name) {} | 215 : QuotaLimitHeuristic(config, map, name) {} |
216 virtual bool Apply(Bucket* bucket, | 216 virtual bool Apply(Bucket* bucket, |
217 const base::TimeTicks& event_time) OVERRIDE; | 217 const base::TimeTicks& event_time) override; |
218 }; | 218 }; |
219 | 219 |
220 // A per-item heuristic to limit the number of events that can occur in a | 220 // A per-item heuristic to limit the number of events that can occur in a |
221 // period of time over a sustained longer interval. E.g "no more than two | 221 // period of time over a sustained longer interval. E.g "no more than two |
222 // events per minute, sustained over 10 minutes". | 222 // events per minute, sustained over 10 minutes". |
223 class QuotaService::SustainedLimit : public QuotaLimitHeuristic { | 223 class QuotaService::SustainedLimit : public QuotaLimitHeuristic { |
224 public: | 224 public: |
225 SustainedLimit(const base::TimeDelta& sustain, | 225 SustainedLimit(const base::TimeDelta& sustain, |
226 const Config& config, | 226 const Config& config, |
227 BucketMapper* map, | 227 BucketMapper* map, |
228 const std::string& name); | 228 const std::string& name); |
229 virtual bool Apply(Bucket* bucket, | 229 virtual bool Apply(Bucket* bucket, |
230 const base::TimeTicks& event_time) OVERRIDE; | 230 const base::TimeTicks& event_time) override; |
231 | 231 |
232 private: | 232 private: |
233 // Specifies how long exhaustion of buckets is allowed to continue before | 233 // Specifies how long exhaustion of buckets is allowed to continue before |
234 // denying requests. | 234 // denying requests. |
235 const int64 repeat_exhaustion_allowance_; | 235 const int64 repeat_exhaustion_allowance_; |
236 int64 num_available_repeat_exhaustions_; | 236 int64 num_available_repeat_exhaustions_; |
237 }; | 237 }; |
238 | 238 |
239 } // namespace extensions | 239 } // namespace extensions |
240 | 240 |
241 #endif // EXTENSIONS_BROWSER_QUOTA_SERVICE_H_ | 241 #endif // EXTENSIONS_BROWSER_QUOTA_SERVICE_H_ |
OLD | NEW |