19ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
29ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
39ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// found in the LICENSE file.
49ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#ifndef CHROME_BROWSER_UI_WEBUI_NTP_NTP_USER_DATA_LOGGER_H_
69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#define CHROME_BROWSER_UI_WEBUI_NTP_NTP_USER_DATA_LOGGER_H_
79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/web_contents_observer.h"
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/web_contents_user_data.h"
109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Helper class for logging data from the NTP. Attached to each NTP instance.
139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass NTPUserDataLogger
149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    : public content::WebContentsObserver,
159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      public content::WebContentsUserData<NTPUserDataLogger> {
169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public:
179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual ~NTPUserDataLogger();
189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Called each time the mouse hovers over a most visited tile or title.
209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  void increment_number_of_mouseovers();
219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // To be set after initialization of this class. Used to determine whether a
239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // tab visibility change event or navigation event comes from the NTP.
249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  void set_ntp_url(const GURL& url) {
259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    ntp_url_ = url;
269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  }
279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  const GURL& ntp_url() const { return ntp_url_; }
299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Logs total number of mouseovers per NTP session to UMA histogram. Called
319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // when an NTP tab is about to be deactivated (be it by switching tabs, losing
329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // focus or closing the tab/shutting down Chrome), or when the user navigates
339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // to a URL.
349ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  void EmitMouseoverCount();
359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // content::WebContentsObserver override
379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual void NavigationEntryCommitted(
389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch      const content::LoadCommittedDetails& load_details) OVERRIDE;
399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch private:
419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  explicit NTPUserDataLogger(content::WebContents* contents);
429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  friend class content::WebContentsUserData<NTPUserDataLogger>;
439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
449ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // Total number of mouseovers for this NTP session.
459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  int number_of_mouseovers_;
469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
479ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  // The URL of this New Tab Page - varies based on NTP version.
489ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  GURL ntp_url_;
499ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
509ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(NTPUserDataLogger);
519ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch};
529ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
539ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#endif  // CHROME_BROWSER_UI_WEBUI_NTP_NTP_USER_DATA_LOGGER_H_
54