1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2008 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#include "chrome/browser/rlz/rlz.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h"
8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/win/registry.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickusing base::win::RegKey;
12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Gets rid of registry leftovers from testing. Returns false if there
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is nothing to clean.
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool CleanValue(const wchar_t* key_name, const wchar_t* value) {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RegKey key;
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  if (key.Open(HKEY_CURRENT_USER, key_name, KEY_READ | KEY_WRITE) !=
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ERROR_SUCCESS)
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key.DeleteValue(value));
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The chrome events RLZ key lives here.
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst wchar_t kKeyName[] = L"Software\\Google\\Common\\Rlz\\Events\\C";
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RlzLibTest, RecordProductEvent) {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DWORD recorded_value = 0;
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(RLZTracker::RecordProductEvent(rlz_lib::CHROME,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      rlz_lib::CHROME_OMNIBOX, rlz_lib::FIRST_SEARCH));
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t kEvent1[] = L"C1F";
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RegKey key1;
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key1.Open(HKEY_CURRENT_USER, kKeyName, KEY_READ));
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key1.ReadValueDW(kEvent1, &recorded_value));
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1, recorded_value);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(CleanValue(kKeyName, kEvent1));
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(RLZTracker::RecordProductEvent(rlz_lib::CHROME,
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      rlz_lib::CHROME_HOME_PAGE, rlz_lib::SET_TO_GOOGLE));
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t kEvent2[] = L"C2S";
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RegKey key2;
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key2.Open(HKEY_CURRENT_USER, kKeyName, KEY_READ));
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DWORD value = 0;
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key2.ReadValueDW(kEvent2, &recorded_value));
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1, recorded_value);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(CleanValue(kKeyName, kEvent2));
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(RlzLibTest, CleanProductEvents) {
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DWORD recorded_value = 0;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(RLZTracker::RecordProductEvent(rlz_lib::CHROME,
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      rlz_lib::CHROME_OMNIBOX, rlz_lib::FIRST_SEARCH));
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const wchar_t kEvent1[] = L"C1F";
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RegKey key1;
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key1.Open(HKEY_CURRENT_USER, kKeyName, KEY_READ));
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(ERROR_SUCCESS, key1.ReadValueDW(kEvent1, &recorded_value));
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1, recorded_value);
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(RLZTracker::ClearAllProductEvents(rlz_lib::CHROME));
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(CleanValue(kKeyName, kEvent1));
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
66