1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_RLZ_RLZ_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_RLZ_RLZ_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "build/build_config.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN)
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "rlz/win/lib/rlz_lib.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RLZ is a library which is used to measure distribution scenarios.
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Its job is to record certain lifetime events in the registry and to send
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// them encoded as a compact string at most twice. The sent data does
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// not contain information that can be used to identify a user or to infer
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// browsing habits. The API in this file is a wrapper around the open source
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RLZ library which can be found at http://code.google.com/p/rlz.
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For partner or bundled installs, the RLZ might send more information
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// according to the terms disclosed in the EULA.
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RLZTracker {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Like InitRlz() this function initializes the RLZ library services for use
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // in chrome. Besides binding the dll, it schedules a delayed task (delayed
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // by |delay| seconds) that performs the ping and registers some events
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // when 'first-run' is true.
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If the chrome brand is organic (no partners) then the RLZ library is not
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // loaded or initialized and the pings don't ocurr.
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool InitRlzDelayed(bool first_run, int delay);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Records an RLZ event. Some events can be access point independent.
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns false it the event could not be recorded. Requires write access
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to the HKCU registry hive on windows.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool RecordProductEvent(rlz_lib::Product product,
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 rlz_lib::AccessPoint point,
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 rlz_lib::Event event_id);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Get the RLZ value of the access point.
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns false if the rlz string could not be obtained. In some cases
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // an empty string can be returned which is not an error.
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool GetAccessPointRlz(rlz_lib::AccessPoint point, std::wstring* rlz);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Clear all events reported by this product. In Chrome this will be called
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // when it is un-installed.
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool ClearAllProductEvents(rlz_lib::Product product);
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Invoked during shutdown to clean up any state created by RLZTracker.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static void CleanupRlz();
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_IMPLICIT_CONSTRUCTORS(RLZTracker);
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // defined(OS_WIN)
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_RLZ_RLZ_H_
66