Skip to content

Commit 3014e48

Browse files
authored
[iOS] - Add Skus-Internals WebUI - 1.64.x (#22918)
[iOS] - Add Skus-Internals WebUI (#22856) * Add Skus-Internals for iOS * Add ability to retrieve AI-Chat skus state * Add ability for WebUI to show alerts and confirmation dialogs.
1 parent 4c86fdc commit 3014e48

File tree

13 files changed

+648
-24
lines changed

13 files changed

+648
-24
lines changed

browser/ui/webui/skus_internals_ui.cc

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "brave/browser/brave_browser_process.h"
2020
#include "brave/browser/skus/skus_service_factory.h"
2121
#include "brave/browser/ui/webui/brave_webui_source.h"
22+
#include "brave/components/ai_chat/core/common/buildflags/buildflags.h"
2223
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
2324
#include "brave/components/skus/browser/pref_names.h"
2425
#include "brave/components/skus/browser/resources/grit/skus_internals_generated_map.h"
@@ -94,24 +95,34 @@ void SkusInternalsUI::GetVpnState(GetVpnStateCallback callback) {
9495
#if !BUILDFLAG(IS_ANDROID)
9596
dict.Set("Last connection error", GetLastVPNConnectionError());
9697
#endif
97-
dict.Set("Order", GetVPNOrderInfo());
98+
auto* profile = Profile::FromWebUI(web_ui());
99+
if (!brave_vpn::IsBraveVPNEnabled(profile->GetPrefs())) {
100+
dict.Set("Order", base::Value::Dict());
101+
} else {
102+
auto order_info = GetOrderInfo("vpn.");
103+
order_info.Set(
104+
"env", local_state_->GetString(brave_vpn::prefs::kBraveVPNEnvironment));
105+
dict.Set("Order", std::move(order_info));
106+
}
98107
#endif
99108
std::string result;
100109
base::JSONWriter::Write(dict, &result);
101110
std::move(callback).Run(result);
102111
}
103112

104-
base::Value::Dict SkusInternalsUI::GetVPNOrderInfo() const {
113+
void SkusInternalsUI::GetLeoState(GetLeoStateCallback callback) {
105114
base::Value::Dict dict;
106-
#if BUILDFLAG(ENABLE_BRAVE_VPN)
107-
auto* profile = Profile::FromWebUI(web_ui());
108-
if (!brave_vpn::IsBraveVPNEnabled(profile->GetPrefs())) {
109-
return dict;
110-
}
111-
112-
dict.Set("env",
113-
local_state_->GetString(brave_vpn::prefs::kBraveVPNEnvironment));
115+
#if BUILDFLAG(ENABLE_AI_CHAT)
116+
dict.Set("Order", GetOrderInfo("leo."));
117+
#endif
118+
std::string result;
119+
base::JSONWriter::Write(dict, &result);
120+
std::move(callback).Run(result);
121+
}
114122

123+
base::Value::Dict SkusInternalsUI::GetOrderInfo(
124+
const std::string& location) const {
125+
base::Value::Dict dict;
115126
const auto& skus_state = local_state_->GetDict(skus::prefs::kSkusState);
116127
for (const auto kv : skus_state) {
117128
if (!base::StartsWith(kv.first, "skus:")) {
@@ -140,11 +151,11 @@ base::Value::Dict SkusInternalsUI::GetVPNOrderInfo() const {
140151
continue;
141152
}
142153

143-
if (auto* location = order_dict->FindString("location")) {
144-
if (!base::StartsWith(*location, "vpn.")) {
154+
if (auto* order_location = order_dict->FindString("location")) {
155+
if (!base::StartsWith(*order_location, location)) {
145156
continue;
146157
}
147-
order_dict_output.Set("location", *location);
158+
order_dict_output.Set("location", *order_location);
148159
}
149160

150161
if (auto* id = order_dict->FindString("id")) {
@@ -157,7 +168,6 @@ base::Value::Dict SkusInternalsUI::GetVPNOrderInfo() const {
157168
// Set output with env like {skus:production: {...}}.
158169
dict.Set(kv.first, std::move(order_dict_output));
159170
}
160-
#endif
161171
return dict;
162172
}
163173

browser/ui/webui/skus_internals_ui.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class SkusInternalsUI : public content::WebUIController,
3737
void GetEventLog(GetEventLogCallback callback) override;
3838
void GetSkusState(GetSkusStateCallback callback) override;
3939
void GetVpnState(GetVpnStateCallback callback) override;
40+
void GetLeoState(GetLeoStateCallback callback) override;
4041
void ResetSkusState() override;
4142
void CopySkusStateToClipboard() override;
4243
void DownloadSkusState() override;
@@ -51,7 +52,7 @@ class SkusInternalsUI : public content::WebUIController,
5152
void FileSelectionCanceled(void* params) override;
5253

5354
std::string GetLastVPNConnectionError() const;
54-
base::Value::Dict GetVPNOrderInfo() const;
55+
base::Value::Dict GetOrderInfo(const std::string& location) const;
5556
std::string GetSkusStateAsString() const;
5657

5758
void EnsureMojoConnected();

components/resources/BUILD.gn

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,26 @@ brave_grit("static_resources") {
5757
}
5858

5959
repack("resources") {
60-
deps = [ ":static_resources" ]
61-
sources = [ "$root_gen_dir/components/brave_components_static.pak" ]
60+
deps = [
61+
":static_resources",
62+
"//brave/components/skus/browser/resources:generated_resources",
63+
]
64+
sources = [
65+
"$root_gen_dir/brave/components/skus/browser/resources/skus_internals_generated.pak",
66+
"$root_gen_dir/components/brave_components_static.pak",
67+
]
6268

6369
if (!is_ios) {
6470
deps += [
6571
"//brave/components/brave_adblock_ui:generated_resources",
6672
"//brave/components/brave_adblock_ui/adblock_internals:generated_resources",
6773
"//brave/components/cosmetic_filters/resources/data:generated_resources",
68-
"//brave/components/skus/browser/resources:generated_resources",
6974
]
7075

7176
sources += [
7277
"$root_gen_dir/brave/components/brave_adblock/adblock_internals/resources/brave_adblock_internals_generated.pak",
7378
"$root_gen_dir/brave/components/brave_adblock/resources/brave_adblock_generated.pak",
7479
"$root_gen_dir/brave/components/cosmetic_filters/resources/cosmetic_filters_generated.pak",
75-
"$root_gen_dir/brave/components/skus/browser/resources/skus_internals_generated.pak",
7680
]
7781
}
7882

components/skus/browser/resources/skus_internals.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
<meta name="viewport" content="width=device-width">
1414
<title>SKUs internals</title>
1515
<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
16+
<if expr="is_ios">
17+
<!-- TODO(crbug.com/487000): Remove this once injected by web. -->
18+
<script src="chrome://resources/js/ios/web_ui.js"></script>
19+
<script src="chrome://resources/js/ios/mojo_api.js"></script>
20+
</if>
1621
<script src="/skus_internals.bundle.js"></script>
1722
<style>
1823
body {

components/skus/browser/resources/skus_internals.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ const defaultState: CreateOrderFromReceiptInputFields = {
4444
function App() {
4545
const [skusState, setSkusState] = React.useState({})
4646
const [vpnState, setVpnState] = React.useState({})
47+
const [leoState, setLeoState] = React.useState({})
4748
const [createOrderFormData, setCreateOrderFormData] = React.useState<CreateOrderFromReceiptInputFields>(defaultState)
4849

4950
const resetSkusState = () => {
5051
API.resetSkusState()
5152
setSkusState({})
5253
setVpnState({})
54+
setLeoState({})
5355
}
5456

5557
const getSkusState = () => {
@@ -64,6 +66,12 @@ function App() {
6466
})
6567
}
6668

69+
const getLeoState = () => {
70+
API.getLeoState().then((r: any) => {
71+
setLeoState(JSON.parse(r.response))
72+
})
73+
}
74+
6775
const submitCreateOrderFromReceipt = () => {
6876
API.createOrderFromReceipt(
6977
createOrderFormData.domain, createOrderFormData.receipt).then((r: any) =>
@@ -101,6 +109,7 @@ function App() {
101109
Reset SKUs state
102110
</button>
103111
<button onClick={getVpnState}>Fetch VPN state</button>
112+
<button onClick={getLeoState}>Fetch Leo state</button>
104113
<button onClick={getSkusState}>Fetch SKUs state</button>
105114
</ButtonContainer>
106115

@@ -109,6 +118,11 @@ function App() {
109118
<JsonView data={vpnState} shouldInitiallyExpand={(level) => true} />
110119
</StateContainer>
111120

121+
<StateContainer>
122+
<b>Leo State:</b>
123+
<JsonView data={leoState} shouldInitiallyExpand={(level) => true} />
124+
</StateContainer>
125+
112126
<StateContainer>
113127
<b>SKUs State:</b>
114128
<button onClick={() => API.copySkusStateToClipboard()}>Copy</button>

components/skus/common/skus_internals.mojom

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ interface SkusInternals {
99
GetEventLog() => (string response);
1010
GetSkusState() => (string response);
1111
GetVpnState() => (string response);
12+
GetLeoState() => (string response);
1213
CopySkusStateToClipboard();
1314
DownloadSkusState();
1415
ResetSkusState();

0 commit comments

Comments
 (0)