diff --git a/components/brave_vpn/brave_vpn.mojom b/components/brave_vpn/brave_vpn.mojom index 0c63f86fe0b3..fcb8cb452c23 100644 --- a/components/brave_vpn/brave_vpn.mojom +++ b/components/brave_vpn/brave_vpn.mojom @@ -29,12 +29,6 @@ interface ServiceObserver { OnPurchasedStateChanged(PurchasedState state); }; -struct Region { - string continent; - string name; - string name_pretty; -}; - // Browser-side handler for vpn service things interface ServiceHandler { GetConnectionState() => (ConnectionState state); @@ -43,7 +37,9 @@ interface ServiceHandler { CreateVPNConnection(); Connect(); Disconnect(); + // Gets all region from internal cache which is fetched from Guardian API GetAllRegions() => (array regions); + // Gets region based on user's device timezone GetDeviceRegion() => (Region device_region); GetSelectedRegion() => (Region current_region); SetSelectedRegion(Region region); @@ -66,3 +62,9 @@ enum PurchasedState { PURCHASED, EXPIRED, }; + +struct Region { + string continent; + string name; + string name_pretty; +}; diff --git a/components/brave_vpn/brave_vpn_service_desktop.cc b/components/brave_vpn/brave_vpn_service_desktop.cc index 156e50d755c2..7ddc35265ecf 100644 --- a/components/brave_vpn/brave_vpn_service_desktop.cc +++ b/components/brave_vpn/brave_vpn_service_desktop.cc @@ -294,6 +294,13 @@ bool BraveVpnServiceDesktop::ParseAndCacheRegionList(base::Value region_value) { regions_.push_back(region); } + // Sort region list alphabetically + std::sort(regions_.begin(), regions_.end(), + [](brave_vpn::mojom::Region& a, brave_vpn::mojom::Region& b) { + return (a.name_pretty < b.name_pretty); + }); + + // If we can't get region list, we can't determine device region. if (regions_.empty()) return false; diff --git a/components/brave_vpn/resources/panel/BUILD.gn b/components/brave_vpn/resources/panel/BUILD.gn index e51d430668c7..c20ed011d866 100644 --- a/components/brave_vpn/resources/panel/BUILD.gn +++ b/components/brave_vpn/resources/panel/BUILD.gn @@ -5,10 +5,6 @@ import("//brave/components/common/typescript.gni") import("//mojo/public/tools/bindings/mojom.gni") -import("//tools/grit/preprocess_if_expr.gni") - -preprocess_folder = "preprocessed" -preprocess_panel_manifest = "preprocessed_panel_manifest.json" transpile_web_ui("brave_vpn_panel_ui") { entry_points = [ [ @@ -17,8 +13,6 @@ transpile_web_ui("brave_vpn_panel_ui") { ] ] resource_name = "brave_vpn_panel" deps = [ - ":preprocess_panel", - ":vpn_panel_api_proxy", "//brave/components/brave_vpn:mojom_js", "//brave/components/brave_vpn:preprocess_mojo", ] @@ -29,18 +23,3 @@ pack_web_resources("brave_vpn_panel_generated") { output_dir = "$root_gen_dir/brave/components/brave_vpn/resources/panel" deps = [ ":brave_vpn_panel_ui" ] } - -preprocess_if_expr("preprocess_panel") { - in_folder = "./" - out_folder = "$target_gen_dir/$preprocess_folder" - out_manifest = "$target_gen_dir/$preprocess_panel_manifest" - in_files = [ "vpn_panel_api_proxy.js" ] -} - -js_library("vpn_panel_api_proxy") { - deps = [ - "//brave/components/brave_vpn:mojom_js_library_for_compile", - "//ui/webui/resources/js:cr.m", - "//url/mojom:url_mojom_gurl_js_library_for_compile", - ] -} diff --git a/components/brave_vpn/resources/panel/api/panel_browser_api.ts b/components/brave_vpn/resources/panel/api/panel_browser_api.ts new file mode 100644 index 000000000000..544cbbcdbd4f --- /dev/null +++ b/components/brave_vpn/resources/panel/api/panel_browser_api.ts @@ -0,0 +1,7 @@ +// Copyright (c) 2021 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/. + +// Provide access to all the generated types +export * from 'gen/brave/components/brave_vpn/brave_vpn.mojom.m.js' diff --git a/components/brave_vpn/resources/panel/api/region_interface.ts b/components/brave_vpn/resources/panel/api/region_interface.ts new file mode 100644 index 000000000000..9da3a0affb3f --- /dev/null +++ b/components/brave_vpn/resources/panel/api/region_interface.ts @@ -0,0 +1,10 @@ +export interface Region { + continent: string + name: string + namePretty: string +} +export interface RegionState { + all?: Array, + current?: Region, + hasError: boolean +} diff --git a/components/brave_vpn/resources/panel/vpn_panel_api_proxy.d.ts b/components/brave_vpn/resources/panel/api/vpn_panel_api_proxy.d.ts similarity index 55% rename from components/brave_vpn/resources/panel/vpn_panel_api_proxy.d.ts rename to components/brave_vpn/resources/panel/api/vpn_panel_api_proxy.d.ts index 3abf3ee5c997..9ec01aa305f7 100644 --- a/components/brave_vpn/resources/panel/vpn_panel_api_proxy.d.ts +++ b/components/brave_vpn/resources/panel/api/vpn_panel_api_proxy.d.ts @@ -2,7 +2,9 @@ // 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/. -import { ConnectionState } from './types/connection_state' +import { ConnectionState } from './panel_browser_api' +import { Region } from './region_interface' + export default class APIProxy { static getInstance: () => APIProxy showUI: () => {} @@ -12,12 +14,22 @@ export default class APIProxy { connect: () => {} disconnect: () => {} addVPNObserver: (obj: ServiceObserver) => {} + getAllRegions: () => Promise + getSelectedRegion: () => Promise + setSelectedRegion: (region: Region) => {} } interface ServiceObserver { - onConnectionCreated?: Function - onConnectionRemoved?: Function - onConnectionStateChanged?: Function + onConnectionCreated: Function + onConnectionRemoved: Function + onConnectionStateChanged: Function + onPurchasedStateChanged: Function } interface StateResponse { state: ConnectionState } +interface RegionResponse { + regions: Array +} +interface DeviceRegionResponse { + currentRegion: Region +} diff --git a/components/brave_vpn/resources/panel/vpn_panel_api_proxy.js b/components/brave_vpn/resources/panel/api/vpn_panel_api_proxy.js similarity index 91% rename from components/brave_vpn/resources/panel/vpn_panel_api_proxy.js rename to components/brave_vpn/resources/panel/api/vpn_panel_api_proxy.js index a53005ebf270..ef55f461978b 100644 --- a/components/brave_vpn/resources/panel/vpn_panel_api_proxy.js +++ b/components/brave_vpn/resources/panel/api/vpn_panel_api_proxy.js @@ -63,6 +63,18 @@ export default class VpnPanelApiProxyImpl { return this.vpnService.disconnect(); } + getAllRegions() { + return this.vpnService.getAllRegions(); + } + + getSelectedRegion() { + return this.vpnService.getSelectedRegion(); + } + + setSelectedRegion(region) { + return this.vpnService.setSelectedRegion(region); + } + addVPNObserver(obj) { const serviceObserverReceiver = new braveVpn.mojom.ServiceObserverReceiver(obj) this.vpnService.addObserver(serviceObserverReceiver.$.bindNewPipeAndPassRemote()) diff --git a/components/brave_vpn/resources/panel/components/error-panel/index.tsx b/components/brave_vpn/resources/panel/components/error-panel/index.tsx index b0cb912f519a..6d9e8efb5955 100644 --- a/components/brave_vpn/resources/panel/components/error-panel/index.tsx +++ b/components/brave_vpn/resources/panel/components/error-panel/index.tsx @@ -3,11 +3,11 @@ import * as S from './style' import { Button } from 'brave-ui' import { AlertCircleIcon } from 'brave-ui/components/icons' import locale from '../../constants/locale' - +import { RegionState } from '../../api/region_interface' interface Props { onTryAgainClick: Function onChooseServerClick: Function - region: string + region: RegionState } function ErrorPanel (props: Props) { @@ -21,7 +21,8 @@ function ErrorPanel (props: Props) { {locale.cantConnectError} - Brave Firewall + VPN couldn't connect to the {props.region} server. + Brave Firewall + VPN couldn't connect to the{' '} + {props.region?.current?.namePretty} server. You can try again, or choose another.