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