[M120 Migration]Fix for crash during chrome exit
[platform/framework/web/chromium-efl.git] / chrome / browser / chrome_browser_main_parts_lacros.cc
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.
4
5 #include "chrome/browser/chrome_browser_main_parts_lacros.h"
6
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"
19
20 ChromeBrowserMainPartsLacros::ChromeBrowserMainPartsLacros(
21     bool is_integration_test,
22     StartupData* startup_data)
23     : ChromeBrowserMainPartsLinux(is_integration_test, startup_data) {}
24
25 ChromeBrowserMainPartsLacros::~ChromeBrowserMainPartsLacros() = default;
26
27 int ChromeBrowserMainPartsLacros::PreEarlyInitialization() {
28   int result = ChromeBrowserMainPartsLinux::PreEarlyInitialization();
29   if (result != content::RESULT_CODE_NORMAL_EXIT)
30     return result;
31
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
34   // policy overrides.
35   MetricsReportingObserver::InitSettingsFromAsh();
36
37   prefs_ash_observer_ =
38       std::make_unique<PrefsAshObserver>(g_browser_process->local_state());
39   prefs_ash_observer_->Init();
40
41   return content::RESULT_CODE_NORMAL_EXIT;
42 }
43
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);
51   }
52   return ChromeBrowserMainPartsLinux::PreCreateThreads();
53 }
54
55 void ChromeBrowserMainPartsLacros::PostCreateThreads() {
56   if (g_browser_process->metrics_service()) {
57     metrics_reporting_observer_ = MetricsReportingObserver::CreateObserver(
58         g_browser_process->metrics_service());
59   } else {
60     LOG(WARNING)
61         << "Metrics service is not available, not syncing metrics settings.";
62   }
63   return ChromeBrowserMainPartsLinux::PostCreateThreads();
64 }
65
66 void ChromeBrowserMainPartsLacros::PreProfileInit() {
67   ChromeBrowserMainPartsLinux::PreProfileInit();
68
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);
77
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);
82   }
83
84   // Initialize TtsPlatform so that TtsPlatformImplLacros can observe the
85   // ProfileManager for OnProfileAdded event before the profile is loaded.
86   content::TtsPlatform::GetInstance();
87 }
88
89 void ChromeBrowserMainPartsLacros::PostProfileInit(Profile* profile,
90                                                    bool is_initial_profile) {
91   ChromeBrowserMainPartsLinux::PostProfileInit(profile, is_initial_profile);
92   prefs_ash_observer_->InitPostProfileInitialized(profile);
93 }
94
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();
100
101   ChromeBrowserMainParts::PostMainMessageLoopRun();
102 }
103
104 void ChromeBrowserMainPartsLacros::PostDestroyThreads() {
105   chromeos::LacrosShutdownDBus();
106
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();
111
112   ChromeBrowserMainPartsLinux::PostDestroyThreads();
113 }