diff --git a/browser/brave_vpn/brave_vpn_service_factory.cc b/browser/brave_vpn/brave_vpn_service_factory.cc index ad55193f969f..ed3b243cbc2b 100644 --- a/browser/brave_vpn/brave_vpn_service_factory.cc +++ b/browser/brave_vpn/brave_vpn_service_factory.cc @@ -21,11 +21,6 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" -#if BUILDFLAG(IS_WIN) -#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.h" -#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h" -#endif - namespace brave_vpn { // static @@ -55,9 +50,6 @@ BraveVpnServiceFactory::BraveVpnServiceFactory() "BraveVpnService", BrowserContextDependencyManager::GetInstance()) { DependsOn(skus::SkusServiceFactory::GetInstance()); -#if BUILDFLAG(IS_WIN) - DependsOn(brave_vpn::BraveVpnDnsObserverFactory::GetInstance()); -#endif } BraveVpnServiceFactory::~BraveVpnServiceFactory() = default; @@ -78,16 +70,8 @@ KeyedService* BraveVpnServiceFactory::BuildServiceInstanceFor( return skus::SkusServiceFactory::GetForContext(context); }, context); - auto* vpn_service = - new BraveVpnService(shared_url_loader_factory, local_state, callback); -#if BUILDFLAG(IS_WIN) - auto* dns_observer_service = - brave_vpn::BraveVpnDnsObserverFactory::GetInstance() - ->GetServiceForContext(context); - if (dns_observer_service) - dns_observer_service->Observe(vpn_service); -#endif - return vpn_service; + + return new BraveVpnService(shared_url_loader_factory, local_state, callback); } void BraveVpnServiceFactory::RegisterProfilePrefs( diff --git a/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.cc b/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.cc deleted file mode 100644 index c76dd8e19d5a..000000000000 --- a/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.cc +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2022 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.h" - -#include -#include -#include - -#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h" -#include "brave/components/brave_vpn/brave_vpn_utils.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/policy/chrome_browser_policy_connector.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/policy/core/common/cloud/cloud_policy_store.h" -#include "components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h" -#include "components/policy/core/common/cloud/machine_level_user_cloud_policy_store.h" -#include "components/policy/core/common/policy_map.h" - -namespace brave_vpn { - -namespace { -std::string GetPolicyValue(const std::string& name) { - auto* service = g_browser_process->policy_service(); - if (!service) - return std::string(); - auto ns = - policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string()); - const base::Value* mode = - service->GetPolicies(ns).GetValue(name, base::Value::Type::STRING); - if (!mode || !mode->is_string()) - return std::string(); - return mode->GetString(); -} - -} // namespace -// static -BraveVpnDnsObserverFactory* BraveVpnDnsObserverFactory::GetInstance() { - return base::Singleton::get(); -} - -BraveVpnDnsObserverFactory::~BraveVpnDnsObserverFactory() = default; - -BraveVpnDnsObserverFactory::BraveVpnDnsObserverFactory() - : BrowserContextKeyedServiceFactory( - "BraveVpnDNSObserverService", - BrowserContextDependencyManager::GetInstance()) {} - -KeyedService* BraveVpnDnsObserverFactory::BuildServiceInstanceFor( - content::BrowserContext* context) const { - return new BraveVpnDnsObserverService(g_browser_process->local_state(), - base::BindRepeating(&GetPolicyValue)); -} - -// static -BraveVpnDnsObserverService* BraveVpnDnsObserverFactory::GetServiceForContext( - content::BrowserContext* context) { - if (!IsBraveVPNEnabled()) - return nullptr; - return static_cast( - GetInstance()->GetServiceForBrowserContext(context, true)); -} - -} // namespace brave_vpn diff --git a/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.h b/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.h deleted file mode 100644 index 964f3fd26fb0..000000000000 --- a/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2022 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef BRAVE_BROWSER_BRAVE_VPN_DNS_BRAVE_VPN_DNS_OBSERVER_FACTORY_H_ -#define BRAVE_BROWSER_BRAVE_VPN_DNS_BRAVE_VPN_DNS_OBSERVER_FACTORY_H_ - -#include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" - -namespace content { -class BrowserContext; -} // namespace content - -namespace brave_vpn { - -class BraveVpnDnsObserverService; - -class BraveVpnDnsObserverFactory : public BrowserContextKeyedServiceFactory { - public: - BraveVpnDnsObserverFactory(const BraveVpnDnsObserverFactory&) = delete; - BraveVpnDnsObserverFactory& operator=(const BraveVpnDnsObserverFactory&) = - delete; - - static BraveVpnDnsObserverFactory* GetInstance(); - static BraveVpnDnsObserverService* GetServiceForContext( - content::BrowserContext* context); - - private: - friend struct base::DefaultSingletonTraits; - - BraveVpnDnsObserverFactory(); - ~BraveVpnDnsObserverFactory() override; - - // BrowserContextKeyedServiceFactory overrides: - KeyedService* BuildServiceInstanceFor( - content::BrowserContext* context) const override; -}; - -} // namespace brave_vpn - -#endif // BRAVE_BROWSER_BRAVE_VPN_DNS_BRAVE_VPN_DNS_OBSERVER_FACTORY_H_ diff --git a/browser/brave_vpn/dns/brave_vpn_dns_observer_service.cc b/browser/brave_vpn/dns/brave_vpn_dns_observer_service.cc deleted file mode 100644 index af55ee831717..000000000000 --- a/browser/brave_vpn/dns/brave_vpn_dns_observer_service.cc +++ /dev/null @@ -1,175 +0,0 @@ -/* Copyright 2022 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h" - -#include "base/bind.h" -#include "brave/components/brave_vpn/pref_names.h" -#include "chrome/browser/net/secure_dns_config.h" -#include "chrome/browser/net/secure_dns_util.h" -#include "chrome/browser/net/stub_resolver_config_reader.h" -#include "chrome/browser/net/system_network_context_manager.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_finder.h" -#include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/simple_message_box.h" -#include "chrome/common/pref_names.h" -#include "chrome/grit/chromium_strings.h" -#include "components/country_codes/country_codes.h" -#include "components/grit/brave_components_strings.h" -#include "components/policy/policy_constants.h" -#include "components/prefs/pref_service.h" -#include "net/dns/public/dns_over_https_config.h" -#include "net/dns/public/doh_provider_entry.h" -#include "net/dns/public/secure_dns_mode.h" -#include "ui/base/l10n/l10n_util.h" - -namespace secure_dns = chrome_browser_net::secure_dns; - -namespace brave_vpn { - -namespace { -const char kBraveVpnDnsProvider[] = "Cloudflare"; -void SkipDNSDialog(PrefService* prefs, bool checked) { - if (!prefs) - return; - prefs->SetBoolean(prefs::kBraveVPNShowDNSPolicyWarningDialog, !checked); -} -std::string GetFilteredProvidersForCountry() { - namespace secure_dns = chrome_browser_net::secure_dns; - // Use default hardcoded servers for current country. - auto providers = secure_dns::ProvidersForCountry( - secure_dns::SelectEnabledProviders(net::DohProviderEntry::GetList()), - country_codes::GetCurrentCountryID()); - for (const net::DohProviderEntry* entry : net::DohProviderEntry::GetList()) { - if (entry->provider != kBraveVpnDnsProvider) - continue; - net::DnsOverHttpsConfig doh_config({entry->doh_server_config}); - return doh_config.ToString(); - } - NOTREACHED() << "Should not be reached as we expect " << kBraveVpnDnsProvider - << " is available in the default list."; - return std::string("1.1.1.1"); -} -std::string GetDoHServers(SecureDnsConfig* dns_config) { - return dns_config && !dns_config->doh_servers().servers().empty() - ? dns_config->doh_servers().ToString() - : GetFilteredProvidersForCountry(); -} -gfx::NativeWindow GetAnchorBrowserWindow() { - auto* browser = chrome::FindLastActive(); - return browser ? browser->window()->GetNativeWindow() - : gfx::kNullNativeWindow; -} -} // namespace - -BraveVpnDnsObserverService::BraveVpnDnsObserverService( - PrefService* local_state, - DnsPolicyReaderCallback callback) - : policy_reader_(std::move(callback)), local_state_(local_state) { - pref_change_registrar_.Init(local_state); - pref_change_registrar_.Add( - ::prefs::kDnsOverHttpsMode, - base::BindRepeating(&BraveVpnDnsObserverService::OnDNSPrefChanged, - weak_ptr_factory_.GetWeakPtr())); -} - -BraveVpnDnsObserverService::~BraveVpnDnsObserverService() = default; - -bool BraveVpnDnsObserverService::ShouldAllowExternalChanges() const { - if (allow_changes_for_testing_.has_value()) - return allow_changes_for_testing_.value(); - - return (chrome::ShowQuestionMessageBoxSync( - GetAnchorBrowserWindow(), - l10n_util::GetStringUTF16(IDS_PRODUCT_NAME), - l10n_util::GetStringUTF16(IDS_BRAVE_VPN_DNS_CHANGE_ALERT)) == - chrome::MESSAGE_BOX_RESULT_YES); -} - -bool BraveVpnDnsObserverService::IsDnsModeConfiguredByPolicy() const { - return policy_reader_ && - !policy_reader_.Run(policy::key::kDnsOverHttpsMode).empty(); -} - -PrefService* BraveVpnDnsObserverService::GetPrefService() { - if (pref_service_for_testing_) - return pref_service_for_testing_; - auto* browser = chrome::FindLastActive(); - if (!browser) - return nullptr; - return browser->profile()->GetPrefs(); -} - -void BraveVpnDnsObserverService::ShowPolicyWarningMessage() { - auto* prefs = GetPrefService(); - if (prefs && !prefs->GetBoolean(prefs::kBraveVPNShowDNSPolicyWarningDialog)) { - return; - } - - if (policy_callback_) { - std::move(policy_callback_).Run(); - return; - } - - chrome::ShowWarningMessageBoxWithCheckbox( - GetAnchorBrowserWindow(), l10n_util::GetStringUTF16(IDS_PRODUCT_NAME), - l10n_util::GetStringUTF16(IDS_BRAVE_VPN_DNS_POLICY_ALERT), - l10n_util::GetStringUTF16(IDS_BRAVE_VPN_DNS_POLICY_CHECKBOX), - base::BindOnce(&SkipDNSDialog, prefs)); -} - -void BraveVpnDnsObserverService::OnDNSPrefChanged() { - if (ignore_prefs_change_) - return; - // Reset saved config and keep user's choice. - if (ShouldAllowExternalChanges()) { - user_dns_config_.reset(); - } else { - ignore_prefs_change_ = true; - SetDNSOverHTTPSMode(SecureDnsConfig::kModeSecure, - GetDoHServers(user_dns_config_.get())); - ignore_prefs_change_ = false; - } -} - -void BraveVpnDnsObserverService::SetDNSOverHTTPSMode( - const std::string& mode, - const std::string& doh_providers) { - local_state_->SetString(::prefs::kDnsOverHttpsTemplates, doh_providers); - local_state_->SetString(::prefs::kDnsOverHttpsMode, mode); -} - -void BraveVpnDnsObserverService::OnConnectionStateChanged( - brave_vpn::mojom::ConnectionState state) { - if (state == brave_vpn::mojom::ConnectionState::CONNECTED) { - auto dns_config = std::make_unique( - SystemNetworkContextManager::GetStubResolverConfigReader() - ->GetSecureDnsConfiguration(false)); - if (local_state_->GetString(::prefs::kDnsOverHttpsMode) != - SecureDnsConfig::kModeSecure) { - // If DNS mode configured by policies we notify user that DNS may leak - // via configured DNS gateway. - if (IsDnsModeConfiguredByPolicy()) { - ShowPolicyWarningMessage(); - return; - } - SetDNSOverHTTPSMode(SecureDnsConfig::kModeSecure, - GetDoHServers(dns_config.get())); - } - user_dns_config_ = std::move(dns_config); - ignore_prefs_change_ = false; - } else if (user_dns_config_) { - ignore_prefs_change_ = true; - auto* mode_to_restore = - SecureDnsConfig::ModeToString(user_dns_config_->mode()); - auto servers = user_dns_config_->doh_servers().ToString(); - user_dns_config_.reset(); - SetDNSOverHTTPSMode(mode_to_restore, servers); - } -} - -} // namespace brave_vpn diff --git a/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h b/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h deleted file mode 100644 index f608cfdec965..000000000000 --- a/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2022 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef BRAVE_BROWSER_BRAVE_VPN_DNS_BRAVE_VPN_DNS_OBSERVER_SERVICE_H_ -#define BRAVE_BROWSER_BRAVE_VPN_DNS_BRAVE_VPN_DNS_OBSERVER_SERVICE_H_ - -#include -#include -#include - -#include "base/memory/weak_ptr.h" -#include "brave/components/brave_vpn/brave_vpn_service_observer.h" -#include "components/keyed_service/core/keyed_service.h" -#include "components/prefs/pref_change_registrar.h" -#include "third_party/abseil-cpp/absl/types/optional.h" - -class SecureDnsConfig; -class PrefService; -namespace content { -class BrowserContext; -} // namespace content - -namespace policy { -class CloudPolicyStore; -} // namespace policy - -namespace brave_vpn { - -class BraveVpnDnsObserverService : public brave_vpn::BraveVPNServiceObserver, - public KeyedService { - public: - using DnsPolicyReaderCallback = - base::RepeatingCallback; - - explicit BraveVpnDnsObserverService(PrefService* local_state, - DnsPolicyReaderCallback callback); - ~BraveVpnDnsObserverService() override; - BraveVpnDnsObserverService(const BraveVpnDnsObserverService&) = delete; - BraveVpnDnsObserverService operator=(const BraveVpnDnsObserverService&) = - delete; - - // brave_vpn::BraveVPNServiceObserver - void OnConnectionStateChanged( - brave_vpn::mojom::ConnectionState state) override; - bool ShouldAllowExternalChanges() const; - void SetAllowExternalChangesForTesting(bool allow) { - allow_changes_for_testing_ = allow; - } - - void SetPolicyNotificationCallbackForTesting(base::OnceClosure callback) { - policy_callback_ = std::move(callback); - } - void SetPrefServiceForTesting(PrefService* service) { - pref_service_for_testing_ = service; - } - bool IsDnsModeConfiguredByPolicy() const; - - private: - PrefService* GetPrefService(); - void OnDNSPrefChanged(); - void OnDNSDialogDismissed(bool checked); - void SetDNSOverHTTPSMode(const std::string& mode, - const std::string& doh_providers); - void ShowPolicyWarningMessage(); - - base::OnceClosure policy_callback_; - DnsPolicyReaderCallback policy_reader_; - bool ignore_prefs_change_ = true; - absl::optional allow_changes_for_testing_; - raw_ptr local_state_; - raw_ptr pref_service_for_testing_; - PrefChangeRegistrar pref_change_registrar_; - std::unique_ptr user_dns_config_; - base::WeakPtrFactory weak_ptr_factory_{this}; -}; - -} // namespace brave_vpn - -#endif // BRAVE_BROWSER_BRAVE_VPN_DNS_BRAVE_VPN_DNS_OBSERVER_SERVICE_H_ diff --git a/browser/brave_vpn/dns/brave_vpn_dns_observer_service_unittest.cc b/browser/brave_vpn/dns/brave_vpn_dns_observer_service_unittest.cc deleted file mode 100644 index 5b67e0f5510d..000000000000 --- a/browser/brave_vpn/dns/brave_vpn_dns_observer_service_unittest.cc +++ /dev/null @@ -1,298 +0,0 @@ -/* Copyright (c) 2022 The Brave Authors. All rights reserved. - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h" - -#include - -#include "base/run_loop.h" -#include "base/test/bind.h" -#include "brave/components/brave_vpn/brave_vpn_utils.h" -#include "brave/components/brave_vpn/pref_names.h" -#include "chrome/browser/net/secure_dns_config.h" -#include "chrome/browser/net/secure_dns_util.h" -#include "chrome/browser/net/stub_resolver_config_reader.h" -#include "chrome/browser/net/system_network_context_manager.h" -#include "chrome/common/pref_names.h" -#include "chrome/test/base/scoped_testing_local_state.h" -#include "chrome/test/base/testing_browser_process.h" -#include "components/country_codes/country_codes.h" -#include "components/policy/policy_constants.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/test/browser_task_environment.h" -#include "net/dns/public/doh_provider_entry.h" -#include "net/dns/public/secure_dns_mode.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace brave_vpn { -namespace { -std::string GetDefaultDNSProvidersForCountry() { - namespace secure_dns = chrome_browser_net::secure_dns; - // Use default hardcoded servers for current country. - auto providers = secure_dns::ProvidersForCountry( - secure_dns::SelectEnabledProviders(net::DohProviderEntry::GetList()), - country_codes::GetCurrentCountryID()); - for (const net::DohProviderEntry* entry : net::DohProviderEntry::GetList()) { - if (entry->provider != "Cloudflare") - continue; - net::DnsOverHttpsConfig doh_config({entry->doh_server_config}); - return doh_config.ToString(); - } - NOTREACHED() << "Should not be reached as we expect cloudflare is available " - "in default list."; - return std::string(); -} -} // namespace - -class BraveVpnDnsObserverServiceUnitTest : public testing::Test { - public: - BraveVpnDnsObserverServiceUnitTest() - : local_state_(TestingBrowserProcess::GetGlobal()) {} - - void SetUp() override { - dns_service_.reset(new BraveVpnDnsObserverService( - local_state(), - base::BindRepeating( - &BraveVpnDnsObserverServiceUnitTest::ReadDNSPolicyValue, - base::Unretained(this)))); - stub_resolver_config_reader_ = - std::make_unique(local_state_.Get()); - SystemNetworkContextManager::set_stub_resolver_config_reader_for_testing( - stub_resolver_config_reader_.get()); - SetPolicyValue(policy::key::kDnsOverHttpsMode, ""); - brave_vpn::RegisterLocalStatePrefs(pref_service_.registry()); - dns_service_->SetPrefServiceForTesting(pref_service()); - } - - std::string ReadDNSPolicyValue(const std::string& name) { - EXPECT_TRUE(policy_map_.count(name)); - return policy_map_.at(name); - } - - void TearDown() override { - // BraveVpnDnsObserverService destructor must be called before the task - // runner is destroyed. - dns_service_.reset(); - } - PrefService* local_state() { return local_state_.Get(); } - PrefService* pref_service() { return &pref_service_; } - void FireBraveVPNStateChange(mojom::ConnectionState state) { - dns_service_->OnConnectionStateChanged(state); - } - - bool ShowPolicyNotification(mojom::ConnectionState state) { - bool callback_called = false; - dns_service_->SetPolicyNotificationCallbackForTesting( - base::BindLambdaForTesting([&]() { callback_called = true; })); - FireBraveVPNStateChange(state); - return callback_called; - } - void SetDNSMode(const std::string& mode, const std::string& doh_providers) { - local_state()->SetString(::prefs::kDnsOverHttpsTemplates, doh_providers); - local_state()->SetString(::prefs::kDnsOverHttpsMode, mode); - } - - void ExpectDNSMode(const std::string& mode, - const std::string& doh_providers) { - EXPECT_EQ(local_state()->GetString(::prefs::kDnsOverHttpsMode), mode); - EXPECT_EQ(local_state()->GetString(::prefs::kDnsOverHttpsTemplates), - doh_providers); - } - void AllowUsersChange(bool value) { - dns_service_->SetAllowExternalChangesForTesting(value); - } - void SetPolicyValue(const std::string& name, const std::string& value) { - policy_map_[name] = value; - } - - private: - std::unordered_map policy_map_; - content::BrowserTaskEnvironment task_environment_; - std::unique_ptr dns_service_; - TestingPrefServiceSimple pref_service_; - ScopedTestingLocalState local_state_; - std::unique_ptr stub_resolver_config_reader_; -}; - -TEST_F(BraveVpnDnsObserverServiceUnitTest, AutoEnable) { - auto default_servers = GetDefaultDNSProvidersForCountry(); - EXPECT_FALSE(default_servers.empty()); - - // User has DoH mode off and enables vpn - { - SetDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - } - - // User has DoH mode automatic without servers and enables vpn - { - SetDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - } - std::string custom_servers = - "https://server1.com\nhttps://server2.com/{?dns}"; - // User has DoH mode automatic with own servers and enables vpn - { - SetDNSMode(SecureDnsConfig::kModeAutomatic, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, custom_servers); - } - // User has DoH mode secure without custom servers and enables vpn - { - SetDNSMode(SecureDnsConfig::kModeSecure, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeSecure, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeSecure, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, ""); - } - // User has DoH mode secure with custom servers and enables vpn - { - SetDNSMode(SecureDnsConfig::kModeSecure, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeSecure, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeSecure, custom_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, custom_servers); - } -} - -TEST_F(BraveVpnDnsObserverServiceUnitTest, AllowUsersChange) { - auto default_servers = GetDefaultDNSProvidersForCountry(); - EXPECT_FALSE(default_servers.empty()); - AllowUsersChange(true); - { - SetDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - // User enabled automatic DoH mode while vpn connected. - SetDNSMode(SecureDnsConfig::kModeAutomatic, ""); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - } - - { - SetDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - // User enabled automatic DoH mode while vpn connected. - SetDNSMode(SecureDnsConfig::kModeOff, ""); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - } -} - -TEST_F(BraveVpnDnsObserverServiceUnitTest, DisallowUsersChange) { - auto default_servers = GetDefaultDNSProvidersForCountry(); - EXPECT_FALSE(default_servers.empty()); - AllowUsersChange(false); - { - SetDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - - // User disabled DoH mode while vpn connected. - SetDNSMode(SecureDnsConfig::kModeOff, ""); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - } - - { - SetDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::CONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - // User enabled automatic DoH mode while vpn connected. - SetDNSMode(SecureDnsConfig::kModeAutomatic, ""); - ExpectDNSMode(SecureDnsConfig::kModeSecure, default_servers); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTING); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - FireBraveVPNStateChange(mojom::ConnectionState::DISCONNECTED); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - } -} - -TEST_F(BraveVpnDnsObserverServiceUnitTest, DohDisabledByPolicy) { - SetPolicyValue(policy::key::kDnsOverHttpsMode, SecureDnsConfig::kModeOff); - { - SetDNSMode(SecureDnsConfig::kModeOff, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::CONNECTING)); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - EXPECT_TRUE(ShowPolicyNotification(mojom::ConnectionState::CONNECTED)); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::DISCONNECTING)); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::DISCONNECTED)); - ExpectDNSMode(SecureDnsConfig::kModeOff, ""); - } - - SetPolicyValue(policy::key::kDnsOverHttpsMode, - SecureDnsConfig::kModeAutomatic); - { - SetDNSMode(SecureDnsConfig::kModeAutomatic, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::CONNECTING)); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - EXPECT_TRUE(ShowPolicyNotification(mojom::ConnectionState::CONNECTED)); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::DISCONNECTING)); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::DISCONNECTED)); - ExpectDNSMode(SecureDnsConfig::kModeAutomatic, ""); - } - - // Do not show dialog option enabled - SetPolicyValue(policy::key::kDnsOverHttpsMode, SecureDnsConfig::kModeOff); - { - pref_service()->SetBoolean(prefs::kBraveVPNShowDNSPolicyWarningDialog, - false); - SetDNSMode(SecureDnsConfig::kModeOff, ""); - EXPECT_FALSE(ShowPolicyNotification(mojom::ConnectionState::CONNECTED)); - } -} - -} // namespace brave_vpn diff --git a/browser/brave_vpn/sources.gni b/browser/brave_vpn/sources.gni index e403a2164eb2..12de53cebcc3 100644 --- a/browser/brave_vpn/sources.gni +++ b/browser/brave_vpn/sources.gni @@ -15,21 +15,6 @@ if (enable_brave_vpn) { "//brave/browser/brave_vpn/vpn_utils.cc", "//brave/browser/brave_vpn/vpn_utils.h", ] - if (is_win) { - brave_browser_brave_vpn_sources += [ - "//brave/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.cc", - "//brave/browser/brave_vpn/dns/brave_vpn_dns_observer_factory.h", - "//brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service.cc", - "//brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service.h", - ] - brave_browser_brave_vpn_deps += [ - "//brave/app:brave_generated_resources_grit", - "//brave/browser:browser_process", - "//chrome/common:constants", - "//components/country_codes", - "//net", - ] - } brave_browser_brave_vpn_deps += [ "//base", "//brave/components/brave_vpn", diff --git a/browser/brave_vpn/test/BUILD.gn b/browser/brave_vpn/test/BUILD.gn deleted file mode 100644 index 3bb865bcdbb4..000000000000 --- a/browser/brave_vpn/test/BUILD.gn +++ /dev/null @@ -1,18 +0,0 @@ -import("//brave/components/brave_vpn/buildflags/buildflags.gni") -import("//testing/test.gni") - -source_set("unit_tests") { - testonly = true - if (enable_brave_vpn && is_win) { - sources = [ "//brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service_unittest.cc" ] - deps = [ - "//brave/components/brave_vpn", - "//chrome/common:constants", - "//chrome/test:test_support", - "//components/country_codes:country_codes", - "//net", - "//testing/gtest", - "//third_party/abseil-cpp:absl", - ] - } -} diff --git a/test/BUILD.gn b/test/BUILD.gn index 6c083d502bb2..76aaf7761c8f 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -164,7 +164,6 @@ test("brave_unit_tests") { "//brave/browser", "//brave/browser:unit_tests", "//brave/browser/brave_rewards/rewards_panel:unit_tests", - "//brave/browser/brave_vpn/test:unit_tests", "//brave/browser/brave_wallet", "//brave/browser/brave_wallet:unit_tests", "//brave/browser/content_settings:unit_tests",