diff --git a/browser/ui/webui/brave_welcome_ui.cc b/browser/ui/webui/brave_welcome_ui.cc index 381aeba85a6b..786c6a277485 100644 --- a/browser/ui/webui/brave_welcome_ui.cc +++ b/browser/ui/webui/brave_welcome_ui.cc @@ -121,8 +121,12 @@ class WelcomeDOMHandler : public WebUIMessageHandler { private: void HandleImportNowRequested(const base::Value::List& args); void HandleRecordP3A(const base::Value::List& args); + void GetDefaultBrowser(const base::Value::List& args); void SetLocalStateBooleanEnabled(const std::string& path, const base::Value::List& args); + void OnGetDefaultBrowser(const std::string& callback_id, + shell_integration::DefaultWebClientState state, + const std::u16string& name); void SetP3AEnabled(const base::Value::List& args); void HandleOpenSettingsPage(const base::Value::List& args); void HandleSetMetricsReportingEnabled(const base::Value::List& args); @@ -132,6 +136,7 @@ class WelcomeDOMHandler : public WebUIMessageHandler { bool finished_ = false; bool skipped_ = false; Profile* profile_ = nullptr; + base::WeakPtrFactory weak_ptr_factory_{this}; }; WelcomeDOMHandler::WelcomeDOMHandler(Profile* profile) : profile_(profile) {} @@ -163,6 +168,10 @@ void WelcomeDOMHandler::RegisterMessages() { "setMetricsReportingEnabled", base::BindRepeating(&WelcomeDOMHandler::HandleSetMetricsReportingEnabled, base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "getDefaultBrowser", + base::BindRepeating(&WelcomeDOMHandler::GetDefaultBrowser, + base::Unretained(this))); } void WelcomeDOMHandler::HandleImportNowRequested( @@ -171,6 +180,25 @@ void WelcomeDOMHandler::HandleImportNowRequested( chrome::kImportDataSubPage); } +void WelcomeDOMHandler::GetDefaultBrowser(const base::Value::List& args) { + CHECK_EQ(1U, args.size()); + const auto& callback_id = args[0].GetString(); + AllowJavascript(); + + base::MakeRefCounted( + GURL("https://brave.com")) + ->StartCheckIsDefaultAndGetDefaultClientName( + base::BindOnce(&WelcomeDOMHandler::OnGetDefaultBrowser, + weak_ptr_factory_.GetWeakPtr(), callback_id)); +} + +void WelcomeDOMHandler::OnGetDefaultBrowser( + const std::string& callback_id, + shell_integration::DefaultWebClientState state, + const std::u16string& name) { + ResolveJavascriptCallback(base::Value(callback_id), base::Value(name)); +} + void WelcomeDOMHandler::HandleRecordP3A(const base::Value::List& args) { if (!args[0].is_int() || !args[1].is_bool() || !args[2].is_bool()) return; diff --git a/components/brave_welcome_ui/api/welcome_browser_proxy.ts b/components/brave_welcome_ui/api/welcome_browser_proxy.ts index 1ee424c0f006..d9f86d1f62fe 100644 --- a/components/brave_welcome_ui/api/welcome_browser_proxy.ts +++ b/components/brave_welcome_ui/api/welcome_browser_proxy.ts @@ -3,6 +3,7 @@ // 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 { sendWithPromise } from 'gen/ui/webui/resources/preprocessed/js/cr' import { DefaultBrowserBrowserProxyImpl } from './default_browser_browser_proxy' import { ImportDataBrowserProxyImpl, BrowserProfile as _BrowserProfile } from './import_data_browser_proxy' @@ -31,6 +32,7 @@ export interface WelcomeBrowserProxy { setP3AEnabled: (enabled: boolean) => void setMetricsReportingEnabled: (enabled: boolean) => void openSettingsPage: () => void + getDefaultBrowser: () => Promise } export { DefaultBrowserBrowserProxyImpl, ImportDataBrowserProxyImpl } @@ -52,6 +54,10 @@ export class WelcomeBrowserProxyImpl implements WelcomeBrowserProxy { chrome.send('openSettingsPage') } + getDefaultBrowser (): Promise { + return sendWithPromise('getDefaultBrowser') + } + static getInstance (): WelcomeBrowserProxy { return instance || (instance = new WelcomeBrowserProxyImpl()) } diff --git a/components/brave_welcome_ui/components/select-browser/index.tsx b/components/brave_welcome_ui/components/select-browser/index.tsx index 82bebbe5575b..1b10a5dad67c 100644 --- a/components/brave_welcome_ui/components/select-browser/index.tsx +++ b/components/brave_welcome_ui/components/select-browser/index.tsx @@ -78,7 +78,10 @@ function BrowserItemButton (props: BrowserItemButtonProps) { function SelectBrowser () { const { browserProfiles, currentSelectedBrowser, setCurrentSelectedBrowser, setViewType, incrementCount, scenes } = React.useContext(DataContext) const browserTypes = getUniqueBrowserTypes(browserProfiles ?? []) - + WelcomeBrowserProxyImpl.getInstance().getDefaultBrowser().then( + (name: string) => { + setCurrentSelectedBrowser?.(name) + }) const handleSelectionChange = (browserName: string) => { setCurrentSelectedBrowser?.(browserName) } @@ -106,7 +109,6 @@ function SelectBrowser () { setViewType(ViewType.HelpImprove) WelcomeBrowserProxyImpl.getInstance().recordP3A({ currentScreen: ViewType.ImportSelectBrowser, isFinished: false, isSkipped: true }) } - return (