Commit 14b66a19 authored by Adam Norberg's avatar Adam Norberg Committed by Chromium LUCI CQ

Switch to the new ExternalConstantsOverrider.

external_constants.cc now uses ExternalConstantsOverrider to load overrides
rather than DevOverridesProvider. Tests have been updated to use
ExternalConstantsBuilder or write the override file directly, whichever
is more appropriate.

Bug: 1154901
Change-Id: I35383e25058c1799f99583128b5e695cbf90ac1d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2634264Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Commit-Queue: Adam Norberg <norberg@google.com>
Cr-Commit-Position: refs/heads/master@{#845352}
parent aa2bdc4a
...@@ -115,7 +115,6 @@ if (is_win || is_mac) { ...@@ -115,7 +115,6 @@ if (is_win || is_mac) {
"external_constants.h", "external_constants.h",
"external_constants_builder.cc", "external_constants_builder.cc",
"external_constants_builder.h", "external_constants_builder.h",
"external_constants_impl.h",
"external_constants_override.cc", "external_constants_override.cc",
"external_constants_override.h", "external_constants_override.h",
"installer.cc", "installer.cc",
...@@ -153,7 +152,6 @@ if (is_win || is_mac) { ...@@ -153,7 +152,6 @@ if (is_win || is_mac) {
"app/server/mac/service_protocol.mm", "app/server/mac/service_protocol.mm",
"app/server/mac/update_service_wrappers.h", "app/server/mac/update_service_wrappers.h",
"app/server/mac/update_service_wrappers.mm", "app/server/mac/update_service_wrappers.mm",
"external_constants_mac.mm",
"installer_mac.cc", "installer_mac.cc",
"launchd_util.cc", "launchd_util.cc",
"launchd_util.h", "launchd_util.h",
...@@ -180,7 +178,6 @@ if (is_win || is_mac) { ...@@ -180,7 +178,6 @@ if (is_win || is_mac) {
"app/server/win/server.h", "app/server/win/server.h",
"app/server/win/service_main.cc", "app/server/win/service_main.cc",
"app/server/win/service_main.h", "app/server/win/service_main.h",
"external_constants_win.cc",
"lib_util_win.cc", "lib_util_win.cc",
"prefs_win.cc", "prefs_win.cc",
"service_factory_win.cc", "service_factory_win.cc",
...@@ -336,8 +333,6 @@ if (is_win || is_mac) { ...@@ -336,8 +333,6 @@ if (is_win || is_mac) {
"enum_traits_unittest.cc", "enum_traits_unittest.cc",
"external_constants_builder_unittest.cc", "external_constants_builder_unittest.cc",
"external_constants_override_unittest.cc", "external_constants_override_unittest.cc",
"external_constants_unittest.cc",
"external_constants_unittest.h",
"lib_util_unittest.cc", "lib_util_unittest.cc",
"persisted_data_unittest.cc", "persisted_data_unittest.cc",
"policy_manager_unittest.cc", "policy_manager_unittest.cc",
...@@ -378,10 +373,7 @@ if (is_win || is_mac) { ...@@ -378,10 +373,7 @@ if (is_win || is_mac) {
] ]
if (is_win) { if (is_win) {
sources += [ sources += [ "test/integration_tests_win.cc" ]
"external_constants_win_unittest.cc",
"test/integration_tests_win.cc",
]
deps += [ deps += [
"//chrome/updater/app/server/win:updater_idl_idl", "//chrome/updater/app/server/win:updater_idl_idl",
...@@ -399,7 +391,6 @@ if (is_win || is_mac) { ...@@ -399,7 +391,6 @@ if (is_win || is_mac) {
if (is_mac) { if (is_mac) {
sources += [ sources += [
"external_constants_mac_unittest.mm",
"mac/scoped_xpc_service_mock.h", "mac/scoped_xpc_service_mock.h",
"mac/scoped_xpc_service_mock.mm", "mac/scoped_xpc_service_mock.mm",
"mac/update_service_proxy_test.mm", "mac/update_service_proxy_test.mm",
......
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/updater/external_constants.h" #include "chrome/updater/external_constants.h"
#include "chrome/updater/external_constants_impl.h"
#include "chrome/updater/constants.h" #include "chrome/updater/constants.h"
#include "chrome/updater/external_constants_override.h"
#include "chrome/updater/updater_branding.h" #include "chrome/updater/updater_branding.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -37,16 +37,15 @@ ExternalConstants::ExternalConstants( ...@@ -37,16 +37,15 @@ ExternalConstants::ExternalConstants(
ExternalConstants::~ExternalConstants() = default; ExternalConstants::~ExternalConstants() = default;
std::unique_ptr<ExternalConstants> CreateExternalConstants() { std::unique_ptr<ExternalConstants> CreateExternalConstants() {
return std::make_unique<DevOverrideProvider>( std::unique_ptr<ExternalConstants> overrider =
ExternalConstantsOverrider::FromDefaultJSONFile(
std::make_unique<DefaultExternalConstants>()); std::make_unique<DefaultExternalConstants>());
return overrider ? std::move(overrider)
: std::make_unique<DefaultExternalConstants>();
} }
std::unique_ptr<ExternalConstants> CreateDefaultExternalConstantsForTesting() { std::unique_ptr<ExternalConstants> CreateDefaultExternalConstantsForTesting() {
return std::make_unique<DefaultExternalConstants>(); return std::make_unique<DefaultExternalConstants>();
} }
DevOverrideProvider::DevOverrideProvider(
std::unique_ptr<ExternalConstants> next_provider)
: ExternalConstants(std::move(next_provider)) {}
} // namespace updater } // namespace updater
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_UPDATER_EXTERNAL_CONSTANTS_IMPL_H_
#define CHROME_UPDATER_EXTERNAL_CONSTANTS_IMPL_H_
#include "chrome/updater/external_constants.h"
class GURL;
namespace updater {
class DevOverrideProvider : public ExternalConstants {
public:
explicit DevOverrideProvider(
std::unique_ptr<ExternalConstants> next_provider);
~DevOverrideProvider() override = default;
// Overrides of ExternalConstants:
std::vector<GURL> UpdateURL() const override;
bool UseCUP() const override;
double InitialDelay() const override;
};
} // namespace updater
#endif // CHROME_UPDATER_EXTERNAL_CONSTANTS_IMPL_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/external_constants.h"
#import <Foundation/Foundation.h>
#include "base/mac/scoped_nsobject.h"
#include "base/strings/sys_string_conversions.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/external_constants_impl.h"
#include "url/gurl.h"
#include "base/logging.h"
namespace updater {
std::vector<GURL> DevOverrideProvider::UpdateURL() const {
@autoreleasepool {
NSUserDefaults* userDefaults = [[NSUserDefaults alloc]
initWithSuiteName:[NSString
stringWithUTF8String:kUserDefaultsSuiteName]];
NSURL* url = [userDefaults
URLForKey:[NSString stringWithUTF8String:kDevOverrideKeyUrl]];
if (url == nil)
return next_provider_->UpdateURL();
return {GURL(base::SysNSStringToUTF8([url absoluteString]))};
}
}
bool DevOverrideProvider::UseCUP() const {
@autoreleasepool {
NSUserDefaults* userDefaults = [[NSUserDefaults alloc]
initWithSuiteName:[NSString
stringWithUTF8String:kUserDefaultsSuiteName]];
id use_cup = [userDefaults
objectForKey:[NSString stringWithUTF8String:kDevOverrideKeyUseCUP]];
if (use_cup)
return [use_cup boolValue];
return next_provider_->UseCUP();
}
}
double DevOverrideProvider::InitialDelay() const {
@autoreleasepool {
NSUserDefaults* userDefaults = [[NSUserDefaults alloc]
initWithSuiteName:[NSString
stringWithUTF8String:kUserDefaultsSuiteName]];
id initial_delay = [userDefaults
objectForKey:[NSString
stringWithUTF8String:kDevOverrideKeyInitialDelay]];
if (initial_delay)
return [initial_delay integerValue];
return next_provider_->InitialDelay();
}
}
} // namespace updater
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/external_constants_unittest.h"
#import <Foundation/Foundation.h>
#include <memory>
#include "base/mac/scoped_nsobject.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/external_constants.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace updater {
namespace {
void ClearUserDefaults() {
@autoreleasepool {
NSUserDefaults* userDefaults = [[NSUserDefaults alloc]
initWithSuiteName:[NSString
stringWithUTF8String:kUserDefaultsSuiteName]];
[userDefaults
removeObjectForKey:[NSString stringWithUTF8String:kDevOverrideKeyUrl]];
[userDefaults
removeObjectForKey:[NSString
stringWithUTF8String:kDevOverrideKeyUseCUP]];
[userDefaults
removeObjectForKey:
[NSString stringWithUTF8String:kDevOverrideKeyInitialDelay]];
}
}
} // namespace
void DevOverrideTest::SetUp() {
ClearUserDefaults();
}
void DevOverrideTest::TearDown() {
ClearUserDefaults();
}
TEST_F(DevOverrideTest, TestDevOverrides) {
std::unique_ptr<ExternalConstants> consts = CreateExternalConstants();
@autoreleasepool {
NSUserDefaults* userDefaults = [[NSUserDefaults alloc]
initWithSuiteName:[NSString
stringWithUTF8String:kUserDefaultsSuiteName]];
[userDefaults setURL:[NSURL URLWithString:@"http://localhost:8080"]
forKey:[NSString stringWithUTF8String:kDevOverrideKeyUrl]];
[userDefaults
setBool:NO
forKey:[NSString stringWithUTF8String:kDevOverrideKeyUseCUP]];
[userDefaults
setInteger:0
forKey:[NSString stringWithUTF8String:kDevOverrideKeyInitialDelay]];
}
EXPECT_FALSE(consts->UseCUP());
std::vector<GURL> urls = consts->UpdateURL();
ASSERT_EQ(urls.size(), 1u);
EXPECT_EQ(urls[0], GURL("http://localhost:8080"));
ASSERT_TRUE(urls[0].is_valid());
ASSERT_EQ(consts->InitialDelay(), 0);
}
} // namespace updater
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/external_constants_unittest.h"
#include <memory>
#include "chrome/updater/constants.h"
#include "chrome/updater/external_constants.h"
#include "chrome/updater/updater_branding.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace updater {
TEST_F(DevOverrideTest, TestDefaults) {
std::unique_ptr<ExternalConstants> consts = CreateExternalConstants();
EXPECT_TRUE(consts->UseCUP());
std::vector<GURL> urls = consts->UpdateURL();
ASSERT_EQ(urls.size(), 1ul);
EXPECT_EQ(urls[0], GURL(UPDATE_CHECK_URL));
EXPECT_TRUE(urls[0].is_valid());
}
} // namespace updater
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_UPDATER_EXTERNAL_CONSTANTS_UNITTEST_H_
#define CHROME_UPDATER_EXTERNAL_CONSTANTS_UNITTEST_H_
#include "testing/gtest/include/gtest/gtest.h"
namespace updater {
class DevOverrideTest : public ::testing::Test {
protected:
void SetUp() override;
void TearDown() override;
};
} // namespace updater
#endif // CHROME_UPDATER_EXTERNAL_CONSTANTS_UNITTEST_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/external_constants.h"
#include "base/strings/utf_string_conversions.h"
#include "base/win/registry.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/external_constants_impl.h"
#include "chrome/updater/win/constants.h"
#include "url/gurl.h"
namespace updater {
std::vector<GURL> DevOverrideProvider::UpdateURL() const {
base::win::RegKey key;
if (key.Open(HKEY_CURRENT_USER, UPDATE_DEV_KEY, KEY_READ) == ERROR_SUCCESS) {
base::string16 url;
if (key.ReadValue(base::UTF8ToUTF16(kDevOverrideKeyUrl).c_str(), &url) ==
ERROR_SUCCESS)
return {GURL(url)};
}
return next_provider_->UpdateURL();
}
bool DevOverrideProvider::UseCUP() const {
base::win::RegKey key;
if (key.Open(HKEY_CURRENT_USER, UPDATE_DEV_KEY, KEY_READ) == ERROR_SUCCESS) {
DWORD use_cup = 0;
if (key.ReadValueDW(base::UTF8ToUTF16(kDevOverrideKeyUseCUP).c_str(),
&use_cup) == ERROR_SUCCESS) {
if (use_cup == 0)
return false;
else if (use_cup == 1)
return true;
}
}
return next_provider_->UseCUP();
}
double DevOverrideProvider::InitialDelay() const {
base::win::RegKey key;
if (key.Open(HKEY_CURRENT_USER, UPDATE_DEV_KEY, KEY_READ) == ERROR_SUCCESS) {
DWORD initial_delay = 0;
if (key.ReadValueDW(base::UTF8ToUTF16(kDevOverrideKeyInitialDelay).c_str(),
&initial_delay) == ERROR_SUCCESS)
return initial_delay;
}
return next_provider_->InitialDelay();
}
} // namespace updater
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/external_constants_unittest.h"
#include <memory>
#include "base/strings/utf_string_conversions.h"
#include "base/win/registry.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/external_constants.h"
#include "chrome/updater/win/constants.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace updater {
namespace {
void ClearUserDefaults() {
base::win::RegKey key(HKEY_CURRENT_USER, L"", KEY_SET_VALUE);
key.DeleteKey(UPDATE_DEV_KEY);
}
} // namespace
void DevOverrideTest::SetUp() {
ClearUserDefaults();
}
void DevOverrideTest::TearDown() {
ClearUserDefaults();
}
TEST_F(DevOverrideTest, TestDevOverrides) {
std::unique_ptr<ExternalConstants> consts = CreateExternalConstants();
base::win::RegKey key;
const base::char16 val[] = L"http://localhost:8080";
ASSERT_EQ(key.Create(HKEY_CURRENT_USER, UPDATE_DEV_KEY, KEY_WRITE),
ERROR_SUCCESS);
ASSERT_EQ(key.WriteValue(base::UTF8ToUTF16(kDevOverrideKeyUrl).c_str(), val),
ERROR_SUCCESS);
DWORD use_cup = 0;
ASSERT_EQ(
key.WriteValue(base::UTF8ToUTF16(kDevOverrideKeyUseCUP).c_str(), use_cup),
ERROR_SUCCESS);
DWORD initial_delay = 1;
ASSERT_EQ(
key.WriteValue(base::UTF8ToUTF16(kDevOverrideKeyInitialDelay).c_str(),
initial_delay),
ERROR_SUCCESS);
ASSERT_FALSE(consts->UseCUP());
std::vector<GURL> urls = consts->UpdateURL();
ASSERT_EQ(urls.size(), 1u);
ASSERT_EQ(urls[0], GURL("http://localhost:8080"));
ASSERT_TRUE(urls[0].is_valid());
ASSERT_EQ(consts->InitialDelay(), 1);
}
} // namespace updater
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <stdint.h> #include <stdint.h>
#include <string> #include <string>
#include <vector>
#include "base/command_line.h" #include "base/command_line.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
...@@ -16,6 +17,7 @@ ...@@ -16,6 +17,7 @@
#include "base/version.h" #include "base/version.h"
#include "chrome/common/mac/launchd.h" #include "chrome/common/mac/launchd.h"
#include "chrome/updater/constants.h" #include "chrome/updater/constants.h"
#include "chrome/updater/external_constants_builder.h"
#include "chrome/updater/launchd_util.h" #include "chrome/updater/launchd_util.h"
#import "chrome/updater/mac/util.h" #import "chrome/updater/mac/util.h"
#include "chrome/updater/mac/xpc_service_names.h" #include "chrome/updater/mac/xpc_service_names.h"
...@@ -102,20 +104,11 @@ void ExpectServiceAbsent(const std::string& service) { ...@@ -102,20 +104,11 @@ void ExpectServiceAbsent(const std::string& service) {
#endif // defined(COMPONENT_BUILD #endif // defined(COMPONENT_BUILD
void EnterTestMode(const GURL& url) { void EnterTestMode(const GURL& url) {
@autoreleasepool { ASSERT_TRUE(ExternalConstantsBuilder()
NSUserDefaults* userDefaults = [[NSUserDefaults alloc] .SetUpdateURL(std::vector<std::string>{url.spec()})
initWithSuiteName:[NSString .SetUseCUP(false)
stringWithUTF8String:kUserDefaultsSuiteName]]; .SetInitialDelay(0)
[userDefaults .Overwrite());
setURL:[NSURL URLWithString:base::SysUTF8ToNSString(url.spec())]
forKey:[NSString stringWithUTF8String:kDevOverrideKeyUrl]];
[userDefaults
setBool:NO
forKey:[NSString stringWithUTF8String:kDevOverrideKeyUseCUP]];
[userDefaults
setInteger:0
forKey:[NSString stringWithUTF8String:kDevOverrideKeyInitialDelay]];
}
} }
// crbug.com/1112527: These tests are not compatible with component build. // crbug.com/1112527: These tests are not compatible with component build.
...@@ -140,15 +133,6 @@ void Clean() { ...@@ -140,15 +133,6 @@ void Clean() {
EXPECT_TRUE(base::DeletePathRecursively(GetDataDirPath())); EXPECT_TRUE(base::DeletePathRecursively(GetDataDirPath()));
@autoreleasepool { @autoreleasepool {
NSUserDefaults* userDefaults = [[NSUserDefaults alloc]
initWithSuiteName:[NSString
stringWithUTF8String:kUserDefaultsSuiteName]];
[userDefaults
removeObjectForKey:[NSString stringWithUTF8String:kDevOverrideKeyUrl]];
[userDefaults
removeObjectForKey:[NSString
stringWithUTF8String:kDevOverrideKeyUseCUP]];
// TODO(crbug.com/1096654): support machine case (Launchd::Domain::Local and // TODO(crbug.com/1096654): support machine case (Launchd::Domain::Local and
// Launchd::Type::Daemon). // Launchd::Type::Daemon).
RemoveJobFromLaunchd(Launchd::Domain::User, Launchd::Type::Agent, RemoveJobFromLaunchd(Launchd::Domain::User, Launchd::Type::Agent,
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <wrl/client.h> #include <wrl/client.h>
#include <string> #include <string>
#include <vector>
#include "base/command_line.h" #include "base/command_line.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
...@@ -21,6 +22,7 @@ ...@@ -21,6 +22,7 @@
#include "chrome/updater/app/server/win/updater_internal_idl.h" #include "chrome/updater/app/server/win/updater_internal_idl.h"
#include "chrome/updater/app/server/win/updater_legacy_idl.h" #include "chrome/updater/app/server/win/updater_legacy_idl.h"
#include "chrome/updater/constants.h" #include "chrome/updater/constants.h"
#include "chrome/updater/external_constants_builder.h"
#include "chrome/updater/test/integration_tests.h" #include "chrome/updater/test/integration_tests.h"
#include "chrome/updater/updater_branding.h" #include "chrome/updater/updater_branding.h"
#include "chrome/updater/updater_version.h" #include "chrome/updater/updater_version.h"
...@@ -75,8 +77,6 @@ base::FilePath GetDataDirPath() { ...@@ -75,8 +77,6 @@ base::FilePath GetDataDirPath() {
void Clean() { void Clean() {
// TODO(crbug.com/1062288): Delete the Client / ClientState registry keys. // TODO(crbug.com/1062288): Delete the Client / ClientState registry keys.
base::win::RegKey(HKEY_CURRENT_USER, L"", KEY_SET_VALUE)
.DeleteKey(UPDATE_DEV_KEY);
// TODO(crbug.com/1062288): Delete the COM server items. // TODO(crbug.com/1062288): Delete the COM server items.
// TODO(crbug.com/1062288): Delete the COM service items. // TODO(crbug.com/1062288): Delete the COM service items.
// TODO(crbug.com/1062288): Delete the COM interfaces. // TODO(crbug.com/1062288): Delete the COM interfaces.
...@@ -100,19 +100,11 @@ void ExpectClean() { ...@@ -100,19 +100,11 @@ void ExpectClean() {
} }
void EnterTestMode(const GURL& url) { void EnterTestMode(const GURL& url) {
base::win::RegKey key(HKEY_CURRENT_USER, L"", KEY_SET_VALUE); ASSERT_TRUE(ExternalConstantsBuilder()
ASSERT_EQ(key.Create(HKEY_CURRENT_USER, UPDATE_DEV_KEY, KEY_WRITE), .SetUpdateURL(std::vector<std::string>{url.spec()})
ERROR_SUCCESS); .SetUseCUP(false)
ASSERT_EQ(key.WriteValue(base::UTF8ToUTF16(kDevOverrideKeyUrl).c_str(), .SetInitialDelay(0)
base::UTF8ToUTF16(url.spec()).c_str()), .Overwrite());
ERROR_SUCCESS);
ASSERT_EQ(key.WriteValue(base::UTF8ToUTF16(kDevOverrideKeyUseCUP).c_str(),
DWORD{0}),
ERROR_SUCCESS);
ASSERT_EQ(
key.WriteValue(base::UTF8ToUTF16(kDevOverrideKeyInitialDelay).c_str(),
DWORD{0}),
ERROR_SUCCESS);
} }
void ExpectInstalled() { void ExpectInstalled() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment