[VPN 2.0] Finalize extraction of BraveVpnService V1 implementation (#36851)

To add a new BraveVpnService implementation based on Architecture 2.0,
which must co-exist with Architecture 1.0 for quite a while, we need
to split service's interface and implementation. All the external
components will keep accessing VPN service via the BraveVpnService
interface, but the implementation mostly goes into BraveVpnServiceImpl.

This change finalizes the BraveVpnService Architecture 1.0 extraction
based on GN flags. It also splits "components/brave_vpn/browser"
targets in the BUILD.gn into two targets - a shared one and a V1
specific one. The factory is prepared to create different service
implementations, and the V1 tests are ensured to run only when
V1 architecture is enabled by a GN flag.

Implements part of https://github.com/brave/brave-browser/issues/54597
This commit is contained in:
Alex
2026-06-02 12:38:42 -04:00
committed by GitHub
parent 2535e5857b
commit dbd500c527
11 changed files with 133 additions and 72 deletions
+6 -3
View File
@@ -3,8 +3,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
import(
"//brave/browser/brave_vpn/win/brave_vpn_wireguard_service/allowlist.gni")
import("//brave/build/config.gni")
import("//brave/build/redirect_cc.gni")
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
@@ -20,6 +18,11 @@ import("//tools/grit/repack.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
import("//ui/base/ui_features.gni")
if (enable_brave_vpn_v1) {
import(
"//brave/browser/brave_vpn/win/brave_vpn_wireguard_service/allowlist.gni")
}
if (enable_library_cdms) {
import("//media/cdm/library_cdm/cdm_paths.gni")
}
@@ -771,7 +774,7 @@ if (is_win && enable_resource_allowlist_generation) {
# Merge chrome_resource_allowlist and wireguard resources allowlist to keep
# wireguard resources in pak files. When VPN is disabled, just copy the chrome
# allowlist.
if (enable_brave_vpn) {
if (enable_brave_vpn_v1) {
action("merge_allowlists") {
deps = [
"//brave/browser/brave_vpn/win/brave_vpn_wireguard_service:wireguard_resource_allowlist",
+25 -9
View File
@@ -9,14 +9,15 @@
#include "base/feature_list.h"
#include "base/no_destructor.h"
#include "base/notreached.h"
#include "brave/browser/brave_browser_process.h"
#include "brave/browser/brave_vpn/vpn_utils.h"
#include "brave/browser/misc_metrics/process_misc_metrics.h"
#include "brave/browser/misc_metrics/uptime_monitor_impl.h"
#include "brave/browser/skus/skus_service_factory.h"
#include "brave/components/brave_vpn/browser/brave_vpn_service.h"
#include "brave/components/brave_vpn/browser/brave_vpn_service_impl.h"
#include "brave/components/brave_vpn/common/brave_vpn_utils.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/skus/common/features.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
@@ -27,23 +28,24 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/storage_partition.h"
#if BUILDFLAG(ENABLE_BRAVE_VPN_V1)
#include "brave/components/brave_vpn/browser/brave_vpn_service_impl.h"
#if BUILDFLAG(IS_WIN)
#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_factory_win.h"
#include "brave/browser/brave_vpn/dns/brave_vpn_dns_observer_service_win.h"
#include "brave/browser/brave_vpn/win/brave_vpn_service_delegate_win.h"
#include "brave/browser/brave_vpn/win/brave_vpn_wireguard_observer_factory_win.h"
#include "brave/browser/brave_vpn/win/brave_vpn_wireguard_observer_service_win.h"
#endif
#endif // IS_WIN
#endif // ENABLE_BRAVE_VPN_V1
namespace brave_vpn {
namespace {
std::unique_ptr<KeyedService> BuildVpnService(
content::BrowserContext* context) {
if (!brave_vpn::IsAllowedForContext(context)) {
return nullptr;
}
#if BUILDFLAG(ENABLE_BRAVE_VPN_V1)
std::unique_ptr<KeyedService> BuildVpnService_V1(
content::BrowserContext* context) {
#if !BUILDFLAG(IS_ANDROID)
if (!g_brave_browser_process->brave_vpn_connection_manager()) {
return nullptr;
@@ -93,6 +95,20 @@ std::unique_ptr<KeyedService> BuildVpnService(
return vpn_service;
}
#endif // BUILDFLAG(ENABLE_BRAVE_VPN_V1)
std::unique_ptr<KeyedService> BuildVpnService(
content::BrowserContext* context) {
if (!brave_vpn::IsAllowedForContext(context)) {
return nullptr;
}
#if BUILDFLAG(ENABLE_BRAVE_VPN_V1)
return BuildVpnService_V1(context);
#else
NOTREACHED() << "No VPN implementation available";
#endif
}
} // namespace
// static
@@ -138,10 +154,10 @@ BraveVpnServiceFactory::BraveVpnServiceFactory()
"BraveVpnService",
BrowserContextDependencyManager::GetInstance()) {
DependsOn(skus::SkusServiceFactory::GetInstance());
#if BUILDFLAG(IS_WIN)
#if BUILDFLAG(ENABLE_BRAVE_VPN_V1) && BUILDFLAG(IS_WIN)
DependsOn(brave_vpn::BraveVpnWireguardObserverFactory::GetInstance());
DependsOn(brave_vpn::BraveVpnDnsObserverFactory::GetInstance());
#endif
#endif // BUILDFLAG(ENABLE_BRAVE_VPN_V1) && BUILDFLAG(IS_WIN)
}
BraveVpnServiceFactory::~BraveVpnServiceFactory() = default;
+25 -20
View File
@@ -13,7 +13,31 @@ if (enable_brave_vpn) {
"//brave/browser/brave_vpn/brave_vpn_service_factory.cc",
"//brave/browser/brave_vpn/brave_vpn_service_factory.h",
]
brave_browser_brave_vpn_deps += [
"//base",
"//brave/browser/brave_vpn",
"//brave/components/brave_vpn/browser",
"//chrome/browser/profiles:profile",
"//components/keyed_service/content",
"//components/user_prefs",
"//content/public/browser",
]
if (is_android) {
brave_browser_brave_vpn_sources += [
"//brave/browser/brave_vpn/android/brave_vpn_native_worker.cc",
"//brave/browser/brave_vpn/android/brave_vpn_native_worker.h",
"//brave/browser/brave_vpn/android/brave_vpn_service_factory_android.cc",
]
brave_browser_brave_vpn_deps += [
"//brave/build/android:jni_headers",
"//brave/components/l10n/common",
"//mojo/public/cpp/bindings",
]
}
}
if (enable_brave_vpn_v1) {
if (is_win) {
brave_browser_brave_vpn_sources += [
"//brave/browser/brave_vpn/dns/brave_vpn_dns_observer_factory_win.cc",
@@ -40,26 +64,7 @@ if (enable_brave_vpn) {
}
brave_browser_brave_vpn_deps += [
"//base",
"//brave/browser/brave_vpn",
"//brave/browser/brave_vpn:v1_utils",
"//brave/components/brave_vpn/browser",
"//chrome/browser/profiles:profile",
"//components/keyed_service/content",
"//components/user_prefs",
"//content/public/browser",
"//brave/components/brave_vpn/browser:v1_utils",
]
if (is_android) {
brave_browser_brave_vpn_sources += [
"//brave/browser/brave_vpn/android/brave_vpn_native_worker.cc",
"//brave/browser/brave_vpn/android/brave_vpn_native_worker.h",
"//brave/browser/brave_vpn/android/brave_vpn_service_factory_android.cc",
]
brave_browser_brave_vpn_deps += [
"//brave/build/android:jni_headers",
"//brave/components/l10n/common",
"//mojo/public/cpp/bindings",
]
}
}
+1
View File
@@ -39,6 +39,7 @@ source_set("win") {
":wireguard_utils",
"//base",
"//brave/components/brave_vpn/browser",
"//brave/components/brave_vpn/browser:v1_utils",
"//brave/components/brave_vpn/browser/connection/wireguard",
"//brave/components/brave_vpn/browser/connection/wireguard/credentials",
"//brave/components/brave_vpn/common",
+2 -4
View File
@@ -546,13 +546,11 @@ if (enable_web_discovery_native) {
if (enable_brave_vpn) {
brave_chrome_browser_deps += [
"//brave/components/brave_vpn/browser",
"//brave/components/brave_vpn/browser:v1_utils",
"//brave/components/brave_vpn/browser/connection",
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/common",
]
if (enable_brave_vpn_v1) {
brave_chrome_browser_deps +=
[ "//brave/components/brave_vpn/browser/connection" ]
}
}
if (enable_brave_vpn_v2) {
+10 -4
View File
@@ -985,10 +985,12 @@ source_set("ui") {
deps += [
"//brave/browser/brave_vpn",
"//brave/components/brave_vpn/browser",
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/common",
]
if (enable_brave_vpn_v1 && is_win) {
}
if (enable_brave_vpn_v1) {
deps += [ "//brave/components/brave_vpn/browser/connection:api" ]
if (is_win) {
deps += [
"//brave/components/brave_vpn/common/win",
"//brave/components/brave_vpn/common/wireguard",
@@ -1491,8 +1493,6 @@ source_set("unit_tests") {
deps += [
"//base",
"//brave/components/brave_vpn/browser",
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/browser/connection/ikev2:sim",
"//brave/components/skus/browser",
"//chrome/browser/prefs",
"//chrome/browser/themes",
@@ -1501,6 +1501,12 @@ source_set("unit_tests") {
"//third_party/abseil-cpp:absl",
]
}
if (enable_brave_vpn_v1) {
deps += [
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/browser/connection/ikev2:sim",
]
}
}
}
@@ -5,7 +5,7 @@
import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
if (enable_brave_vpn && is_win) {
if (enable_brave_vpn_v1 && is_win) {
source_set("vpn_unit_tests") {
testonly = true
sources = [ "install_worker_vpn_unittest.cc" ]
+1 -1
View File
@@ -26,7 +26,7 @@ if (enable_ai_chat) {
[ "//brave/components/ai_chat/core/browser:test_support" ]
}
if (enable_brave_vpn) {
if (enable_brave_vpn_v1) {
brave_chromium_src_chrome_test_test_support_deps +=
[ "//brave/components/brave_vpn/browser/connection:api" ]
}
+57 -27
View File
@@ -7,43 +7,63 @@ import("//brave/components/brave_vpn/common/buildflags/buildflags.gni")
assert(enable_brave_vpn)
# Browser sources shared between v1 and v2 implementations.
static_library("browser") {
sources = [
"brave_vpn_service.cc",
"brave_vpn_service.h",
"brave_vpn_service_observer.cc",
"brave_vpn_service_observer.h",
]
public_deps = [
"//base",
"//brave/components/brave_vpn/common/mojom",
"//brave/components/skus/browser",
"//components/keyed_service/core",
"//mojo/public/cpp/bindings",
]
deps = [ "//brave/components/brave_vpn/common" ]
}
static_library("v1_utils") {
sources = [
"brave_vpn_metrics.cc",
"brave_vpn_metrics.h",
"brave_vpn_service.cc",
"brave_vpn_service.h",
"brave_vpn_service_delegate.h",
"brave_vpn_service_helper.cc",
"brave_vpn_service_helper.h",
"brave_vpn_service_impl.cc",
"brave_vpn_service_impl.h",
"brave_vpn_service_observer.cc",
"brave_vpn_service_observer.h",
]
deps = [
public_deps = [
":browser",
"api",
"connection",
"connection:api",
"connection:common",
"//base",
"//brave/components/brave_vpn/common",
"//brave/components/brave_vpn/common/mojom",
"//brave/components/constants",
"//brave/components/misc_metrics",
"//brave/components/p3a_utils",
"//brave/components/resources:strings",
"//brave/components/skus/browser",
"//brave/components/skus/common:mojom",
"//brave/components/time_period_storage",
"//brave/components/version_info",
"//build:buildflag_header_h",
"//components/keyed_service/core",
"//components/pref_registry",
"//components/prefs",
"//components/version_info",
"//mojo/public/cpp/bindings",
"//services/network/public/cpp",
]
deps = [
"connection",
"connection:common",
"//brave/components/constants",
"//brave/components/p3a_utils",
"//brave/components/resources:strings",
"//brave/components/version_info",
"//components/pref_registry",
"//components/version_info",
"//ui/base",
"//url",
]
@@ -52,20 +72,18 @@ static_library("browser") {
source_set("unit_tests") {
testonly = true
sources = [
"brave_vpn_metrics_unittest.cc",
"brave_vpn_service_impl_unittest.cc",
"brave_vpn_service_unittest.cc",
]
sources = [ "brave_vpn_service_unittest.cc" ]
if (enable_brave_vpn_v1) {
sources += [
"brave_vpn_metrics_unittest.cc",
"brave_vpn_service_impl_unittest.cc",
]
}
deps = [
":browser",
"api",
"api:unit_tests",
"//base",
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/browser/connection:common",
"//brave/components/brave_vpn/browser/connection/wireguard/credentials:unit_tests",
"//brave/components/brave_vpn/common",
"//brave/components/brave_vpn/common/mojom",
"//brave/components/constants",
@@ -80,10 +98,22 @@ source_set("unit_tests") {
"//testing/gmock",
"//testing/gtest",
]
if (!is_android) {
if (enable_brave_vpn_v1) {
deps += [
"connection:unit_tests",
"//brave/components/brave_vpn/browser/connection/ikev2:sim",
":v1_utils",
"api",
"api:unit_tests",
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/browser/connection:common",
"//brave/components/brave_vpn/browser/connection/wireguard/credentials:unit_tests",
]
if (!is_android) {
deps += [
"connection:unit_tests",
"//brave/components/brave_vpn/browser/connection/ikev2:sim",
]
}
}
}
@@ -51,7 +51,7 @@ source_set("unit_tests") {
deps = [
":sim",
"//brave/components/brave_vpn/browser",
"//brave/components/brave_vpn/browser:v1_utils",
"//brave/components/brave_vpn/browser/connection:api",
"//brave/components/brave_vpn/browser/connection:common",
"//brave/components/brave_vpn/common",
+4 -2
View File
@@ -416,9 +416,11 @@ test("brave_unit_tests") {
deps += [
"//brave/components/brave_vpn/browser:unit_tests",
"//brave/components/brave_vpn/common:unit_tests",
"//brave/components/brave_vpn/common/wireguard:unit_tests",
"//brave/components/skus/browser:unit_tests",
]
}
if (enable_brave_vpn_v1) {
deps += [ "//brave/components/brave_vpn/common/wireguard:unit_tests" ]
if (is_win) {
deps += [
"//brave/browser/brave_vpn/dns:unit_tests",
@@ -713,7 +715,7 @@ if (!is_android) {
"//testing/gtest",
]
if (enable_brave_vpn) {
if (enable_brave_vpn_v1) {
deps += [
"//brave/chromium_src/chrome/installer/setup/test:vpn_unit_tests",
]