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