Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(686)

Side by Side Diff: chrome/browser/chromeos/chrome_browser_main_chromeos.cc

Issue 8774035: Revert "chromeos: move screen lock handling to power manager client" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reverted 3 patches in correct order, without conflict Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/chrome_browser_main_chromeos.h" 5 #include "chrome/browser/chromeos/chrome_browser_main_chromeos.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/string_number_conversions.h"
13 #include "chrome/browser/browser_process_impl.h"
14 #include "chrome/browser/chromeos/accessibility/system_event_observer.h" 12 #include "chrome/browser/chromeos/accessibility/system_event_observer.h"
15 #include "chrome/browser/chromeos/audio_handler.h"
16 #include "chrome/browser/chromeos/audio_handler.h"
17 #include "chrome/browser/chromeos/bluetooth/bluetooth_manager.h" 13 #include "chrome/browser/chromeos/bluetooth/bluetooth_manager.h"
18 #include "chrome/browser/chromeos/boot_times_loader.h" 14 #include "chrome/browser/chromeos/boot_times_loader.h"
19 #include "chrome/browser/chromeos/boot_times_loader.h"
20 #include "chrome/browser/chromeos/brightness_observer.h" 15 #include "chrome/browser/chromeos/brightness_observer.h"
21 #include "chrome/browser/chromeos/cros/cros_library.h" 16 #include "chrome/browser/chromeos/cros/cros_library.h"
22 #include "chrome/browser/chromeos/cros/cros_library.h"
23 #include "chrome/browser/chromeos/cros/screen_lock_library.h"
24 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" 17 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
25 #include "chrome/browser/chromeos/dbus/power_manager_client.h" 18 #include "chrome/browser/chromeos/dbus/power_manager_client.h"
26 #include "chrome/browser/chromeos/dbus/session_manager_client.h" 19 #include "chrome/browser/chromeos/dbus/session_manager_client.h"
27 #include "chrome/browser/chromeos/disks/disk_mount_manager.h" 20 #include "chrome/browser/chromeos/disks/disk_mount_manager.h"
28 #include "chrome/browser/chromeos/external_metrics.h"
29 #include "chrome/browser/chromeos/input_method/input_method_manager.h" 21 #include "chrome/browser/chromeos/input_method/input_method_manager.h"
30 #include "chrome/browser/chromeos/input_method/xkeyboard.h" 22 #include "chrome/browser/chromeos/input_method/xkeyboard.h"
31 #include "chrome/browser/chromeos/login/authenticator.h"
32 #include "chrome/browser/chromeos/login/login_utils.h"
33 #include "chrome/browser/chromeos/login/ownership_service.h"
34 #include "chrome/browser/chromeos/login/screen_locker.h"
35 #include "chrome/browser/chromeos/login/session_manager_observer.h" 23 #include "chrome/browser/chromeos/login/session_manager_observer.h"
36 #include "chrome/browser/chromeos/login/user_manager.h"
37 #include "chrome/browser/chromeos/net/cros_network_change_notifier_factory.h" 24 #include "chrome/browser/chromeos/net/cros_network_change_notifier_factory.h"
38 #include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h" 25 #include "chrome/browser/chromeos/net/network_change_notifier_chromeos.h"
39 #include "chrome/browser/chromeos/status/status_area_view_chromeos.h"
40 #include "chrome/browser/chromeos/system/runtime_environment.h" 26 #include "chrome/browser/chromeos/system/runtime_environment.h"
41 #include "chrome/browser/chromeos/system/statistics_provider.h" 27 #include "chrome/browser/chromeos/system/statistics_provider.h"
42 #include "chrome/browser/chromeos/system_key_event_listener.h"
43 #include "chrome/browser/chromeos/upgrade_detector_chromeos.h" 28 #include "chrome/browser/chromeos/upgrade_detector_chromeos.h"
44 #include "chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.h"
45 #include "chrome/browser/defaults.h" 29 #include "chrome/browser/defaults.h"
46 #include "chrome/browser/metrics/metrics_service.h"
47 #include "chrome/browser/oom_priority_manager.h"
48 #include "chrome/browser/policy/browser_policy_connector.h"
49 #include "chrome/browser/profiles/profile.h"
50 #include "chrome/browser/profiles/profile_manager.h"
51 #include "chrome/browser/ui/views/browser_dialogs.h"
52 #include "chrome/common/chrome_switches.h" 30 #include "chrome/common/chrome_switches.h"
53 #include "chrome/common/logging_chrome.h"
54 #include "content/public/common/main_function_params.h" 31 #include "content/public/common/main_function_params.h"
55 #include "grit/platform_locale_settings.h"
56 #include "net/base/network_change_notifier.h" 32 #include "net/base/network_change_notifier.h"
57 #include "net/url_request/url_request.h"
58 #include "ui/base/l10n/l10n_util.h"
59 33
60 #if defined(TOOLKIT_USES_GTK) 34 #if defined(TOOLKIT_USES_GTK)
61 #include <gtk/gtk.h> 35 #include <gtk/gtk.h>
62 #endif 36 #endif
63 37
64 #if defined(USE_AURA) 38 #if defined(USE_AURA)
65 #include "chrome/browser/chromeos/legacy_window_manager/initial_browser_window_o bserver.h" 39 #include "chrome/browser/chromeos/legacy_window_manager/initial_browser_window_o bserver.h"
66 #endif 40 #endif
67 41
68 class MessageLoopObserver : public MessageLoopForUI::Observer { 42 class MessageLoopObserver : public MessageLoopForUI::Observer {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 } 75 }
102 76
103 virtual void DidProcessEvent(GdkEvent* event) { 77 virtual void DidProcessEvent(GdkEvent* event) {
104 } 78 }
105 #endif 79 #endif
106 }; 80 };
107 81
108 static base::LazyInstance<MessageLoopObserver> g_message_loop_observer = 82 static base::LazyInstance<MessageLoopObserver> g_message_loop_observer =
109 LAZY_INSTANCE_INITIALIZER; 83 LAZY_INSTANCE_INITIALIZER;
110 84
111 // Login -----------------------------------------------------------------------
112
113 // Class is used to login using passed username and password.
114 // The instance will be deleted upon success or failure.
115 class StubLogin : public chromeos::LoginStatusConsumer,
116 public chromeos::LoginUtils::Delegate {
117 public:
118 StubLogin(std::string username, std::string password)
119 : pending_requests_(false),
120 profile_prepared_(false) {
121 authenticator_ = chromeos::LoginUtils::Get()->CreateAuthenticator(this);
122 authenticator_.get()->AuthenticateToLogin(
123 g_browser_process->profile_manager()->GetDefaultProfile(),
124 username,
125 password,
126 std::string(),
127 std::string());
128 }
129
130 ~StubLogin() {
131 chromeos::LoginUtils::Get()->DelegateDeleted(this);
132 }
133
134 void OnLoginFailure(const chromeos::LoginFailure& error) {
135 LOG(ERROR) << "Login Failure: " << error.GetErrorString();
136 delete this;
137 }
138
139 void OnLoginSuccess(const std::string& username,
140 const std::string& password,
141 const GaiaAuthConsumer::ClientLoginResult& credentials,
142 bool pending_requests,
143 bool using_oauth) {
144 pending_requests_ = pending_requests;
145 if (!profile_prepared_) {
146 // Will call OnProfilePrepared in the end.
147 chromeos::LoginUtils::Get()->PrepareProfile(username,
148 password,
149 credentials,
150 pending_requests,
151 using_oauth,
152 false,
153 this);
154 } else if (!pending_requests) {
155 delete this;
156 }
157 }
158
159 // LoginUtils::Delegate implementation:
160 virtual void OnProfilePrepared(Profile* profile) {
161 profile_prepared_ = true;
162 chromeos::LoginUtils::DoBrowserLaunch(profile, NULL);
163 if (!pending_requests_)
164 delete this;
165 }
166
167 scoped_refptr<chromeos::Authenticator> authenticator_;
168 bool pending_requests_;
169 bool profile_prepared_;
170 };
171
172 // Allows authenticator to be invoked without adding refcounting. The instances
173 // will delete themselves upon completion.
174 DISABLE_RUNNABLE_METHOD_REFCOUNT(StubLogin);
175
176 void OptionallyRunChromeOSLoginManager(const CommandLine& parsed_command_line,
177 Profile* profile) {
178 if (parsed_command_line.HasSwitch(switches::kLoginManager)) {
179 std::string first_screen =
180 parsed_command_line.GetSwitchValueASCII(switches::kLoginScreen);
181 std::string size_arg =
182 parsed_command_line.GetSwitchValueASCII(
183 switches::kLoginScreenSize);
184 gfx::Size size(0, 0);
185 // Allow the size of the login window to be set explicitly. If not set,
186 // default to the entire screen. This is mostly useful for testing.
187 if (size_arg.size()) {
188 std::vector<std::string> dimensions;
189 base::SplitString(size_arg, ',', &dimensions);
190 if (dimensions.size() == 2) {
191 int width, height;
192 if (base::StringToInt(dimensions[0], &width) &&
193 base::StringToInt(dimensions[1], &height))
194 size.SetSize(width, height);
195 }
196 }
197 browser::ShowLoginWizard(first_screen, size);
198 } else if (parsed_command_line.HasSwitch(switches::kLoginUser) &&
199 parsed_command_line.HasSwitch(switches::kLoginPassword)) {
200 chromeos::BootTimesLoader::Get()->RecordLoginAttempted();
201 new StubLogin(
202 parsed_command_line.GetSwitchValueASCII(switches::kLoginUser),
203 parsed_command_line.GetSwitchValueASCII(switches::kLoginPassword));
204 } else {
205 if (!parsed_command_line.HasSwitch(switches::kTestName)) {
206 // We did not log in (we crashed or are debugging), so we need to
207 // set the user name for sync.
208 chromeos::LoginUtils::Get()->RestoreAuthenticationSession(
209 chromeos::UserManager::Get()->logged_in_user().email(), profile);
210 }
211 }
212 }
213
214 // ChromeBrowserMainPartsChromeos ----------------------------------------------
215
216 ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos( 85 ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos(
217 const content::MainFunctionParams& parameters) 86 const content::MainFunctionParams& parameters)
218 : ChromeBrowserMainPartsLinux(parameters) { 87 : ChromeBrowserMainPartsLinux(parameters) {
219 } 88 }
220 89
221 ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { 90 ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() {
222 chromeos::disks::DiskMountManager::Shutdown(); 91 chromeos::disks::DiskMountManager::Shutdown();
223 92
224 chromeos::DBusThreadManager::Shutdown(); 93 chromeos::DBusThreadManager::Shutdown();
225 94
226 if (!parameters().ui_task && chromeos::CrosLibrary::Get()) 95 if (!parameters().ui_task && chromeos::CrosLibrary::Get())
227 chromeos::CrosLibrary::Shutdown(); 96 chromeos::CrosLibrary::Shutdown();
228 97
229 // To be precise, logout (browser shutdown) is not yet done, but the 98 // To be precise, logout (browser shutdown) is not yet done, but the
230 // remaining work is negligible, hence we say LogoutDone here. 99 // remaining work is negligible, hence we say LogoutDone here.
231 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutDone", 100 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("LogoutDone",
232 false); 101 false);
233 chromeos::BootTimesLoader::Get()->WriteLogoutTimes(); 102 chromeos::BootTimesLoader::Get()->WriteLogoutTimes();
234 } 103 }
235 104
236 // content::BrowserMainParts and ChromeBrowserMainExtraParts overrides ---------
237
238 void ChromeBrowserMainPartsChromeos::PreEarlyInitialization() { 105 void ChromeBrowserMainPartsChromeos::PreEarlyInitialization() {
106 ChromeBrowserMainPartsLinux::PreEarlyInitialization();
239 if (parsed_command_line().HasSwitch(switches::kGuestSession)) { 107 if (parsed_command_line().HasSwitch(switches::kGuestSession)) {
240 // Disable sync and extensions if we're in "browse without sign-in" mode. 108 // Disable sync and extensions if we're in "browse without sign-in" mode.
241 CommandLine* singleton_command_line = CommandLine::ForCurrentProcess(); 109 CommandLine* singleton_command_line = CommandLine::ForCurrentProcess();
242 singleton_command_line->AppendSwitch(switches::kDisableSync); 110 singleton_command_line->AppendSwitch(switches::kDisableSync);
243 singleton_command_line->AppendSwitch(switches::kDisableExtensions); 111 singleton_command_line->AppendSwitch(switches::kDisableExtensions);
244 browser_defaults::bookmarks_enabled = false; 112 browser_defaults::bookmarks_enabled = false;
245 } 113 }
246
247 ChromeBrowserMainPartsLinux::PreEarlyInitialization();
248 } 114 }
249 115
250 void ChromeBrowserMainPartsChromeos::PreMainMessageLoopStart() { 116 void ChromeBrowserMainPartsChromeos::PreMainMessageLoopStart() {
117 ChromeBrowserMainPartsLinux::PreMainMessageLoopStart();
251 // Initialize CrosLibrary only for the browser, unless running tests 118 // Initialize CrosLibrary only for the browser, unless running tests
252 // (which do their own CrosLibrary setup). 119 // (which do their own CrosLibrary setup).
253 if (!parameters().ui_task) { 120 if (!parameters().ui_task) {
254 bool use_stub = parameters().command_line.HasSwitch(switches::kStubCros); 121 bool use_stub = parameters().command_line.HasSwitch(switches::kStubCros);
255 chromeos::CrosLibrary::Initialize(use_stub); 122 chromeos::CrosLibrary::Initialize(use_stub);
256 } 123 }
257 // Replace the default NetworkChangeNotifierFactory with ChromeOS specific 124 // Replace the default NetworkChangeNotifierFactory with ChromeOS specific
258 // implementation. 125 // implementation.
259 net::NetworkChangeNotifier::SetFactory( 126 net::NetworkChangeNotifier::SetFactory(
260 new chromeos::CrosNetworkChangeNotifierFactory()); 127 new chromeos::CrosNetworkChangeNotifierFactory());
261
262 ChromeBrowserMainPartsLinux::PreMainMessageLoopStart();
263 } 128 }
264 129
265 void ChromeBrowserMainPartsChromeos::PreProfileInit() { 130 void ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun() {
266 // -- This used to be in ChromeBrowserMainParts::PreMainMessageLoopRun()
267 // -- immediately before Profile creation().
268
269 // Now that the file thread exists we can record our stats.
270 chromeos::BootTimesLoader::Get()->RecordChromeMainStats();
271
272 #if defined(TOOLKIT_USES_GTK)
273 // Read locale-specific GTK resource information.
274 std::string gtkrc = l10n_util::GetStringUTF8(IDS_LOCALE_GTKRC);
275 if (!gtkrc.empty())
276 gtk_rc_parse_string(gtkrc.c_str());
277 #else
278 // TODO(saintlou): Need to provide an Aura equivalent.
279 NOTIMPLEMENTED();
280 #endif
281
282 // Trigger prefetching of ownership status.
283 chromeos::OwnershipService::GetSharedInstance()->Prewarm();
284
285 // -- This used to be in ChromeBrowserMainParts::PreMainMessageLoopRun()
286 // -- just before CreateProfile().
287
288 // This forces the ProfileManager to be created and register for the
289 // notification it needs to track the logged in user.
290 g_browser_process->profile_manager();
291
292 // TODO(abarth): Should this move to InitializeNetworkOptions()?
293 // Allow access to file:// on ChromeOS for tests.
294 if (parsed_command_line().HasSwitch(switches::kAllowFileAccess))
295 net::URLRequest::AllowFileAccess();
296
297 // There are two use cases for kLoginUser:
298 // 1) if passed in tandem with kLoginPassword, to drive a "StubLogin"
299 // 2) if passed alone, to signal that the indicated user has already
300 // logged in and we should behave accordingly.
301 // This handles case 2.
302 if (parsed_command_line().HasSwitch(switches::kLoginUser) &&
303 !parsed_command_line().HasSwitch(switches::kLoginPassword)) {
304 std::string username =
305 parsed_command_line().GetSwitchValueASCII(switches::kLoginUser);
306 VLOG(1) << "Relaunching browser for user: " << username;
307 chromeos::UserManager::Get()->UserLoggedIn(username);
308
309 // Redirects Chrome logging to the user data dir.
310 logging::RedirectChromeLogging(parsed_command_line());
311
312 // Initialize user policy before creating the profile so the profile
313 // initialization code sees policy settings.
314 g_browser_process->browser_policy_connector()->InitializeUserPolicy(
315 username, false /* wait_for_policy_fetch */);
316 } else if (parsed_command_line().HasSwitch(switches::kLoginManager)) {
317 // Initialize status area mode early on.
318 chromeos::StatusAreaViewChromeos::
319 SetScreenMode(chromeos::StatusAreaViewChromeos::LOGIN_MODE_WEBUI);
320 }
321
322 // In Aura builds this will initialize aura_shell::Shell.
323 ChromeBrowserMainPartsLinux::PreProfileInit();
324 }
325
326 void ChromeBrowserMainPartsChromeos::PostProfileInit() {
327 // -- This used to be in ChromeBrowserMainParts::PreMainMessageLoopRun()
328 // -- just after CreateProfile().
329
330 // Pass the TokenService pointer to the policy connector so user policy can
331 // grab a token and register with the policy server.
332 // TODO(mnissler): Remove once OAuth is the only authentication mechanism.
333 if (parsed_command_line().HasSwitch(switches::kLoginUser) &&
334 !parsed_command_line().HasSwitch(switches::kLoginPassword)) {
335 g_browser_process->browser_policy_connector()->SetUserPolicyTokenService(
336 profile()->GetTokenService());
337 }
338
339 // Tests should be able to tune login manager before showing it.
340 // Thus only show login manager in normal (non-testing) mode.
341 if (!parameters().ui_task)
342 OptionallyRunChromeOSLoginManager(parsed_command_line(), profile());
343
344 ChromeBrowserMainPartsLinux::PostProfileInit();
345 }
346
347 void ChromeBrowserMainPartsChromeos::PreBrowserStart() {
348 // -- This used to be in ChromeBrowserMainParts::PreMainMessageLoopRun()
349 // -- just before MetricsService::LogNeedForCleanShutdown().
350
351 metrics()->StartExternalMetrics();
352
353 // Initialize the audio handler on ChromeOS.
354 chromeos::AudioHandler::Initialize();
355
356 // Listen for system key events so that the user will be able to adjust the
357 // volume on the login screen, if Chrome is running on Chrome OS
358 // (i.e. not Linux desktop), and in non-test mode.
359 if (chromeos::system::runtime_environment::IsRunningOnChromeOS() &&
360 !parameters().ui_task) { // ui_task is non-NULL when running tests.
361 chromeos::SystemKeyEventListener::Initialize();
362 }
363
364 // Listen for XI_HierarchyChanged events.
365 chromeos::XInputHierarchyChangedEventListener::GetInstance();
366
367 // -- This used to be in ChromeBrowserMainParts::PreMainMessageLoopRun()
368 // -- immediately after ChildProcess::WaitForDebugger().
369
370 // Start the out-of-memory priority manager here so that we give the most
371 // amount of time for the other services to start up before we start
372 // adjusting the oom priority.
373 g_browser_process->oom_priority_manager()->Start();
374
375 ChromeBrowserMainPartsLinux::PreBrowserStart();
376 }
377
378 void ChromeBrowserMainPartsChromeos::PostBrowserStart() {
379 // FILE thread is created in ChromeBrowserMainParts::PreMainMessageLoopRun(). 131 // FILE thread is created in ChromeBrowserMainParts::PreMainMessageLoopRun().
380 132 ChromeBrowserMainPartsLinux::PreMainMessageLoopRun();
381 // Get the statistics provider instance here to start loading statistcs 133 // Get the statistics provider instance here to start loading statistcs
382 // on the background FILE thread. 134 // on the background FILE thread.
383 chromeos::system::StatisticsProvider::GetInstance(); 135 chromeos::system::StatisticsProvider::GetInstance();
384 136
385 // Initialize the Chrome OS bluetooth subsystem. 137 // Initialize the Chrome OS bluetooth subsystem.
386 // We defer this to PreMainMessageLoopRun because we don't want to check the 138 // We defer this to PreMainMessageLoopRun because we don't want to check the
387 // parsed command line until after about_flags::ConvertFlagsToSwitches has 139 // parsed command line until after about_flags::ConvertFlagsToSwitches has
388 // been called. 140 // been called.
389 // TODO(vlaviano): Move this back to PostMainMessageLoopStart when we remove 141 // TODO(vlaviano): Move this back to PostMainMessageLoopStart when we remove
390 // the --enable-bluetooth flag. 142 // the --enable-bluetooth flag.
391 if (parsed_command_line().HasSwitch(switches::kEnableBluetooth)) { 143 if (parsed_command_line().HasSwitch(switches::kEnableBluetooth)) {
392 chromeos::BluetoothManager::Initialize(); 144 chromeos::BluetoothManager::Initialize();
393 } 145 }
394
395 ChromeBrowserMainPartsLinux::PostBrowserStart();
396 } 146 }
397 147
398 void ChromeBrowserMainPartsChromeos::PostMainMessageLoopStart() { 148 void ChromeBrowserMainPartsChromeos::PostMainMessageLoopStart() {
149 ChromeBrowserMainPartsLinux::PostMainMessageLoopStart();
399 MessageLoopForUI* message_loop = MessageLoopForUI::current(); 150 MessageLoopForUI* message_loop = MessageLoopForUI::current();
400 message_loop->AddObserver(g_message_loop_observer.Pointer()); 151 message_loop->AddObserver(g_message_loop_observer.Pointer());
401 152
402 // Initialize DBusThreadManager for the browser. This must be done after 153 // Initialize DBusThreadManager for the browser. This must be done after
403 // the main message loop is started, as it uses the message loop. 154 // the main message loop is started, as it uses the message loop.
404 chromeos::DBusThreadManager::Initialize(); 155 chromeos::DBusThreadManager::Initialize();
405 156
406 // Initialize the brightness observer so that we'll display an onscreen 157 // Initialize the brightness observer so that we'll display an onscreen
407 // indication of brightness changes during login. 158 // indication of brightness changes during login.
408 brightness_observer_.reset(new chromeos::BrightnessObserver()); 159 brightness_observer_.reset(new chromeos::BrightnessObserver());
(...skipping 29 matching lines...) Expand all
438 #if defined(GOOGLE_CHROME_BUILD) 189 #if defined(GOOGLE_CHROME_BUILD)
439 chromeos::input_method::InputMethodManager::GetInstance()-> 190 chromeos::input_method::InputMethodManager::GetInstance()->
440 GetXKeyboard()->SetNumLockEnabled(true); 191 GetXKeyboard()->SetNumLockEnabled(true);
441 #endif 192 #endif
442 193
443 #if defined(USE_AURA) 194 #if defined(USE_AURA)
444 initial_browser_window_observer_.reset( 195 initial_browser_window_observer_.reset(
445 new chromeos::InitialBrowserWindowObserver); 196 new chromeos::InitialBrowserWindowObserver);
446 #endif 197 #endif
447 } 198 }
448
449 ChromeBrowserMainPartsLinux::PostMainMessageLoopStart();
450 } 199 }
451 200
452 // Shut down services before the browser process, etc are destroyed. 201 // Shut down services before the browser process, etc are destroyed.
453 void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() { 202 void ChromeBrowserMainPartsChromeos::PostMainMessageLoopRun() {
454 chromeos::BootTimesLoader::Get()->AddLogoutTimeMarker("UIMessageLoopEnded", 203 ChromeBrowserMainPartsLinux::PostMainMessageLoopRun();
455 true);
456
457 g_browser_process->oom_priority_manager()->Stop();
458
459 // The XInput2 event listener needs to be shut down earlier than when
460 // Singletons are finally destroyed in AtExitManager.
461 chromeos::XInputHierarchyChangedEventListener::GetInstance()->Stop();
462
463 // chromeos::SystemKeyEventListener::Shutdown() is always safe to call,
464 // even if Initialize() wasn't called.
465 chromeos::SystemKeyEventListener::Shutdown();
466 chromeos::AudioHandler::Shutdown();
467 204
468 // Shutdown the upgrade detector for Chrome OS. The upgrade detector 205 // Shutdown the upgrade detector for Chrome OS. The upgrade detector
469 // stops monitoring changes from the update engine. 206 // stops monitoring changes from the update engine.
470 if (UpgradeDetectorChromeos::GetInstance()) 207 if (UpgradeDetectorChromeos::GetInstance())
471 UpgradeDetectorChromeos::GetInstance()->Shutdown(); 208 UpgradeDetectorChromeos::GetInstance()->Shutdown();
472 209
473 // Shutdown the network change notifier for Chrome OS. The network 210 // Shutdown the network change notifier for Chrome OS. The network
474 // change notifier stops monitoring changes from the power manager and 211 // change notifier stops monitoring changes from the power manager and
475 // the network manager. 212 // the network manager.
476 if (chromeos::CrosNetworkChangeNotifierFactory::GetInstance()) 213 if (chromeos::CrosNetworkChangeNotifierFactory::GetInstance())
477 chromeos::CrosNetworkChangeNotifierFactory::GetInstance()->Shutdown(); 214 chromeos::CrosNetworkChangeNotifierFactory::GetInstance()->Shutdown();
478 215
479 // We should remove observers attached to D-Bus clients before 216 // We should remove observers attached to D-Bus clients before
480 // DBusThreadManager is shut down. 217 // DBusThreadManager is shut down.
481 if (session_manager_observer_.get()) { 218 if (session_manager_observer_.get()) {
482 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> 219 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->
483 RemoveObserver(session_manager_observer_.get()); 220 RemoveObserver(session_manager_observer_.get());
484 } 221 }
485 if (brightness_observer_.get()) { 222 if (brightness_observer_.get()) {
486 chromeos::DBusThreadManager::Get()->GetPowerManagerClient() 223 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()
487 ->RemoveObserver(brightness_observer_.get()); 224 ->RemoveObserver(brightness_observer_.get());
488 } 225 }
489 226
490 // Shut these down here instead of in the destructor in case we exited before 227 // Shut these down here instead of in the destructor in case we exited before
491 // running BrowserMainLoop::RunMainMessageLoopParts() and never initialized 228 // running BrowserMainLoop::RunMainMessageLoopParts() and never initialized
492 // these. 229 // these.
493 chromeos::accessibility::SystemEventObserver::Shutdown(); 230 chromeos::accessibility::SystemEventObserver::Shutdown();
494 chromeos::BluetoothManager::Shutdown(); 231 chromeos::BluetoothManager::Shutdown();
495
496 ChromeBrowserMainPartsLinux::PostMainMessageLoopRun();
497 } 232 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/chrome_browser_main_chromeos.h ('k') | chrome/browser/chromeos/dbus/mock_power_manager_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698