15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <shlwapi.h> // For SHDeleteKey. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_reg_util_win.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/registry.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/browser_distribution.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/channel_info.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/fake_installation_state.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_update_constants.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/installer/util/google_update_experiment_util.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_update_settings.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/util_constants.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/work_item_list.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::win::RegKey; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using installer::ChannelInfo; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kGoogleUpdatePoliciesKey[] = 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"SOFTWARE\\Policies\\Google\\Update"; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kGoogleUpdateUpdateDefault[] = L"UpdateDefault"; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kGoogleUpdateUpdatePrefix[] = L"Update"; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GoogleUpdateSettings::UpdatePolicy kDefaultUpdatePolicy = 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::AUTOMATIC_UPDATES; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UPDATES_DISABLED; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kTestProductGuid[] = L"{89F1B351-B15D-48D4-8F10-1298721CF13D}"; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const wchar_t kTestExperimentLabel[] = L"test_label_value"; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test fixture redirects the HKLM and HKCU registry hives for 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the duration of the test to make it independent of the machine 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and user settings. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GoogleUpdateSettingsTest : public testing::Test { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_overrides_.OverrideRegistry(HKEY_LOCAL_MACHINE, L"HKLM_pit"); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_overrides_.OverrideRegistry(HKEY_CURRENT_USER, L"HKCU_pit"); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum SystemUserInstall { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SYSTEM_INSTALL, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USER_INSTALL, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetApField(SystemUserInstall is_system, const wchar_t* value) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root = is_system == SYSTEM_INSTALL ? 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey update_key; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring path = dist->GetStateKey(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, update_key.Create(root, path.c_str(), KEY_WRITE)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, update_key.WriteValue(L"ap", value)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests setting the ap= value to various combinations of values with 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefixes and suffixes, while asserting on the correct channel value. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that any non-empty ap= value that doesn't match ".*-{dev|beta}.*" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will return the "unknown" channel. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestCurrentChromeChannelWithVariousApValues(SystemUserInstall install) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static struct Expectations { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* ap_value; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* channel; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } expectations[] = { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"dev", installer::kChromeChannelDev }, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-dev", installer::kChromeChannelDev }, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-developer", installer::kChromeChannelDev }, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"beta", installer::kChromeChannelBeta }, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-beta", installer::kChromeChannelBeta }, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-betamax", installer::kChromeChannelBeta }, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_system = install == SYSTEM_INSTALL; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* prefixes[] = { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"", 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"prefix", 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"prefix-with-dash", 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* suffixes[] = { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"", 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"suffix", 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"suffix-with-dash", 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(prefixes); ++i) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t j = 0; j < arraysize(expectations); ++j) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t k = 0; k < arraysize(suffixes); ++k) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ap = prefixes[i]; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ap += expectations[j].ap_value; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ap += suffixes[k]; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* channel = expectations[j].channel; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetApField(install, ap.c_str()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 ret_channel; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_system, &ret_channel)); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(channel, ret_channel.c_str()) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Expecting channel \"" << channel 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "\" for ap=\"" << ap << "\""; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test the writing and deleting functionality of the experiments label 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // helper. 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TestExperimentsLabelHelper(SystemUserInstall install) { 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution* chrome = 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution::CHROME_BROWSER); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::wstring value; 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome->ShouldSetExperimentLabels()); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Before anything is set, ReadExperimentLabels should succeed but return 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // an empty string. 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::ReadExperimentLabels( 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), value); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetExperimentLabels( 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, kTestExperimentLabel)); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Validate that something is written. Only worry about the label itself. 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegKey key; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HKEY root = install == SYSTEM_INSTALL ? 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 state_key = install == SYSTEM_INSTALL ? 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome->GetStateMediumKey() : chrome->GetStateKey(); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Open(root, state_key.c_str(), KEY_QUERY_VALUE)); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.ReadValue(google_update::kExperimentLabels, &value)); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kTestExperimentLabel, value); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::ReadExperimentLabels( 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kTestExperimentLabel, value); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Close(); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now that the label is set, test the delete functionality. An empty label 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should result in deleting the value. 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetExperimentLabels( 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, string16())); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Open(root, state_key.c_str(), KEY_QUERY_VALUE)); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_FILE_NOT_FOUND, 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.ReadValue(google_update::kExperimentLabels, &value)); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::ReadExperimentLabels( 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(string16(), value); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Close(); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome->ShouldSetExperimentLabels()); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::ReadExperimentLabels( 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // GOOGLE_CHROME_BUILD 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates "ap" key with the value given as parameter. Also adds work 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items to work_item_list given so that they can be rolled back later. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateApKey(WorkItemList* work_item_list, const std::wstring& value) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY reg_root = HKEY_CURRENT_USER; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key = GetApKeyPath(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->AddCreateRegKeyWorkItem(reg_root, reg_key); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->AddSetRegValueWorkItem(reg_root, reg_key, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) google_update::kRegApField, value.c_str(), true); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!work_item_list->Do()) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the key path of "ap" key, e.g.: 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Google\Update\ClientState\<kTestProductGuid> 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring GetApKeyPath() { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key(google_update::kRegPathClientState); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg_key.append(L"\\"); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg_key.append(kTestProductGuid); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reg_key; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Utility method to read "ap" key value 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ReadApKeyValue() { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ap_key_value; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key = GetApKeyPath(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key.Open(HKEY_CURRENT_USER, reg_key.c_str(), KEY_ALL_ACCESS) == 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.ReadValue(google_update::kRegApField, &ap_key_value); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ap_key_value; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_util::RegistryOverrideManager registry_overrides_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that we return success on no registration (which means stable), 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whether per-system or per-user install. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelAbsent) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-system first. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 channel; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(true, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then per-user. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test an empty Ap key for system and user. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelEmptySystem) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetApField(SYSTEM_INSTALL, L""); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 channel; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(true, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-user lookups still succeed and return empty string. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelEmptyUser) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetApField(USER_INSTALL, L""); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-system lookups still succeed and return empty string. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 channel; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(true, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-user lookup should succeed. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelVariousApValuesSystem) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCurrentChromeChannelWithVariousApValues(SYSTEM_INSTALL); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelVariousApValuesUser) { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCurrentChromeChannelWithVariousApValues(USER_INSTALL); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Run through all combinations of diff vs. full install, single vs. multi 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// install, success and failure results, and a fistful of initial "ap" values 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// checking that the expected final "ap" value is generated by 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GoogleUpdateSettings::UpdateGoogleUpdateApKey. 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, UpdateGoogleUpdateApKey) { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const installer::ArchiveType archive_types[] = { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::UNKNOWN_ARCHIVE_TYPE, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FULL_ARCHIVE_TYPE, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int results[] = { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FIRST_INSTALL_SUCCESS, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const plain[] = { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"", 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1", 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev" 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const full[] = { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"-full", 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-full", 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev-full" 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(full) == arraysize(plain), bad_full_array_size); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const multifail[] = { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"-multifail", 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-multifail", 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev-multifail" 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(multifail) == arraysize(plain), 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bad_multifail_array_size); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const multifail_full[] = { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"-multifail-full", 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-multifail-full", 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev-multifail-full" 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(multifail_full) == arraysize(plain), 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bad_multifail_full_array_size); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const* input_arrays[] = { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plain, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multifail, 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multifail_full 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChannelInfo v; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int type_idx = 0; type_idx < arraysize(archive_types); ++type_idx) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const installer::ArchiveType archive_type = archive_types[type_idx]; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int result_idx = 0; result_idx < arraysize(results); ++result_idx) { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int result = results[result_idx]; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The archive type will/must always be known on install success. 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (archive_type == installer::UNKNOWN_ARCHIVE_TYPE && 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result == installer::FIRST_INSTALL_SUCCESS) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const* outputs = NULL; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result == installer::FIRST_INSTALL_SUCCESS || 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) archive_type == installer::FULL_ARCHIVE_TYPE) { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = plain; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (archive_type == installer::INCREMENTAL_ARCHIVE_TYPE) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = full; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } // else if (archive_type == UNKNOWN) see below 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int inputs_idx = 0; inputs_idx < arraysize(input_arrays); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++inputs_idx) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const* inputs = input_arrays[inputs_idx]; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (archive_type == installer::UNKNOWN_ARCHIVE_TYPE) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "-full" is untouched if the archive type is unknown. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "-multifail" is unconditionally removed. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (inputs == full || inputs == multifail_full) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = full; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = plain; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int input_idx = 0; input_idx < arraysize(plain); ++input_idx) { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* input = inputs[input_idx]; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* output = outputs[input_idx]; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v.set_value(input); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == v.value()) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::UpdateGoogleUpdateApKey( 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) archive_type, result, &v)) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "archive_type: " << archive_type 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", result: " << result 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", input ap value: " << input; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::UpdateGoogleUpdateApKey( 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) archive_type, result, &v)) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "archive_type: " << archive_type 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", result: " << result 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", input ap value: " << input; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(output, v.value()) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "archive_type: " << archive_type 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", result: " << result 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", input ap value: " << input; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, UpdateInstallStatusTest) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WorkItemList> work_item_list(WorkItem::CreateWorkItemList()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test incremental install failure 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"")) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L"-full"); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test incremental install success 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"")) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FIRST_INSTALL_SUCCESS, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test full install failure 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"-full")) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, installer::FULL_ARCHIVE_TYPE, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test full install success 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"-full")) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, installer::FULL_ARCHIVE_TYPE, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FIRST_INSTALL_SUCCESS, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the case of when "ap" key doesnt exist at all 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ap_key_value = ReadApKeyValue(); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key = GetApKeyPath(); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY reg_root = HKEY_CURRENT_USER; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ap_key_deleted = false; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key.Open(HKEY_CURRENT_USER, reg_key.c_str(), KEY_ALL_ACCESS) != 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->AddCreateRegKeyWorkItem(reg_root, reg_key); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(work_item_list->Do()) << "Failed to create ClientState key."; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (key.DeleteValue(google_update::kRegApField) == ERROR_SUCCESS) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ap_key_deleted = true; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // try differential installer 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L"-full"); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // try full installer now 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, installer::FULL_ARCHIVE_TYPE, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now cleanup to leave the system in unchanged state. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Diff installer creates an ap key if it didnt exist, so delete this ap key 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - If we created any reg key path for ap, roll it back 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Finally restore the original value of ap key. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.Open(HKEY_CURRENT_USER, reg_key.c_str(), KEY_ALL_ACCESS); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.DeleteValue(google_update::kRegApField); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ap_key_deleted) { 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), ap_key_value)) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to restore ap key."; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, SetEULAConsent) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using installer::FakeInstallationState; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool multi_install = true; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool system_level = true; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeInstallationState machine_state; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Chrome is installed. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) machine_state.AddChrome(system_level, multi_install, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new Version(chrome::kChromeVersion)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key; 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD value; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* binaries = 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BINARIES); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* chrome = 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BROWSER); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // eulaconsent is set on both the product and the binaries. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetEULAConsent(machine_state, chrome, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true)); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.Open(HKEY_LOCAL_MACHINE, binaries->GetStateMediumKey().c_str(), 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.ReadValueDW(google_update::kRegEULAAceptedField, &value)); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, value); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.Open(HKEY_LOCAL_MACHINE, chrome->GetStateMediumKey().c_str(), 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.ReadValueDW(google_update::kRegEULAAceptedField, &value)); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, value); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the appropriate default is returned if no update override is 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// present. 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, GetAppUpdatePolicyNoOverride) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are no policies at all. 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_FILE_NOT_FOUND, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey().Open(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overridden = true; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kDefaultUpdatePolicy, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The policy key exists, but there are no values of interest present. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey().Create(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE)); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey().Open(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kDefaultUpdatePolicy, 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the default override is returned if no app-specific override is 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// present. 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, GetAppUpdatePolicyDefaultOverride) { 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(0))); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overridden = true; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(1))); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::AUTOMATIC_UPDATES, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(2))); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::MANUAL_UPDATES_ONLY, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(3))); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GoogleUpdateSettings::AUTO_UPDATES_ONLY, 554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &is_overridden)); 556eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(is_overridden); 557eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 558eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The default policy should be in force for bogus values. 559eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ERROR_SUCCESS, 560eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<DWORD>(4))); 563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch is_overridden = true; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kDefaultUpdatePolicy, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that an app-specific override is used if present. 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, GetAppUpdatePolicyAppOverride) { 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring app_policy_value(kGoogleUpdateUpdatePrefix); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_policy_value.append(kTestProductGuid); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(1))); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(0))); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overridden = false; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_overridden); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(kGoogleUpdateUpdateDefault, 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(0))); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(1))); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = false; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::AUTOMATIC_UPDATES, 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_overridden); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(2))); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = false; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::MANUAL_UPDATES_ONLY, 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_overridden); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(3))); 617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch is_overridden = false; 618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GoogleUpdateSettings::AUTO_UPDATES_ONLY, 619eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &is_overridden)); 621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(is_overridden); 622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The default policy should be in force for bogus values. 624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ERROR_SUCCESS, 625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RegKey(HKEY_LOCAL_MACHINE, kGoogleUpdatePoliciesKey, 626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<DWORD>(4))); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, ExperimentsLabelHelperSystem) { 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestExperimentsLabelHelper(SYSTEM_INSTALL); 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, ExperimentsLabelHelperUser) { 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestExperimentsLabelHelper(USER_INSTALL); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(GOOGLE_CHROME_BUILD) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test GoogleUpdateSettings::GetUninstallCommandLine at system- or user-level, 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// according to the param. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GetUninstallCommandLine : public GoogleUpdateSettingsTest, 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface<bool> { 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kDummyCommand[]; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettingsTest::SetUp(); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_install_ = GetParam(); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root_key_ = system_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key_; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_install_; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t GetUninstallCommandLine::kDummyCommand[] = 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\"goopdate.exe\" /spam"; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns an empty string if there's no 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Software\Google\Update key. 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestNoKey) { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(string16(), 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns an empty string if there's no 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UninstallCmdLine value in the Software\Google\Update key. 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestNoValue) { 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(string16(), 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns an empty string if there's an 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty UninstallCmdLine value in the Software\Google\Update key. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestEmptyValue) { 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegUninstallCmdLine, L""); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(string16(), 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns the correct string if there's an 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UninstallCmdLine value in the Software\Google\Update key. 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestRealValue) { 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegUninstallCmdLine, kDummyCommand); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(string16(kDummyCommand), 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that there's no value in the other level (user or system). 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(string16(), 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(!system_install_)); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(GetUninstallCommandLineAtLevel, GetUninstallCommandLine, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Bool()); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test GoogleUpdateSettings::GetGoogleUpdateVersion at system- or user-level, 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// according to the param. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GetGoogleUpdateVersion : public GoogleUpdateSettingsTest, 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface<bool> { 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kDummyVersion[]; 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettingsTest::SetUp(); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_install_ = GetParam(); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root_key_ = system_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key_; 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_install_; 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t GetGoogleUpdateVersion::kDummyVersion[] = L"1.2.3.4"; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns an empty string if there's no 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Software\Google\Update key. 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestNoKey) { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_).IsValid()); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns an empty string if there's no 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version value in the Software\Google\Update key. 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestNoValue) { 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_).IsValid()); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns an empty string if there's an 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty version value in the Software\Google\Update key. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestEmptyValue) { 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegGoogleUpdateVersion, L""); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_).IsValid()); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns the correct string if there's a 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version value in the Software\Google\Update key. 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestRealValue) { 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegGoogleUpdateVersion, kDummyVersion); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Version expected(UTF16ToUTF8(kDummyVersion)); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(expected.Equals( 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_))); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that there's no value in the other level (user or system). 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(!system_install_) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .IsValid()); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(GetGoogleUpdateVersionAtLevel, GetGoogleUpdateVersion, 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Bool()); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test values for use by the CollectStatsConsent test fixture. 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatsState { 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum InstallType { 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SINGLE_INSTALL, 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MULTI_INSTALL, 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum StateSetting { 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NO_SETTING, 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FALSE_SETTING, 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TRUE_SETTING, 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct UserLevelState {}; 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct SystemLevelState {}; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const UserLevelState kUserLevel; 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const SystemLevelState kSystemLevel; 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(const UserLevelState&, 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallType install_type, 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : system_level_(false), 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_install_(install_type == MULTI_INSTALL), 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_value_(state_value), 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_medium_value_(NO_SETTING) { 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(const SystemLevelState&, 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallType install_type, 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value, 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_medium_value) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : system_level_(true), 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_install_(install_type == MULTI_INSTALL), 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_value_(state_value), 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_medium_value_(state_medium_value) { 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_level() const { return system_level_; } 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool multi_install() const { return multi_install_; } 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key() const { 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return system_level_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value() const { return state_value_; } 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_medium_value() const { 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return state_medium_value_; 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_consent_granted() const { 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (system_level_ && state_medium_value_ != NO_SETTING) ? 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (state_medium_value_ == TRUE_SETTING) : 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (state_value_ == TRUE_SETTING); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_level_; 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool multi_install_; 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value_; 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_medium_value_; 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StatsState::UserLevelState StatsState::kUserLevel; 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StatsState::SystemLevelState StatsState::kSystemLevel; 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A value parameterized test for testing the stats collection consent setting. 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CollectStatsConsent : public ::testing::TestWithParam<StatsState> { 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetUpTestCase(); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void TearDownTestCase(); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void MakeChromeMultiInstall(HKEY root_key); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ApplySetting(StatsState::StateSetting setting, 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& reg_key); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* chrome_version_key_; 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* chrome_state_key_; 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* chrome_state_medium_key_; 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* binaries_state_key_; 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* binaries_state_medium_key_; 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_util::RegistryOverrideManager override_manager_; 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::chrome_version_key_; 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::chrome_state_key_; 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::chrome_state_medium_key_; 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::binaries_state_key_; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::binaries_state_medium_key_; 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::SetUpTestCase() { 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist = 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BROWSER); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_version_key_ = new std::wstring(dist->GetVersionKey()); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_key_ = new std::wstring(dist->GetStateKey()); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_medium_key_ = new std::wstring(dist->GetStateMediumKey()); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dist = BrowserDistribution::GetSpecificDistribution( 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BINARIES); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_key_ = new std::wstring(dist->GetStateKey()); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_medium_key_ = new std::wstring(dist->GetStateMediumKey()); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::TearDownTestCase() { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete chrome_version_key_; 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete chrome_state_key_; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete chrome_state_medium_key_; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete binaries_state_key_; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete binaries_state_medium_key_; 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Install the registry override and apply the settings to the registry. 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::SetUp() { 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const StatsState& stats_state = GetParam(); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HKEY root_key = stats_state.root_key(); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_temp_name(stats_state.system_level() ? L"HKLM_" : L"HKCU_"); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg_temp_name += L"CollectStatsConsent"; 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) override_manager_.OverrideRegistry(root_key, reg_temp_name); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stats_state.multi_install()) { 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeChromeMultiInstall(root_key); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_value(), root_key, *binaries_state_key_); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_medium_value(), root_key, 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *binaries_state_medium_key_); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_value(), root_key, *chrome_state_key_); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_medium_value(), root_key, 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *chrome_state_medium_key_); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Write values into the registry so that Chrome is considered to be installed 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as multi-install. 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::MakeChromeMultiInstall(HKEY root_key) { 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key, chrome_version_key_->c_str(), 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(google_update::kRegVersionField, 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.2.3.4")); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key, chrome_state_key_->c_str(), 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(installer::kUninstallArgumentsField, 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"--multi-install")); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Write the correct value to represent |setting| in the registry. 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::ApplySetting(StatsState::StateSetting setting, 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key, 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& reg_key) { 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting != StatsState::NO_SETTING) { 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD value = setting != StatsState::FALSE_SETTING ? 1 : 0; 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key, reg_key.c_str(), 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(google_update::kRegUsageStatsField, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value)); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that stats consent can be read. 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(CollectStatsConsent, GetCollectStatsConsentAtLevel) { 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetParam().is_consent_granted()) { 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that stats consent can be flipped to the opposite setting, that the new 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// setting takes affect, and that the correct registry location is modified. 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(CollectStatsConsent, SetCollectStatsConsentAtLevel) { 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetCollectStatsConsentAtLevel( 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level(), 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !GetParam().is_consent_granted())); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring* const reg_keys[] = { 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_key_, 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_medium_key_, 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_key_, 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_medium_key_, 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_index = ((GetParam().system_level() ? 1 : 0) + 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (GetParam().multi_install() ? 2 : 0)); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& reg_key = *reg_keys[key_index]; 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD value = 0; 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(GetParam().root_key(), reg_key.c_str(), 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE).ReadValueDW(google_update::kRegUsageStatsField, 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &value)); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetParam().is_consent_granted()) { 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0UL, value); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1UL, value); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserLevelSingleInstall, 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::SINGLE_INSTALL, 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING), 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::SINGLE_INSTALL, 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING), 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::SINGLE_INSTALL, 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING))); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserLevelMultiInstall, 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::MULTI_INSTALL, 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING), 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::MULTI_INSTALL, 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING), 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::MULTI_INSTALL, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING))); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemLevelSingleInstall, 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::NO_SETTING), 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::FALSE_SETTING), 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::TRUE_SETTING), 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::NO_SETTING), 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::FALSE_SETTING), 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::TRUE_SETTING), 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::NO_SETTING), 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::FALSE_SETTING), 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::TRUE_SETTING))); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemLevelMultiInstall, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::NO_SETTING), 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::FALSE_SETTING), 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::TRUE_SETTING), 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::NO_SETTING), 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::FALSE_SETTING), 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::TRUE_SETTING), 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::NO_SETTING), 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::FALSE_SETTING), 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::TRUE_SETTING))); 1026