// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // The QuotaService uses heuristics to limit abusive requests // made by extensions. In this model 'items' (e.g individual bookmarks) are // represented by a 'Bucket' that holds state for that item for one single // interval of time. The interval of time is defined as 'how long we need to // watch an item (for a particular heuristic) before making a decision about // quota violations'. A heuristic is two functions: one mapping input // arguments to a unique Bucket (the BucketMapper), and another to determine // if a new request involving such an item at a given time is a violation. #ifndef EXTENSIONS_BROWSER_QUOTA_SERVICE_H_ #define EXTENSIONS_BROWSER_QUOTA_SERVICE_H_ #include <stdint.h> #include <list> #include <map> #include <memory> #include <string> #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "base/values.h" #include "extensions/common/extension_id.h" class ExtensionFunction; namespace extensions { class QuotaLimitHeuristic; QuotaLimitHeuristics; // The QuotaService takes care that calls to certain extension // functions do not exceed predefined quotas. // // The QuotaService needs to live entirely on one thread, i.e. be created, // called and destroyed on the same thread, due to its use of a RepeatingTimer. // It is not a KeyedService because instances exist on both the UI // and IO threads. class QuotaService { … }; // A QuotaLimitHeuristic is two things: 1, A heuristic to map extension // function arguments to corresponding Buckets for each input arg, and 2) a // heuristic for determining if a new event involving a particular item // (represented by its Bucket) constitutes a quota violation. class QuotaLimitHeuristic { … }; // A simple per-item heuristic to limit the number of events that can occur in // a given period of time; e.g "no more than 100 events in an hour". class QuotaService::TimedLimit : public QuotaLimitHeuristic { … }; } // namespace extensions #endif // EXTENSIONS_BROWSER_QUOTA_SERVICE_H_