Index: components/ntp_snippets/request_counter.h |
diff --git a/components/ntp_snippets/request_counter.h b/components/ntp_snippets/request_counter.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a6eebc6e00a5a9af6165935e268b78f2731d2243 |
--- /dev/null |
+++ b/components/ntp_snippets/request_counter.h |
@@ -0,0 +1,81 @@ |
+// Copyright 2016 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_NTP_SNIPPETS_REQUEST_COUNTER_H_ |
+#define COMPONENTS_NTP_SNIPPETS_REQUEST_COUNTER_H_ |
+ |
+#include <string> |
+ |
+#include "base/macros.h" |
+ |
+class PrefRegistrySimple; |
+class PrefService; |
+ |
+namespace ntp_snippets { |
+ |
+// Counts requests to external services, compares them to a daily quota, reports |
+// them to UMA. In the application code, create one local instance for each type |
+// of requests, identified by the |id| string. The request counter is based on: |
+// - daily quota from a variation param "quota_|id|" in the NTPSnippets trial; |
+// - prefs "ntp.requests_quota.|id|.day" and "ntp.requests_quota.|id|.count". |
+// Furthermore the counter reports |
+// - all requests to the "NewTabPage.RequestsTotal.|Id|" histogram |
+// - the daily number of requests per user in the |
+// "NewTabPage.RequestsPerUser.|Id|" histogram |
Marc Treib
2016/07/19 09:06:17
RequestsPerUser and RequestTotal would only be dif
jkrcal
2016/07/20 09:40:40
Clarified.
|
+// (note that your "example_id" is autocapitalized to "ExampleId") |
Marc Treib
2016/07/19 09:06:17
Why?
jkrcal
2016/07/20 09:40:40
Removed.
|
+// Thus, when you add an application of RequestCounter, you must also: |
+// - add a static function that calls RequestCounter::RegisterPrefs with the |
+// same |id| and call this function from browser_prefs.cc. |
+// - define the two histograms in histogram.xml (see previous applications). |
Marc Treib
2016/07/19 09:06:17
Hmmmm, I don't really like this. So, there's a cen
Marc Treib
2016/07/19 09:06:17
histograms.xml has a concept of "histogram suffixe
jkrcal
2016/07/20 09:40:40
Done.
|
+class RequestCounter { |
+ public: |
+ // Enumeration listing all possible outcomes for fetch attempts. Used for UMA |
+ // histogram, so do not change existing values. Insert new values at the end, |
+ // and update the histogram definition. |
+ enum class RequestType { |
+ FORCED, |
+ QUOTA_GRANTED, |
+ QUOTA_EXCEEDED, |
+ REQUEST_TYPE_MAX |
+ }; |
+ |
+ // The |id| passed in here must be unique application-wide. |
+ RequestCounter(PrefService* pref_service, |
+ const std::string& id, |
+ int default_quota); |
+ |
+ // Must be called with the same |id| as used in the constructor before any |
+ // calls to IsQuotaAvailable. |
+ static void RegisterProfilePrefs(PrefRegistrySimple* registry, |
+ const std::string& id); |
+ |
+ // Returns whether quota is available for another request and reports this |
+ // information to UMA. |
+ bool IsQuotaAvailable(); |
Marc Treib
2016/07/19 09:06:17
The name sounds like this is a pure getter that do
jkrcal
2016/07/20 09:40:40
Changed to GetQuota() which avoids overloading the
|
+ |
+ // Reports a forced request to UMA (without checking the quota). |
+ void ReportForcedRequest(); |
+ |
+ private: |
+ PrefService* pref_service_; |
+ std::string id_; |
+ std::string id_camel_case_; |
+ |
+ int counter_; |
+ int quota_; |
+ |
+ void ResetCounterIfDayChanged(); |
Marc Treib
2016/07/19 09:06:17
Methods come before data members.
jkrcal
2016/07/20 09:40:40
Done.
|
+ |
+ static std::string GetDaysPref(const std::string& id); |
+ static std::string GetCountPref(const std::string& id); |
+ |
+ std::string GetTotalHistogramName(); |
+ std::string GetPerUserHistogramName(); |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RequestCounter); |
+}; |
+ |
+} // namespace ntp_snippets |
+ |
+#endif // COMPONENTS_NTP_SNIPPETS_REQUEST_COUNTER_H_ |