| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chrome_browser_main.h" | 5 #include "chrome/browser/chrome_browser_main.h" |
| 6 | 6 |
| 7 #if defined(TOOLKIT_GTK) | 7 #if defined(TOOLKIT_GTK) |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1078 // TODO(sky): nuke this when all ports support ActiveTabTracker. | 1078 // TODO(sky): nuke this when all ports support ActiveTabTracker. |
| 1079 if (!active_tab_tracker_->is_valid()) | 1079 if (!active_tab_tracker_->is_valid()) |
| 1080 active_tab_tracker_.reset(); | 1080 active_tab_tracker_.reset(); |
| 1081 } | 1081 } |
| 1082 #endif | 1082 #endif |
| 1083 | 1083 |
| 1084 // Android updates the metrics service dynamically depending on whether the | 1084 // Android updates the metrics service dynamically depending on whether the |
| 1085 // application is in the foreground or not. Do not start here. | 1085 // application is in the foreground or not. Do not start here. |
| 1086 #if !defined(OS_ANDROID) | 1086 #if !defined(OS_ANDROID) |
| 1087 // Now that the file thread has been started, start recording. | 1087 // Now that the file thread has been started, start recording. |
| 1088 MetricsService::SetExecutionPhase(MetricsService::START_METRICS_RECORDING); |
| 1088 StartMetricsRecording(); | 1089 StartMetricsRecording(); |
| 1089 #endif | 1090 #endif |
| 1090 | 1091 |
| 1091 // Create watchdog thread after creating all other threads because it will | 1092 // Create watchdog thread after creating all other threads because it will |
| 1092 // watch the other threads and they must be running. | 1093 // watch the other threads and they must be running. |
| 1093 browser_process_->watchdog_thread(); | 1094 browser_process_->watchdog_thread(); |
| 1094 | 1095 |
| 1095 // Do any initializating in the browser process that requires all threads | 1096 // Do any initializating in the browser process that requires all threads |
| 1096 // running. | 1097 // running. |
| 1097 browser_process_->PreMainMessageLoopRun(); | 1098 browser_process_->PreMainMessageLoopRun(); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1224 return content::RESULT_CODE_NORMAL_EXIT; | 1225 return content::RESULT_CODE_NORMAL_EXIT; |
| 1225 #endif // defined(OS_WIN) | 1226 #endif // defined(OS_WIN) |
| 1226 } | 1227 } |
| 1227 | 1228 |
| 1228 // Profile creation ---------------------------------------------------------- | 1229 // Profile creation ---------------------------------------------------------- |
| 1229 | 1230 |
| 1230 // Called before CreateProfile because creating the profile can trigger | 1231 // Called before CreateProfile because creating the profile can trigger |
| 1231 // calls to GetDefaultProfile(). | 1232 // calls to GetDefaultProfile(). |
| 1232 ProfileManager::AllowGetDefaultProfile(); | 1233 ProfileManager::AllowGetDefaultProfile(); |
| 1233 | 1234 |
| 1235 MetricsService::SetExecutionPhase(MetricsService::CREATE_PROFILE); |
| 1234 profile_ = CreateProfile(parameters(), user_data_dir_, parsed_command_line()); | 1236 profile_ = CreateProfile(parameters(), user_data_dir_, parsed_command_line()); |
| 1235 if (!profile_) | 1237 if (!profile_) |
| 1236 return content::RESULT_CODE_NORMAL_EXIT; | 1238 return content::RESULT_CODE_NORMAL_EXIT; |
| 1237 | 1239 |
| 1238 #if defined(ENABLE_BACKGROUND) | 1240 #if defined(ENABLE_BACKGROUND) |
| 1239 // Autoload any profiles which are running background apps. | 1241 // Autoload any profiles which are running background apps. |
| 1240 // TODO(rlp): Do this on a separate thread. See http://crbug.com/99075. | 1242 // TODO(rlp): Do this on a separate thread. See http://crbug.com/99075. |
| 1241 browser_process_->profile_manager()->AutoloadProfiles(); | 1243 browser_process_->profile_manager()->AutoloadProfiles(); |
| 1242 #endif | 1244 #endif |
| 1243 // Post-profile init --------------------------------------------------------- | 1245 // Post-profile init --------------------------------------------------------- |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1400 extensions::StartupHelper extension_startup_helper; | 1402 extensions::StartupHelper extension_startup_helper; |
| 1401 if (extension_startup_helper.UninstallExtension( | 1403 if (extension_startup_helper.UninstallExtension( |
| 1402 parsed_command_line(), profile_)) | 1404 parsed_command_line(), profile_)) |
| 1403 return content::RESULT_CODE_NORMAL_EXIT; | 1405 return content::RESULT_CODE_NORMAL_EXIT; |
| 1404 return chrome::RESULT_CODE_UNINSTALL_EXTENSION_ERROR; | 1406 return chrome::RESULT_CODE_UNINSTALL_EXTENSION_ERROR; |
| 1405 } | 1407 } |
| 1406 | 1408 |
| 1407 // Start watching for hangs during startup. We disarm this hang detector when | 1409 // Start watching for hangs during startup. We disarm this hang detector when |
| 1408 // ThreadWatcher takes over or when browser is shutdown or when | 1410 // ThreadWatcher takes over or when browser is shutdown or when |
| 1409 // startup_watcher_ is deleted. | 1411 // startup_watcher_ is deleted. |
| 1412 MetricsService::SetExecutionPhase(MetricsService::STARTUP_TIMEBOMB_ARM); |
| 1410 startup_watcher_->Arm(base::TimeDelta::FromSeconds(300)); | 1413 startup_watcher_->Arm(base::TimeDelta::FromSeconds(300)); |
| 1411 | 1414 |
| 1412 // On mobile, need for clean shutdown arises only when the application comes | 1415 // On mobile, need for clean shutdown arises only when the application comes |
| 1413 // to foreground (i.e. MetricsService::OnAppEnterForeground is called). | 1416 // to foreground (i.e. MetricsService::OnAppEnterForeground is called). |
| 1414 // http://crbug.com/179143 | 1417 // http://crbug.com/179143 |
| 1415 #if !defined(OS_ANDROID) | 1418 #if !defined(OS_ANDROID) |
| 1416 // Start watching for a hang. | 1419 // Start watching for a hang. |
| 1417 MetricsService::LogNeedForCleanShutdown(); | 1420 MetricsService::LogNeedForCleanShutdown(); |
| 1418 #endif | 1421 #endif |
| 1419 | 1422 |
| 1420 #if defined(ENABLE_FULL_PRINTING) | 1423 #if defined(ENABLE_FULL_PRINTING) |
| 1421 // Create the instance of the cloud print proxy service so that it can launch | 1424 // Create the instance of the cloud print proxy service so that it can launch |
| 1422 // the service process if needed. This is needed because the service process | 1425 // the service process if needed. This is needed because the service process |
| 1423 // might have shutdown because an update was available. | 1426 // might have shutdown because an update was available. |
| 1424 // TODO(torne): this should maybe be done with | 1427 // TODO(torne): this should maybe be done with |
| 1425 // BrowserContextKeyedServiceFactory::ServiceIsCreatedWithBrowserContext() | 1428 // BrowserContextKeyedServiceFactory::ServiceIsCreatedWithBrowserContext() |
| 1426 // instead? | 1429 // instead? |
| 1427 CloudPrintProxyServiceFactory::GetForProfile(profile_); | 1430 CloudPrintProxyServiceFactory::GetForProfile(profile_); |
| 1428 #endif | 1431 #endif |
| 1429 | 1432 |
| 1430 // Start watching all browser threads for responsiveness. | 1433 // Start watching all browser threads for responsiveness. |
| 1434 MetricsService::SetExecutionPhase(MetricsService::THREAD_WATCHER_START); |
| 1431 ThreadWatcherList::StartWatchingAll(parsed_command_line()); | 1435 ThreadWatcherList::StartWatchingAll(parsed_command_line()); |
| 1432 | 1436 |
| 1433 #if !defined(DISABLE_NACL) | 1437 #if !defined(DISABLE_NACL) |
| 1434 if (parsed_command_line().HasSwitch(switches::kPnaclDir)) { | 1438 if (parsed_command_line().HasSwitch(switches::kPnaclDir)) { |
| 1435 PathService::Override(chrome::DIR_PNACL_BASE, | 1439 PathService::Override(chrome::DIR_PNACL_BASE, |
| 1436 parsed_command_line().GetSwitchValuePath( | 1440 parsed_command_line().GetSwitchValuePath( |
| 1437 switches::kPnaclDir)); | 1441 switches::kPnaclDir)); |
| 1438 } | 1442 } |
| 1439 NaClProcessHost::EarlyStartup(new NaClBrowserDelegateImpl); | 1443 NaClProcessHost::EarlyStartup(new NaClBrowserDelegateImpl); |
| 1440 #endif | 1444 #endif |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1588 DCHECK_EQ(base::MessageLoop::TYPE_UI, base::MessageLoop::current()->type()); | 1592 DCHECK_EQ(base::MessageLoop::TYPE_UI, base::MessageLoop::current()->type()); |
| 1589 #if !defined(USE_AURA) && defined(TOOLKIT_VIEWS) | 1593 #if !defined(USE_AURA) && defined(TOOLKIT_VIEWS) |
| 1590 views::AcceleratorHandler accelerator_handler; | 1594 views::AcceleratorHandler accelerator_handler; |
| 1591 base::RunLoop run_loop(&accelerator_handler); | 1595 base::RunLoop run_loop(&accelerator_handler); |
| 1592 #else | 1596 #else |
| 1593 base::RunLoop run_loop; | 1597 base::RunLoop run_loop; |
| 1594 #endif | 1598 #endif |
| 1595 | 1599 |
| 1596 performance_monitor::PerformanceMonitor::GetInstance()->StartGatherCycle(); | 1600 performance_monitor::PerformanceMonitor::GetInstance()->StartGatherCycle(); |
| 1597 | 1601 |
| 1602 MetricsService::SetExecutionPhase(MetricsService::MAIN_MESSAGE_LOOP_RUN); |
| 1598 run_loop.Run(); | 1603 run_loop.Run(); |
| 1599 | 1604 |
| 1600 return true; | 1605 return true; |
| 1601 #endif | 1606 #endif |
| 1602 } | 1607 } |
| 1603 | 1608 |
| 1604 void ChromeBrowserMainParts::PostMainMessageLoopRun() { | 1609 void ChromeBrowserMainParts::PostMainMessageLoopRun() { |
| 1605 TRACE_EVENT0("startup", "ChromeBrowserMainParts::PostMainMessageLoopRun"); | 1610 TRACE_EVENT0("startup", "ChromeBrowserMainParts::PostMainMessageLoopRun"); |
| 1606 #if defined(OS_ANDROID) | 1611 #if defined(OS_ANDROID) |
| 1607 // Chrome on Android does not use default MessageLoop. It has its own | 1612 // Chrome on Android does not use default MessageLoop. It has its own |
| 1608 // Android specific MessageLoop | 1613 // Android specific MessageLoop |
| 1609 NOTREACHED(); | 1614 NOTREACHED(); |
| 1610 #else | 1615 #else |
| 1611 | 1616 |
| 1612 // Start watching for jank during shutdown. It gets disarmed when | 1617 // Start watching for jank during shutdown. It gets disarmed when |
| 1613 // |shutdown_watcher_| object is destructed. | 1618 // |shutdown_watcher_| object is destructed. |
| 1619 MetricsService::SetExecutionPhase(MetricsService::SHUTDOWN_TIMEBOMB_ARM); |
| 1614 shutdown_watcher_->Arm(base::TimeDelta::FromSeconds(300)); | 1620 shutdown_watcher_->Arm(base::TimeDelta::FromSeconds(300)); |
| 1615 | 1621 |
| 1616 // Disarm the startup hang detector time bomb if it is still Arm'ed. | 1622 // Disarm the startup hang detector time bomb if it is still Arm'ed. |
| 1617 startup_watcher_->Disarm(); | 1623 startup_watcher_->Disarm(); |
| 1618 | 1624 |
| 1619 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i) | 1625 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i) |
| 1620 chrome_extra_parts_[i]->PostMainMessageLoopRun(); | 1626 chrome_extra_parts_[i]->PostMainMessageLoopRun(); |
| 1621 | 1627 |
| 1622 // Some tests don't set parameters.ui_task, so they started translate | 1628 // Some tests don't set parameters.ui_task, so they started translate |
| 1623 // language fetch that was never completed so we need to cleanup here | 1629 // language fetch that was never completed so we need to cleanup here |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1663 chromeos::CrosSettings::Shutdown(); | 1669 chromeos::CrosSettings::Shutdown(); |
| 1664 #endif | 1670 #endif |
| 1665 #endif | 1671 #endif |
| 1666 } | 1672 } |
| 1667 | 1673 |
| 1668 // Public members: | 1674 // Public members: |
| 1669 | 1675 |
| 1670 void ChromeBrowserMainParts::AddParts(ChromeBrowserMainExtraParts* parts) { | 1676 void ChromeBrowserMainParts::AddParts(ChromeBrowserMainExtraParts* parts) { |
| 1671 chrome_extra_parts_.push_back(parts); | 1677 chrome_extra_parts_.push_back(parts); |
| 1672 } | 1678 } |
| OLD | NEW |