From d66ebdc7ada5e252fe4a5928dfbb869613451685 Mon Sep 17 00:00:00 2001 From: Taher Date: Mon, 27 Sep 2021 20:21:40 -0700 Subject: [PATCH] Get region list from vpn service to webui --- .storybook/BUILD.gn | 5 +- components/brave_vpn/BUILD.gn | 1 - components/brave_vpn/brave_vpn.mojom | 14 +-- .../brave_vpn/brave_vpn_service_desktop.cc | 7 ++ components/brave_vpn/resources/panel/BUILD.gn | 21 ----- .../resources/panel/api/panel_browser_api.ts | 7 ++ .../resources/panel/api/region_interface.ts | 10 +++ .../panel/{ => api}/vpn_panel_api_proxy.d.ts | 20 ++++- .../panel/{ => api}/vpn_panel_api_proxy.js | 12 +++ .../panel/components/error-panel/index.tsx | 7 +- .../panel/components/main-panel/index.tsx | 8 +- .../components/select-region-list/index.tsx | 75 ++++++++++++++++ .../style.ts | 12 ++- .../panel/components/select-region/index.tsx | 61 ------------- .../components/status-indicator/index.tsx | 2 +- .../resources/panel/constants/locale.ts | 1 + .../brave_vpn/resources/panel/container.tsx | 89 ++++++++++++++++--- .../panel/stories/component-panel.tsx | 42 +++++++-- .../panel/stories/mock-data/region-list.ts | 71 +++++++++++++++ .../resources/panel/types/connection_state.ts | 7 -- .../brave_vpn/resources/panel/vpn_panel.tsx | 2 +- components/brave_vpn/resources/tsconfig.json | 9 ++ 22 files changed, 353 insertions(+), 130 deletions(-) create mode 100644 components/brave_vpn/resources/panel/api/panel_browser_api.ts create mode 100644 components/brave_vpn/resources/panel/api/region_interface.ts rename components/brave_vpn/resources/panel/{ => api}/vpn_panel_api_proxy.d.ts (55%) rename components/brave_vpn/resources/panel/{ => api}/vpn_panel_api_proxy.js (91%) create mode 100644 components/brave_vpn/resources/panel/components/select-region-list/index.tsx rename components/brave_vpn/resources/panel/components/{select-region => select-region-list}/style.ts (88%) delete mode 100644 components/brave_vpn/resources/panel/components/select-region/index.tsx create mode 100644 components/brave_vpn/resources/panel/stories/mock-data/region-list.ts delete mode 100644 components/brave_vpn/resources/panel/types/connection_state.ts create mode 100644 components/brave_vpn/resources/tsconfig.json diff --git a/.storybook/BUILD.gn b/.storybook/BUILD.gn index 32fa646da939..0d0411f1a41a 100644 --- a/.storybook/BUILD.gn +++ b/.storybook/BUILD.gn @@ -10,5 +10,8 @@ group("storybook") { # Explicitly defined here so that even when those targets # are disabled in a regular brave build due to build flags, # they will be generated before storybook is compiled. - deps = [ "//ui/webui/resources/js:cr.m" ] + deps = [ + "//brave/components/brave_vpn:mojom_js", + "//ui/webui/resources/js:cr.m", + ] } diff --git a/components/brave_vpn/BUILD.gn b/components/brave_vpn/BUILD.gn index 533ffb4dcd13..db824470887a 100644 --- a/components/brave_vpn/BUILD.gn +++ b/components/brave_vpn/BUILD.gn @@ -11,7 +11,6 @@ preprocess_folder = "preprocessed" preprocess_mojo_manifest = "preprocessed_mojo_manifest.json" static_library("brave_vpn") { - assert(enable_brave_vpn) sources = [ "brave_vpn_service.cc", "brave_vpn_service.h", diff --git a/components/brave_vpn/brave_vpn.mojom b/components/brave_vpn/brave_vpn.mojom index 1bdee69b417e..6a8cb8ea9aec 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); @@ -73,3 +69,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 407718401ffd..5ddfe9e6c79f 100644 --- a/components/brave_vpn/brave_vpn_service_desktop.cc +++ b/components/brave_vpn/brave_vpn_service_desktop.cc @@ -295,6 +295,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.