diff options
Diffstat (limited to 'chromium/components/browsing_data/core/counters/browsing_data_counter.h')
-rw-r--r-- | chromium/components/browsing_data/core/counters/browsing_data_counter.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/chromium/components/browsing_data/core/counters/browsing_data_counter.h b/chromium/components/browsing_data/core/counters/browsing_data_counter.h new file mode 100644 index 00000000000..c2749364f53 --- /dev/null +++ b/chromium/components/browsing_data/core/counters/browsing_data_counter.h @@ -0,0 +1,120 @@ +// Copyright 2015 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 COMPONENTS_BROWSING_DATA_CORE_COUNTERS_BROWSING_DATA_COUNTER_H_ +#define COMPONENTS_BROWSING_DATA_CORE_COUNTERS_BROWSING_DATA_COUNTER_H_ + +#include <stdint.h> +#include <string> + +#include "base/callback.h" +#include "base/macros.h" +#include "components/prefs/pref_member.h" + +class PrefService; + +namespace browsing_data { + +class BrowsingDataCounter { + public: + typedef int64_t ResultInt; + + // Base class of results returned by BrowsingDataCounter. When the computation + // has started, an instance is returned to represent a pending result. + class Result { + public: + explicit Result(const BrowsingDataCounter* source); + virtual ~Result(); + + const BrowsingDataCounter* source() const { return source_; } + virtual bool Finished() const; + + private: + const BrowsingDataCounter* source_; + + DISALLOW_COPY_AND_ASSIGN(Result); + }; + + // A subclass of Result returned when the computation has finished. The result + // value can be retrieved by calling |Value()|. Some BrowsingDataCounter + // subclasses might use a subclass of FinishedResult to provide more complex + // results. + class FinishedResult : public Result { + public: + FinishedResult(const BrowsingDataCounter* source, ResultInt value); + ~FinishedResult() override; + + // Result: + bool Finished() const override; + + ResultInt Value() const; + + private: + ResultInt value_; + + DISALLOW_COPY_AND_ASSIGN(FinishedResult); + }; + + typedef base::Callback<void(std::unique_ptr<Result>)> Callback; + + BrowsingDataCounter(); + virtual ~BrowsingDataCounter(); + + // Should be called once to initialize this class. + void Init(PrefService* pref_service, const Callback& callback); + + // Name of the preference associated with this counter. + virtual const char* GetPrefName() const = 0; + + // PrefService that manages the preferences for the user profile + // associated with this counter. + PrefService* GetPrefs() const; + + // Restarts the counter. Will be called automatically if the counting needs + // to be restarted, e.g. when the deletion preference changes state or when + // we are notified of data changes. + void Restart(); + + protected: + // Should be called from |Count| by any overriding class to indicate that + // counting is finished and report |value| as the result. + void ReportResult(ResultInt value); + + // A convenience overload of the previous method that allows subclasses to + // provide a custom |result|. + void ReportResult(std::unique_ptr<Result> result); + + // Calculates the beginning of the counting period as |period_| before now. + base::Time GetPeriodStart(); + + private: + // Called after the class is initialized by calling |Init|. + virtual void OnInitialized(); + + // Count the data. + virtual void Count() = 0; + + // Pointer to the PrefService that manages the preferences for the user + // profile associated with this counter. + PrefService* pref_service_; + + // The callback that will be called when the UI should be updated with a new + // counter value. + Callback callback_; + + // The boolean preference indicating whether this data type is to be deleted. + // If false, we will not count it. + BooleanPrefMember pref_; + + // The integer preference describing the time period for which this data type + // is to be deleted. + IntegerPrefMember period_; + + // Whether this class was properly initialized by calling |Init|. + bool initialized_ = false; +}; + +} // namespace browsing_data + +#endif // COMPONENTS_BROWSING_DATA_CORE_COUNTERS_BROWSING_DATA_COUNTER_H_ |