Chromium Code Reviews| Index: chrome/browser/interstitials/security_interstitial_metrics_helper.h |
| diff --git a/chrome/browser/interstitials/security_interstitial_metrics_helper.h b/chrome/browser/interstitials/security_interstitial_metrics_helper.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e7d1c9a1484bbd257d8846d4e1ad2485a32890a7 |
| --- /dev/null |
| +++ b/chrome/browser/interstitials/security_interstitial_metrics_helper.h |
| @@ -0,0 +1,95 @@ |
| +// Copyright (c) 2014 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 CHROME_BROWSER_INTERSTITIALS_SECURITY_INTERSTITIAL_METRICS_HELPER_H_ |
| +#define CHROME_BROWSER_INTERSTITIALS_SECURITY_INTERSTITIAL_METRICS_HELPER_H_ |
| + |
| +#include <string> |
| + |
| +#include "base/task/cancelable_task_tracker.h" |
| +#include "base/time/time.h" |
| +#include "url/gurl.h" |
| + |
| +namespace content { |
| +class WebContents; |
| +} |
| + |
| +namespace extensions { |
| +class ExperienceSamplingEvent; |
| +} |
| + |
| +// Most of the security interstitials share a common layout and set of |
| +// choices. SecurityInterstitialMetricsHelper is intended to help the security |
| +// interstitials record user choices in a common way via METRICS histograms |
| +// and RAPPOR metrics. |
| +class SecurityInterstitialMetricsHelper { |
| + public: |
| + // These enums are used for histograms. Don't reorder, delete, or insert |
| + // elements. New elements should be added at the end (right before the max). |
| + enum SecurityInterstitialDecision { |
| + SHOW, |
| + PROCEED, |
| + DONT_PROCEED, |
| + PROCEEDING_DISABLED, |
| + MAX_DECISION |
| + }; |
| + enum SecurityInterstitialInteraction { |
| + TOTAL_VISITS, |
| + SHOW_ADVANCED, |
| + SHOW_PRIVACY_POLICY, |
| + SHOW_DIAGNOSTIC, |
| + SHOW_LEARN_MORE, |
| + RELOAD, |
| + OPEN_TIME_SETTINGS, |
| + MAX_INTERACTION |
| + }; |
| + |
| + enum RapporReporting { |
| + REPORT_RAPPOR, |
| + SKIP_RAPPOR, |
| + MAX_RAPPOR_REPORTING |
|
mattm
2015/02/03 22:25:54
nit: max value isn't needed for this enum
Nathan Parker
2015/02/03 22:43:03
Done.
|
| + }; |
| + |
| + // Args: |
| + // url: URL of page that triggered the interstitial. Only origin is used. |
| + // uma_prefix: Histogram prefix for UMA. |
| + // examples: "phishing", "ssl_overridable" |
| + // rappor_prefix: Metric prefix for Rappor. |
| + // examples: "phishing", "ssl" |
| + // rappor_reporting: Used to skip rappor rapporting if desired. |
| + // sampling_event_name: Event name for Experience Sampling. |
| + // e.g. "phishing_interstitial_" |
| + SecurityInterstitialMetricsHelper(content::WebContents* web_contents, |
| + const GURL& url, |
| + const std::string& uma_prefix, |
| + const std::string& rappor_prefix, |
| + RapporReporting rappor_reporting, |
| + const std::string& sampling_event_name); |
| + ~SecurityInterstitialMetricsHelper(); |
| + |
| + // Record a user decision or interaction to the appropriate UMA histogram |
| + // and potentially in a RAPPOR metric. |
| + void RecordUserDecision(SecurityInterstitialDecision decision); |
| + void RecordUserInteraction(SecurityInterstitialInteraction interaction); |
| + |
| + private: |
| + // Used to query the HistoryService to see if the URL is in history. |
| + void OnGotHistoryCount(bool success, int num_visits, base::Time first_visit); |
| + |
| + content::WebContents* web_contents_; |
| + const GURL request_url_; |
| + const std::string uma_prefix_; |
| + const std::string rappor_prefix_; |
| + const RapporReporting rappor_reporting_; |
| + const std::string sampling_event_name_; |
| + int num_visits_; |
| + base::CancelableTaskTracker request_tracker_; |
| +#if defined(ENABLE_EXTENSIONS) |
| + scoped_ptr<extensions::ExperienceSamplingEvent> sampling_event_; |
| +#endif |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SecurityInterstitialMetricsHelper); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_INTERSTITIALS_SECURITY_INTERSTITIAL_METRICS_HELPER_H_ |