1 // Copyright 2020 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chrome_browser_main_parts_lacros.h"
7 #include "base/check.h"
8 #include "base/command_line.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/lacros/metrics_reporting_observer.h"
11 #include "chrome/browser/lacros/prefs_ash_observer.h"
12 #include "chrome/browser/metrics/metrics_reporting_state.h"
13 #include "chrome/common/chrome_switches.h"
14 #include "chromeos/lacros/dbus/lacros_dbus_helper.h"
15 #include "chromeos/startup/browser_params_proxy.h"
16 #include "content/public/browser/tts_platform.h"
17 #include "content/public/common/result_codes.h"
18 #include "ui/wm/core/wm_core_switches.h"
20 ChromeBrowserMainPartsLacros::ChromeBrowserMainPartsLacros(
21 bool is_integration_test,
22 StartupData* startup_data)
23 : ChromeBrowserMainPartsLinux(is_integration_test, startup_data) {}
25 ChromeBrowserMainPartsLacros::~ChromeBrowserMainPartsLacros() = default;
27 int ChromeBrowserMainPartsLacros::PreEarlyInitialization() {
28 int result = ChromeBrowserMainPartsLinux::PreEarlyInitialization();
29 if (result != content::RESULT_CODE_NORMAL_EXIT)
32 // The observer sets the initial metrics consent state, then observes ash
33 // for updates. Create it here because local state is required to check for
35 MetricsReportingObserver::InitSettingsFromAsh();
38 std::make_unique<PrefsAshObserver>(g_browser_process->local_state());
39 prefs_ash_observer_->Init();
41 return content::RESULT_CODE_NORMAL_EXIT;
44 int ChromeBrowserMainPartsLacros::PreCreateThreads() {
45 const chromeos::BrowserParamsProxy* init_params =
46 chromeos::BrowserParamsProxy::Get();
47 if (init_params->InitialBrowserAction() ==
48 crosapi::mojom::InitialBrowserAction::kDoNotOpenWindow) {
49 base::CommandLine::ForCurrentProcess()->AppendSwitch(
50 switches::kNoStartupWindow);
52 return ChromeBrowserMainPartsLinux::PreCreateThreads();
55 void ChromeBrowserMainPartsLacros::PostCreateThreads() {
56 if (g_browser_process->metrics_service()) {
57 metrics_reporting_observer_ = MetricsReportingObserver::CreateObserver(
58 g_browser_process->metrics_service());
61 << "Metrics service is not available, not syncing metrics settings.";
63 return ChromeBrowserMainPartsLinux::PostCreateThreads();
66 void ChromeBrowserMainPartsLacros::PreProfileInit() {
67 ChromeBrowserMainPartsLinux::PreProfileInit();
69 // Apply specific flags if this is a Kiosk session.
70 if (chromeos::BrowserParamsProxy::Get()->SessionType() ==
71 crosapi::mojom::SessionType::kWebKioskSession ||
72 chromeos::BrowserParamsProxy::Get()->SessionType() ==
73 crosapi::mojom::SessionType::kAppKioskSession) {
74 // Hide certain system UI elements.
75 base::CommandLine::ForCurrentProcess()->AppendSwitch(
76 switches::kForceAppMode);
78 // Disable window animation since kiosk app runs in a single full screen
79 // window and window animation causes start-up janks.
80 base::CommandLine::ForCurrentProcess()->AppendSwitch(
81 wm::switches::kWindowAnimationsDisabled);
84 // Initialize TtsPlatform so that TtsPlatformImplLacros can observe the
85 // ProfileManager for OnProfileAdded event before the profile is loaded.
86 content::TtsPlatform::GetInstance();
89 void ChromeBrowserMainPartsLacros::PostProfileInit(Profile* profile,
90 bool is_initial_profile) {
91 ChromeBrowserMainPartsLinux::PostProfileInit(profile, is_initial_profile);
92 prefs_ash_observer_->InitPostProfileInitialized(profile);
95 void ChromeBrowserMainPartsLacros::PostMainMessageLoopRun() {
96 // Reset MetricsReportingObserver here to guarantee it's destroyed before
97 // `g_browser_process->metrics_service()` is destructed as
98 // MetricsReportingObserver depends on metrics service.
99 metrics_reporting_observer_.reset();
101 ChromeBrowserMainParts::PostMainMessageLoopRun();
104 void ChromeBrowserMainPartsLacros::PostDestroyThreads() {
105 chromeos::LacrosShutdownDBus();
107 // Reset PrefsAshObserver here to guarantee it's destroyed before
108 // `g_browser_process->local_state()` is destructed as PrefsAshObserver
109 // depends on local state.
110 prefs_ash_observer_.reset();
112 ChromeBrowserMainPartsLinux::PostDestroyThreads();