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 kTestProductGuid[] = L"{89F1B351-B15D-48D4-8F10-1298721CF13D}"; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const wchar_t kTestExperimentLabel[] = L"test_label_value"; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test fixture redirects the HKLM and HKCU registry hives for 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the duration of the test to make it independent of the machine 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and user settings. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GoogleUpdateSettingsTest : public testing::Test { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_overrides_.OverrideRegistry(HKEY_LOCAL_MACHINE, L"HKLM_pit"); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_overrides_.OverrideRegistry(HKEY_CURRENT_USER, L"HKCU_pit"); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum SystemUserInstall { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SYSTEM_INSTALL, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) USER_INSTALL, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetApField(SystemUserInstall is_system, const wchar_t* value) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root = is_system == SYSTEM_INSTALL ? 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey update_key; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring path = dist->GetStateKey(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, update_key.Create(root, path.c_str(), KEY_WRITE)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, update_key.WriteValue(L"ap", value)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Sets the "ap" field for a multi-install product (both the product and 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // the binaries). 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void SetMultiApField(SystemUserInstall is_system, const wchar_t* value) { 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Caller must specify a multi-install ap value. 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_NE(std::wstring::npos, std::wstring(value).find(L"-multi")); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) HKEY root = is_system == SYSTEM_INSTALL ? 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) RegKey update_key; 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Write the ap value for both the product and the binaries. 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BrowserDistribution* const kDists[] = { 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BrowserDistribution::GetDistribution(), 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BrowserDistribution::CHROME_BINARIES) 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (size_t i = 0; i < arraysize(kDists); ++i) { 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::wstring path = kDists[i]->GetStateKey(); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, update_key.Create(root, path.c_str(), 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) KEY_WRITE)); 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, update_key.WriteValue(L"ap", value)); 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Make the product technically multi-install. 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) update_key.Create(root, dist->GetStateKey().c_str(), KEY_WRITE)); 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(ERROR_SUCCESS, 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) update_key.WriteValue(installer::kUninstallArgumentsField, 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) L"--multi-install")); 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests setting the ap= value to various combinations of values with 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefixes and suffixes, while asserting on the correct channel value. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that any non-empty ap= value that doesn't match ".*-{dev|beta}.*" 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will return the "unknown" channel. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestCurrentChromeChannelWithVariousApValues(SystemUserInstall install) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static struct Expectations { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* ap_value; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* channel; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } expectations[] = { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"dev", installer::kChromeChannelDev }, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-dev", installer::kChromeChannelDev }, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-developer", installer::kChromeChannelDev }, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"beta", installer::kChromeChannelBeta }, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-beta", installer::kChromeChannelBeta }, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { L"-betamax", installer::kChromeChannelBeta }, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_system = install == SYSTEM_INSTALL; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* prefixes[] = { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"", 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"prefix", 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"prefix-with-dash", 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* suffixes[] = { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"", 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"suffix", 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"suffix-with-dash", 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(prefixes); ++i) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t j = 0; j < arraysize(expectations); ++j) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t k = 0; k < arraysize(suffixes); ++k) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ap = prefixes[i]; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ap += expectations[j].ap_value; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ap += suffixes[k]; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* channel = expectations[j].channel; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetApField(install, ap.c_str()); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 ret_channel; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers( 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_system, &ret_channel)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(channel, ret_channel.c_str()) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Expecting channel \"" << channel 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "\" for ap=\"" << ap << "\""; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test the writing and deleting functionality of the experiments label 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // helper. 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TestExperimentsLabelHelper(SystemUserInstall install) { 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution* chrome = 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution::CHROME_BROWSER); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::wstring value; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome->ShouldSetExperimentLabels()); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Before anything is set, ReadExperimentLabels should succeed but return 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // an empty string. 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::ReadExperimentLabels( 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), value); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetExperimentLabels( 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, kTestExperimentLabel)); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Validate that something is written. Only worry about the label itself. 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegKey key; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HKEY root = install == SYSTEM_INSTALL ? 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 state_key = install == SYSTEM_INSTALL ? 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome->GetStateMediumKey() : chrome->GetStateKey(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Open(root, state_key.c_str(), KEY_QUERY_VALUE)); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.ReadValue(google_update::kExperimentLabels, &value)); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kTestExperimentLabel, value); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::ReadExperimentLabels( 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kTestExperimentLabel, value); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Close(); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now that the label is set, test the delete functionality. An empty label 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should result in deleting the value. 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetExperimentLabels( 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) install == SYSTEM_INSTALL, base::string16())); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Open(root, state_key.c_str(), KEY_QUERY_VALUE)); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ERROR_FILE_NOT_FOUND, 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.ReadValue(google_update::kExperimentLabels, &value)); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::ReadExperimentLabels( 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), value); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key.Close(); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome->ShouldSetExperimentLabels()); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::ReadExperimentLabels( 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install == SYSTEM_INSTALL, &value)); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // GOOGLE_CHROME_BUILD 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates "ap" key with the value given as parameter. Also adds work 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // items to work_item_list given so that they can be rolled back later. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateApKey(WorkItemList* work_item_list, const std::wstring& value) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY reg_root = HKEY_CURRENT_USER; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key = GetApKeyPath(); 197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) work_item_list->AddCreateRegKeyWorkItem( 198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) reg_root, reg_key, WorkItem::kWow64Default); 199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) work_item_list->AddSetRegValueWorkItem(reg_root, 200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) reg_key, 201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WorkItem::kWow64Default, 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) google_update::kRegApField, 203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) value.c_str(), 204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!work_item_list->Do()) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the key path of "ap" key, e.g.: 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Google\Update\ClientState\<kTestProductGuid> 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring GetApKeyPath() { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key(google_update::kRegPathClientState); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg_key.append(L"\\"); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg_key.append(kTestProductGuid); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reg_key; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Utility method to read "ap" key value 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ReadApKeyValue() { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ap_key_value; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key = GetApKeyPath(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key.Open(HKEY_CURRENT_USER, reg_key.c_str(), KEY_ALL_ACCESS) == 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.ReadValue(google_update::kRegApField, &ap_key_value); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ap_key_value; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool SetUpdatePolicyForAppGuid(const base::string16& app_guid, 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::UpdatePolicy policy) { 236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey policy_key; 237effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (policy_key.Create(HKEY_LOCAL_MACHINE, 238effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE) == ERROR_SUCCESS) { 240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::string16 app_update_override( 241effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdateOverrideValuePrefix); 242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch app_update_override.append(app_guid); 243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return policy_key.WriteValue(app_update_override.c_str(), 244effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(policy)) == ERROR_SUCCESS; 245effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return false; 247effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 249effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DWORD GetUpdatePolicyForAppGuid(const base::string16& app_guid) { 250effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey policy_key; 251effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (policy_key.Create(HKEY_LOCAL_MACHINE, 252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_QUERY_VALUE) == ERROR_SUCCESS) { 254effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::string16 app_update_override( 255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdateOverrideValuePrefix); 256effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch app_update_override.append(app_guid); 257effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 258effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DWORD value = -1; 259effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (policy_key.ReadValueDW(app_update_override.c_str(), 260effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &value) == ERROR_SUCCESS) { 261effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return value; 262effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 263effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 264effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return -1; 265effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 266effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 267effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool SetGlobalUpdatePolicy(GoogleUpdateSettings::UpdatePolicy policy) { 268effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey policy_key; 269effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return policy_key.Create(HKEY_LOCAL_MACHINE, 270effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 271effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE) == ERROR_SUCCESS && 272effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy_key.WriteValue(GoogleUpdateSettings::kUpdatePolicyValue, 273effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(policy)) == ERROR_SUCCESS; 274effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 275effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 276effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DWORD GetGlobalUpdatePolicy() { 277effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey policy_key; 278effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DWORD value = -1; 279effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return (policy_key.Create(HKEY_LOCAL_MACHINE, 280effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 281effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_QUERY_VALUE) == ERROR_SUCCESS && 282effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy_key.ReadValueDW(GoogleUpdateSettings::kUpdatePolicyValue, 283effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &value) == ERROR_SUCCESS) ? value : -1; 284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool SetUpdateTimeoutOverride(DWORD time_in_minutes) { 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey policy_key; 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return policy_key.Create(HKEY_LOCAL_MACHINE, 289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE) == ERROR_SUCCESS && 291effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policy_key.WriteValue( 292effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kCheckPeriodOverrideMinutes, 293effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch time_in_minutes) == ERROR_SUCCESS; 294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 295effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_util::RegistryOverrideManager registry_overrides_; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verify that we return success on no registration (which means stable), 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// whether per-system or per-user install. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelAbsent) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-system first. 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 channel; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(true, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then per-user. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test an empty Ap key for system and user. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelEmptySystem) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetApField(SYSTEM_INSTALL, L""); 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 channel; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(true, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-user lookups still succeed and return empty string. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelEmptyUser) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetApField(USER_INSTALL, L""); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-system lookups still succeed and return empty string. 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 channel; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(true, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Per-user lookup should succeed. 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &channel)); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(L"", channel.c_str()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Test that the channel is pulled from the binaries for multi-install products. 34546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, MultiInstallChannelFromBinaries) { 34646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetMultiApField(USER_INSTALL, L"2.0-dev-multi-chrome"); 34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16 channel; 34846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 35046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &channel)); 35146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_STREQ(L"dev-m", channel.c_str()); 35246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // See if the same happens if the product's ap is cleared. 35446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetApField(USER_INSTALL, L""); 35546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &channel)); 35746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_STREQ(L"dev-m", channel.c_str()); 35846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Test the converse (binaries are stable, Chrome is other). 36046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetMultiApField(USER_INSTALL, L"-multi-chrome"); 36146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SetApField(USER_INSTALL, L"2.0-dev-multi-chrome"); 36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetChromeChannelAndModifiers(false, 36346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &channel)); 36446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_STREQ(L"m", channel.c_str()); 36546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 36646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelVariousApValuesSystem) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCurrentChromeChannelWithVariousApValues(SYSTEM_INSTALL); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, CurrentChromeChannelVariousApValuesUser) { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCurrentChromeChannelWithVariousApValues(USER_INSTALL); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Run through all combinations of diff vs. full install, single vs. multi 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// install, success and failure results, and a fistful of initial "ap" values 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// checking that the expected final "ap" value is generated by 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GoogleUpdateSettings::UpdateGoogleUpdateApKey. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, UpdateGoogleUpdateApKey) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const installer::ArchiveType archive_types[] = { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::UNKNOWN_ARCHIVE_TYPE, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FULL_ARCHIVE_TYPE, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int results[] = { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FIRST_INSTALL_SUCCESS, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const plain[] = { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"", 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1", 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev" 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const full[] = { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"-full", 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-full", 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev-full" 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(full) == arraysize(plain), bad_full_array_size); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const multifail[] = { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"-multifail", 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-multifail", 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev-multifail" 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(multifail) == arraysize(plain), 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bad_multifail_array_size); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const multifail_full[] = { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"-multifail-full", 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-multifail-full", 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.1-dev-multifail-full" 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) COMPILE_ASSERT(arraysize(multifail_full) == arraysize(plain), 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bad_multifail_full_array_size); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const* input_arrays[] = { 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plain, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) full, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multifail, 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multifail_full 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChannelInfo v; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int type_idx = 0; type_idx < arraysize(archive_types); ++type_idx) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const installer::ArchiveType archive_type = archive_types[type_idx]; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int result_idx = 0; result_idx < arraysize(results); ++result_idx) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int result = results[result_idx]; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The archive type will/must always be known on install success. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (archive_type == installer::UNKNOWN_ARCHIVE_TYPE && 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result == installer::FIRST_INSTALL_SUCCESS) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const* outputs = NULL; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (result == installer::FIRST_INSTALL_SUCCESS || 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) archive_type == installer::FULL_ARCHIVE_TYPE) { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = plain; 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (archive_type == installer::INCREMENTAL_ARCHIVE_TYPE) { 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = full; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } // else if (archive_type == UNKNOWN) see below 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int inputs_idx = 0; inputs_idx < arraysize(input_arrays); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++inputs_idx) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* const* inputs = input_arrays[inputs_idx]; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (archive_type == installer::UNKNOWN_ARCHIVE_TYPE) { 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "-full" is untouched if the archive type is unknown. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "-multifail" is unconditionally removed. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (inputs == full || inputs == multifail_full) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = full; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outputs = plain; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int input_idx = 0; input_idx < arraysize(plain); ++input_idx) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* input = inputs[input_idx]; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* output = outputs[input_idx]; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) v.set_value(input); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (output == v.value()) { 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::UpdateGoogleUpdateApKey( 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) archive_type, result, &v)) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "archive_type: " << archive_type 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", result: " << result 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", input ap value: " << input; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::UpdateGoogleUpdateApKey( 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) archive_type, result, &v)) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "archive_type: " << archive_type 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", result: " << result 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", input ap value: " << input; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(output, v.value()) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "archive_type: " << archive_type 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", result: " << result 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << ", input ap value: " << input; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, UpdateInstallStatusTest) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WorkItemList> work_item_list(WorkItem::CreateWorkItemList()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test incremental install failure 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"")) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L"-full"); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test incremental install success 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"")) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FIRST_INSTALL_SUCCESS, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test full install failure 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"-full")) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, installer::FULL_ARCHIVE_TYPE, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test full install success 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), L"-full")) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to create ap key."; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, installer::FULL_ARCHIVE_TYPE, 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::FIRST_INSTALL_SUCCESS, 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the case of when "ap" key doesnt exist at all 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ap_key_value = ReadApKeyValue(); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_key = GetApKeyPath(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY reg_root = HKEY_CURRENT_USER; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ap_key_deleted = false; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key; 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key.Open(HKEY_CURRENT_USER, reg_key.c_str(), KEY_ALL_ACCESS) != 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS) { 529cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) work_item_list->AddCreateRegKeyWorkItem( 530cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) reg_root, reg_key, WorkItem::kWow64Default); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(work_item_list->Do()) << "Failed to create ClientState key."; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (key.DeleteValue(google_update::kRegApField) == ERROR_SUCCESS) { 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ap_key_deleted = true; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // try differential installer 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INCREMENTAL_ARCHIVE_TYPE, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L"-full"); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // try full installer now 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::UpdateInstallStatus(false, installer::FULL_ARCHIVE_TYPE, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_FAILED, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTestProductGuid); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(ReadApKeyValue().c_str(), L""); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now cleanup to leave the system in unchanged state. 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Diff installer creates an ap key if it didnt exist, so delete this ap key 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - If we created any reg key path for ap, roll it back 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - Finally restore the original value of ap key. 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.Open(HKEY_CURRENT_USER, reg_key.c_str(), KEY_ALL_ACCESS); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.DeleteValue(google_update::kRegApField); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list->Rollback(); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ap_key_deleted) { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_item_list.reset(WorkItem::CreateWorkItemList()); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateApKey(work_item_list.get(), ap_key_value)) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Failed to restore ap key."; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, SetEULAConsent) { 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using installer::FakeInstallationState; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool multi_install = true; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool system_level = true; 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeInstallationState machine_state; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Chrome is installed. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) machine_state.AddChrome(system_level, multi_install, 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new Version(chrome::kChromeVersion)); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey key; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD value; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* binaries = 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BINARIES); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* chrome = 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BROWSER); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // eulaconsent is set on both the product and the binaries. 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetEULAConsent(machine_state, chrome, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true)); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.Open(HKEY_LOCAL_MACHINE, binaries->GetStateMediumKey().c_str(), 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.ReadValueDW(google_update::kRegEULAAceptedField, &value)); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, value); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.Open(HKEY_LOCAL_MACHINE, chrome->GetStateMediumKey().c_str(), 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key.ReadValueDW(google_update::kRegEULAAceptedField, &value)); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, value); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the appropriate default is returned if no update override is 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// present. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, GetAppUpdatePolicyNoOverride) { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are no policies at all. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_FILE_NOT_FOUND, 602effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey().Open(HKEY_LOCAL_MACHINE, 603effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overridden = true; 606effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::kDefaultUpdatePolicy, 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The policy key exists, but there are no values of interest present. 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 613effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey().Create(HKEY_LOCAL_MACHINE, 614effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE)); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 617effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey().Open(HKEY_LOCAL_MACHINE, 618effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kPoliciesKey, 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE)); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 621effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::kDefaultUpdatePolicy, 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the default override is returned if no app-specific override is 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// present. 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, GetAppUpdatePolicyDefaultOverride) { 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 633effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 634effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 635effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 636effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(0))); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overridden = true; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 644effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 645effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 646effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 647effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(1))); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::AUTOMATIC_UPDATES, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 655effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 656effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 657effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 658effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(2))); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::MANUAL_UPDATES_ONLY, 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 666effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 667effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 668effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 669effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(3))); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GoogleUpdateSettings::AUTO_UPDATES_ONLY, 672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &is_overridden)); 674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_FALSE(is_overridden); 675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The default policy should be in force for bogus values. 677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ERROR_SUCCESS, 678effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 679effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 680effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 681effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(4))); 682eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch is_overridden = true; 683effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::kDefaultUpdatePolicy, 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that an app-specific override is used if present. 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, GetAppUpdatePolicyAppOverride) { 691effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::wstring app_policy_value( 692effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdateOverrideValuePrefix); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_policy_value.append(kTestProductGuid); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 696effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 697effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 698effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 699effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(1))); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 701effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(0))); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_overridden = false; 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_overridden); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 711effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch KEY_SET_VALUE).WriteValue( 713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kUpdatePolicyValue, 714effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static_cast<DWORD>(0))); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 716effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(1))); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = false; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::AUTOMATIC_UPDATES, 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_overridden); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 726effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(2))); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = false; 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::MANUAL_UPDATES_ONLY, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(is_overridden); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ERROR_SUCCESS, 736effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<DWORD>(3))); 739eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch is_overridden = false; 740eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GoogleUpdateSettings::AUTO_UPDATES_ONLY, 741eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 742eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &is_overridden)); 743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(is_overridden); 744eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 745eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // The default policy should be in force for bogus values. 746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ERROR_SUCCESS, 747effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RegKey(HKEY_LOCAL_MACHINE, GoogleUpdateSettings::kPoliciesKey, 748eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch KEY_SET_VALUE).WriteValue(app_policy_value.c_str(), 749eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<DWORD>(4))); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_overridden = true; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &is_overridden)); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(is_overridden); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 757effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(GoogleUpdateSettingsTest, PerAppUpdatesDisabledByPolicy) { 758effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 759effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SetUpdatePolicyForAppGuid(kTestProductGuid, 760effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::UPDATES_DISABLED)); 761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool is_overridden = false; 762effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::UpdatePolicy update_policy = 763effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 764effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &is_overridden); 765effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(is_overridden); 766effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, update_policy); 767effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 768effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 769effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 770effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::ReenableAutoupdatesForApp(kTestProductGuid)); 771effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch update_policy = GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 772effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &is_overridden); 773effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Should still have a policy but now that policy should explicitly enable 774effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // updates. 775effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(is_overridden); 776effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::AUTOMATIC_UPDATES, update_policy); 777effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 778effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 779effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 780effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(GoogleUpdateSettingsTest, PerAppUpdatesEnabledWithGlobalDisabled) { 781effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Disable updates globally but enable them for our specific app (the app- 782effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // specific setting should take precedence). 783effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 784effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SetUpdatePolicyForAppGuid(kTestProductGuid, 785effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::AUTOMATIC_UPDATES)); 786effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(SetGlobalUpdatePolicy(GoogleUpdateSettings::UPDATES_DISABLED)); 787effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 788effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Make sure we read this as still having updates enabled. 789effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 790effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 791effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Make sure that the reset action returns true and is a no-op. 792effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 793effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::ReenableAutoupdatesForApp(kTestProductGuid)); 794effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(static_cast<DWORD>(GoogleUpdateSettings::AUTOMATIC_UPDATES), 795effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GetUpdatePolicyForAppGuid(kTestProductGuid)); 796effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(static_cast<DWORD>(GoogleUpdateSettings::UPDATES_DISABLED), 797effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GetGlobalUpdatePolicy()); 798effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 799effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 800effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(GoogleUpdateSettingsTest, GlobalUpdatesDisabledByPolicy) { 801effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(SetGlobalUpdatePolicy(GoogleUpdateSettings::UPDATES_DISABLED)); 802effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool is_overridden = false; 803effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 804effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The contract for GetAppUpdatePolicy states that |is_overridden| should be 805effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // set to false when updates are disabled on a non-app-specific basis. 806effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::UpdatePolicy update_policy = 807effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 808effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &is_overridden); 809effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(is_overridden); 810effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::UPDATES_DISABLED, update_policy); 811effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 812effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 813effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 814effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::ReenableAutoupdatesForApp(kTestProductGuid)); 815effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch update_policy = GoogleUpdateSettings::GetAppUpdatePolicy(kTestProductGuid, 816effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &is_overridden); 817effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Policy should now be to enable updates, |is_overridden| should still be 818effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // false. 819effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(is_overridden); 820effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(GoogleUpdateSettings::AUTOMATIC_UPDATES, update_policy); 821effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 822effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 823effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 824effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochTEST_F(GoogleUpdateSettingsTest, UpdatesDisabledByTimeout) { 825effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Disable updates altogether. 826effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(SetUpdateTimeoutOverride(0)); 827effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 828effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 829effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::ReenableAutoupdatesForApp(kTestProductGuid)); 830effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 831effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 832effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Set the update period to something unreasonable. 833effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(SetUpdateTimeoutOverride( 834effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::kCheckPeriodOverrideMinutesMax + 1)); 835effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_FALSE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 836effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE( 837effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GoogleUpdateSettings::ReenableAutoupdatesForApp(kTestProductGuid)); 838effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(GoogleUpdateSettings::AreAutoupdatesEnabled(kTestProductGuid)); 839effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 840effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, ExperimentsLabelHelperSystem) { 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestExperimentsLabelHelper(SYSTEM_INSTALL); 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(GoogleUpdateSettingsTest, ExperimentsLabelHelperUser) { 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestExperimentsLabelHelper(USER_INSTALL); 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(GOOGLE_CHROME_BUILD) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test GoogleUpdateSettings::GetUninstallCommandLine at system- or user-level, 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// according to the param. 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GetUninstallCommandLine : public GoogleUpdateSettingsTest, 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface<bool> { 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kDummyCommand[]; 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettingsTest::SetUp(); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_install_ = GetParam(); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root_key_ = system_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key_; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_install_; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t GetUninstallCommandLine::kDummyCommand[] = 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\"goopdate.exe\" /spam"; 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns an empty string if there's no 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Software\Google\Update key. 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestNoKey) { 8745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns an empty string if there's no 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UninstallCmdLine value in the Software\Google\Update key. 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestNoValue) { 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE); 8825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns an empty string if there's an 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty UninstallCmdLine value in the Software\Google\Update key. 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestEmptyValue) { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegUninstallCmdLine, L""); 8915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetUninstallCommandLine returns the correct string if there's an 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UninstallCmdLine value in the Software\Google\Update key. 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetUninstallCommandLine, TestRealValue) { 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegUninstallCmdLine, kDummyCommand); 9005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(kDummyCommand), 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(system_install_)); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that there's no value in the other level (user or system). 9035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetUninstallCommandLine(!system_install_)); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(GetUninstallCommandLineAtLevel, GetUninstallCommandLine, 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Bool()); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test GoogleUpdateSettings::GetGoogleUpdateVersion at system- or user-level, 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// according to the param. 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GetGoogleUpdateVersion : public GoogleUpdateSettingsTest, 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface<bool> { 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kDummyVersion[]; 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettingsTest::SetUp(); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_install_ = GetParam(); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root_key_ = system_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key_; 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_install_; 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t GetGoogleUpdateVersion::kDummyVersion[] = L"1.2.3.4"; 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns an empty string if there's no 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Software\Google\Update key. 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestNoKey) { 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_).IsValid()); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns an empty string if there's no 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version value in the Software\Google\Update key. 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestNoValue) { 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_).IsValid()); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns an empty string if there's an 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty version value in the Software\Google\Update key. 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestEmptyValue) { 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegGoogleUpdateVersion, L""); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_).IsValid()); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that GetGoogleUpdateVersion returns the correct string if there's a 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// version value in the Software\Google\Update key. 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(GetGoogleUpdateVersion, TestRealValue) { 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key_, google_update::kRegPathGoogleUpdate, KEY_SET_VALUE) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WriteValue(google_update::kRegGoogleUpdateVersion, kDummyVersion); 9585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Version expected(base::UTF16ToUTF8(kDummyVersion)); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(expected.Equals( 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(system_install_))); 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that there's no value in the other level (user or system). 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoogleUpdateSettings::GetGoogleUpdateVersion(!system_install_) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .IsValid()); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(GetGoogleUpdateVersionAtLevel, GetGoogleUpdateVersion, 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Bool()); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test values for use by the CollectStatsConsent test fixture. 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatsState { 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum InstallType { 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SINGLE_INSTALL, 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MULTI_INSTALL, 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum StateSetting { 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NO_SETTING, 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FALSE_SETTING, 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TRUE_SETTING, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct UserLevelState {}; 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct SystemLevelState {}; 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const UserLevelState kUserLevel; 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const SystemLevelState kSystemLevel; 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(const UserLevelState&, 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallType install_type, 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value) 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : system_level_(false), 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_install_(install_type == MULTI_INSTALL), 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_value_(state_value), 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_medium_value_(NO_SETTING) { 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(const SystemLevelState&, 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallType install_type, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value, 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_medium_value) 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : system_level_(true), 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_install_(install_type == MULTI_INSTALL), 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_value_(state_value), 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_medium_value_(state_medium_value) { 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_level() const { return system_level_; } 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool multi_install() const { return multi_install_; } 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key() const { 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return system_level_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value() const { return state_value_; } 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_medium_value() const { 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return state_medium_value_; 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_consent_granted() const { 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (system_level_ && state_medium_value_ != NO_SETTING) ? 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (state_medium_value_ == TRUE_SETTING) : 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (state_value_ == TRUE_SETTING); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1018effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool system_level_; 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool multi_install_; 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_value_; 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StateSetting state_medium_value_; 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StatsState::UserLevelState StatsState::kUserLevel; 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StatsState::SystemLevelState StatsState::kSystemLevel; 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A value parameterized test for testing the stats collection consent setting. 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CollectStatsConsent : public ::testing::TestWithParam<StatsState> { 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetUpTestCase(); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void TearDownTestCase(); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void MakeChromeMultiInstall(HKEY root_key); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ApplySetting(StatsState::StateSetting setting, 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key, 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& reg_key); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* chrome_version_key_; 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* chrome_state_key_; 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* chrome_state_medium_key_; 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* binaries_state_key_; 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring* binaries_state_medium_key_; 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_util::RegistryOverrideManager override_manager_; 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::chrome_version_key_; 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::chrome_state_key_; 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::chrome_state_medium_key_; 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::binaries_state_key_; 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring* CollectStatsConsent::binaries_state_medium_key_; 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::SetUpTestCase() { 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist = 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::GetSpecificDistribution( 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BROWSER); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_version_key_ = new std::wstring(dist->GetVersionKey()); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_key_ = new std::wstring(dist->GetStateKey()); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_medium_key_ = new std::wstring(dist->GetStateMediumKey()); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dist = BrowserDistribution::GetSpecificDistribution( 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution::CHROME_BINARIES); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_key_ = new std::wstring(dist->GetStateKey()); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_medium_key_ = new std::wstring(dist->GetStateMediumKey()); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::TearDownTestCase() { 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete chrome_version_key_; 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete chrome_state_key_; 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete chrome_state_medium_key_; 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete binaries_state_key_; 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete binaries_state_medium_key_; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Install the registry override and apply the settings to the registry. 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::SetUp() { 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const StatsState& stats_state = GetParam(); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HKEY root_key = stats_state.root_key(); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring reg_temp_name(stats_state.system_level() ? L"HKLM_" : L"HKCU_"); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reg_temp_name += L"CollectStatsConsent"; 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) override_manager_.OverrideRegistry(root_key, reg_temp_name); 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (stats_state.multi_install()) { 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeChromeMultiInstall(root_key); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_value(), root_key, *binaries_state_key_); 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_medium_value(), root_key, 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *binaries_state_medium_key_); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_value(), root_key, *chrome_state_key_); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ApplySetting(stats_state.state_medium_value(), root_key, 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *chrome_state_medium_key_); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Write values into the registry so that Chrome is considered to be installed 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as multi-install. 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::MakeChromeMultiInstall(HKEY root_key) { 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key, chrome_version_key_->c_str(), 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(google_update::kRegVersionField, 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"1.2.3.4")); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key, chrome_state_key_->c_str(), 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(installer::kUninstallArgumentsField, 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"--multi-install")); 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Write the correct value to represent |setting| in the registry. 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CollectStatsConsent::ApplySetting(StatsState::StateSetting setting, 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HKEY root_key, 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& reg_key) { 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting != StatsState::NO_SETTING) { 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD value = setting != StatsState::FALSE_SETTING ? 1 : 0; 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(root_key, reg_key.c_str(), 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_SET_VALUE).WriteValue(google_update::kRegUsageStatsField, 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value)); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that stats consent can be read. 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(CollectStatsConsent, GetCollectStatsConsentAtLevel) { 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetParam().is_consent_granted()) { 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that stats consent can be flipped to the opposite setting, that the new 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// setting takes affect, and that the correct registry location is modified. 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(CollectStatsConsent, SetCollectStatsConsentAtLevel) { 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::SetCollectStatsConsentAtLevel( 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level(), 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !GetParam().is_consent_granted())); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring* const reg_keys[] = { 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_key_, 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_state_medium_key_, 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_key_, 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) binaries_state_medium_key_, 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_index = ((GetParam().system_level() ? 1 : 0) + 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (GetParam().multi_install() ? 2 : 0)); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& reg_key = *reg_keys[key_index]; 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD value = 0; 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ERROR_SUCCESS, 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegKey(GetParam().root_key(), reg_key.c_str(), 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_QUERY_VALUE).ReadValueDW(google_update::kRegUsageStatsField, 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &value)); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetParam().is_consent_granted()) { 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0UL, value); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GoogleUpdateSettings::GetCollectStatsConsentAtLevel( 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetParam().system_level())); 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1UL, value); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserLevelSingleInstall, 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::SINGLE_INSTALL, 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING), 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::SINGLE_INSTALL, 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING), 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::SINGLE_INSTALL, 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING))); 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserLevelMultiInstall, 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::MULTI_INSTALL, 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING), 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::MULTI_INSTALL, 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING), 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kUserLevel, StatsState::MULTI_INSTALL, 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING))); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemLevelSingleInstall, 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::NO_SETTING), 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::FALSE_SETTING), 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::TRUE_SETTING), 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::NO_SETTING), 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::FALSE_SETTING), 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::TRUE_SETTING), 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::NO_SETTING), 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::FALSE_SETTING), 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::SINGLE_INSTALL, 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::TRUE_SETTING))); 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemLevelMultiInstall, 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CollectStatsConsent, 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::testing::Values( 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::NO_SETTING), 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::FALSE_SETTING), 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::NO_SETTING, StatsState::TRUE_SETTING), 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::NO_SETTING), 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::FALSE_SETTING), 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::FALSE_SETTING, StatsState::TRUE_SETTING), 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::NO_SETTING), 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::FALSE_SETTING), 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState(StatsState::kSystemLevel, StatsState::MULTI_INSTALL, 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StatsState::TRUE_SETTING, StatsState::TRUE_SETTING))); 1233