1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_METRICS_OMNIBOX_METRICS_PROVIDER_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_METRICS_OMNIBOX_METRICS_PROVIDER_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/basictypes.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/metrics/metrics_provider.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/metrics/proto/chrome_user_metrics_extension.pb.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)struct OmniboxLog;
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// OmniboxMetricsProvider is responsible for filling out the |omnibox_event|
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// section of the UMA proto.
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class OmniboxMetricsProvider : public metrics::MetricsProvider,
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                               public content::NotificationObserver {
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OmniboxMetricsProvider();
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~OmniboxMetricsProvider();
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // metrics::MetricsDataProvider:
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnRecordingEnabled() OVERRIDE;
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnRecordingDisabled() OVERRIDE;
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void ProvideGeneralMetrics(
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      metrics::ChromeUserMetricsExtension* uma_proto) OVERRIDE;
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // content::NotificationObserver:
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void Observe(int type,
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                       const content::NotificationSource& source,
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Records the input text, available choices, and selected entry when the
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // user uses the Omnibox to open a URL.
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RecordOmniboxOpenedURL(const OmniboxLog& log);
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Registar for receiving Omnibox event notifications.
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  content::NotificationRegistrar registrar_;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Saved cache of generated Omnibox event protos, to be copied into the UMA
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // proto when ProvideGeneralMetrics() is called.
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  metrics::ChromeUserMetricsExtension omnibox_events_cache;
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OmniboxMetricsProvider);
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CHROME_BROWSER_METRICS_OMNIBOX_METRICS_PROVIDER_H_
51