| 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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 // CRLSetFetcher attempts to load a CRL set from either the local disk or | 459 // CRLSetFetcher attempts to load a CRL set from either the local disk or |
| 460 // network. | 460 // network. |
| 461 if (!command_line.HasSwitch(switches::kDisableCRLSets)) | 461 if (!command_line.HasSwitch(switches::kDisableCRLSets)) |
| 462 g_browser_process->crl_set_fetcher()->StartInitialLoad(cus); | 462 g_browser_process->crl_set_fetcher()->StartInitialLoad(cus); |
| 463 | 463 |
| 464 RegisterPnaclComponent(cus, command_line); | 464 RegisterPnaclComponent(cus, command_line); |
| 465 | 465 |
| 466 cus->Start(); | 466 cus->Start(); |
| 467 } | 467 } |
| 468 | 468 |
| 469 #if !defined(OS_ANDROID) |
| 469 bool ProcessSingletonNotificationCallback( | 470 bool ProcessSingletonNotificationCallback( |
| 470 const CommandLine& command_line, | 471 const CommandLine& command_line, |
| 471 const base::FilePath& current_directory) { | 472 const base::FilePath& current_directory) { |
| 472 // Drop the request if the browser process is already in shutdown path. | 473 // Drop the request if the browser process is already in shutdown path. |
| 473 if (!g_browser_process || g_browser_process->IsShuttingDown()) | 474 if (!g_browser_process || g_browser_process->IsShuttingDown()) |
| 474 return false; | 475 return false; |
| 475 | 476 |
| 476 g_browser_process->PlatformSpecificCommandLineProcessing(command_line); | 477 g_browser_process->PlatformSpecificCommandLineProcessing(command_line); |
| 477 | 478 |
| 478 // TODO(erikwright): Consider removing this - AFAIK it is no longer used. | 479 // TODO(erikwright): Consider removing this - AFAIK it is no longer used. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 498 | 499 |
| 499 base::FilePath user_data_dir = | 500 base::FilePath user_data_dir = |
| 500 g_browser_process->profile_manager()->user_data_dir(); | 501 g_browser_process->profile_manager()->user_data_dir(); |
| 501 base::FilePath startup_profile_dir = | 502 base::FilePath startup_profile_dir = |
| 502 GetStartupProfilePath(user_data_dir, command_line); | 503 GetStartupProfilePath(user_data_dir, command_line); |
| 503 | 504 |
| 504 StartupBrowserCreator::ProcessCommandLineAlreadyRunning( | 505 StartupBrowserCreator::ProcessCommandLineAlreadyRunning( |
| 505 command_line, current_directory, startup_profile_dir); | 506 command_line, current_directory, startup_profile_dir); |
| 506 return true; | 507 return true; |
| 507 } | 508 } |
| 509 #endif |
| 508 | 510 |
| 509 void LaunchDevToolsHandlerIfNeeded(Profile* profile, | 511 void LaunchDevToolsHandlerIfNeeded(Profile* profile, |
| 510 const CommandLine& command_line) { | 512 const CommandLine& command_line) { |
| 511 if (command_line.HasSwitch(::switches::kRemoteDebuggingPort)) { | 513 if (command_line.HasSwitch(::switches::kRemoteDebuggingPort)) { |
| 512 std::string port_str = | 514 std::string port_str = |
| 513 command_line.GetSwitchValueASCII(::switches::kRemoteDebuggingPort); | 515 command_line.GetSwitchValueASCII(::switches::kRemoteDebuggingPort); |
| 514 int port; | 516 int port; |
| 515 if (base::StringToInt(port_str, &port) && port > 0 && port < 65535) { | 517 if (base::StringToInt(port_str, &port) && port > 0 && port < 65535) { |
| 516 std::string frontend_str; | 518 std::string frontend_str; |
| 517 if (command_line.HasSwitch(::switches::kRemoteDebuggingFrontend)) { | 519 if (command_line.HasSwitch(::switches::kRemoteDebuggingFrontend)) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 | 575 |
| 574 ChromeBrowserMainParts::ChromeBrowserMainParts( | 576 ChromeBrowserMainParts::ChromeBrowserMainParts( |
| 575 const content::MainFunctionParams& parameters) | 577 const content::MainFunctionParams& parameters) |
| 576 : parameters_(parameters), | 578 : parameters_(parameters), |
| 577 parsed_command_line_(parameters.command_line), | 579 parsed_command_line_(parameters.command_line), |
| 578 result_code_(content::RESULT_CODE_NORMAL_EXIT), | 580 result_code_(content::RESULT_CODE_NORMAL_EXIT), |
| 579 startup_watcher_(new StartupTimeBomb()), | 581 startup_watcher_(new StartupTimeBomb()), |
| 580 shutdown_watcher_(new ShutdownWatcherHelper()), | 582 shutdown_watcher_(new ShutdownWatcherHelper()), |
| 581 startup_timer_(new performance_monitor::StartupTimer()), | 583 startup_timer_(new performance_monitor::StartupTimer()), |
| 582 browser_field_trials_(parameters.command_line), | 584 browser_field_trials_(parameters.command_line), |
| 585 #if !defined(OS_ANDROID) |
| 586 startup_lock_(base::Bind(&ProcessSingletonNotificationCallback)), |
| 587 modal_dialog_lock_(startup_lock_.AsNotificationCallback()), |
| 588 #endif |
| 583 record_search_engine_(false), | 589 record_search_engine_(false), |
| 584 translate_manager_(NULL), | 590 translate_manager_(NULL), |
| 585 profile_(NULL), | 591 profile_(NULL), |
| 586 run_message_loop_(true), | 592 run_message_loop_(true), |
| 587 notify_result_(ProcessSingleton::PROCESS_NONE), | 593 notify_result_(ProcessSingleton::PROCESS_NONE), |
| 588 do_first_run_tasks_(false), | 594 do_first_run_tasks_(false), |
| 589 local_state_(NULL), | 595 local_state_(NULL), |
| 590 restart_last_session_(false) { | 596 restart_last_session_(false) { |
| 591 // If we're running tests (ui_task is non-null). | 597 // If we're running tests (ui_task is non-null). |
| 592 if (parameters.ui_task) { | 598 if (parameters.ui_task) { |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 786 run_message_loop_ = false; | 792 run_message_loop_ = false; |
| 787 user_data_dir_ = chrome::GetUserDataDir(parameters()); | 793 user_data_dir_ = chrome::GetUserDataDir(parameters()); |
| 788 | 794 |
| 789 // Whether this is First Run. |do_first_run_tasks_| should be prefered to this | 795 // Whether this is First Run. |do_first_run_tasks_| should be prefered to this |
| 790 // unless the desire is actually to know whether this is really First Run | 796 // unless the desire is actually to know whether this is really First Run |
| 791 // (i.e., even if --no-first-run is passed). | 797 // (i.e., even if --no-first-run is passed). |
| 792 bool is_first_run = false; | 798 bool is_first_run = false; |
| 793 // Android's first run is done in Java instead of native. | 799 // Android's first run is done in Java instead of native. |
| 794 #if !defined(OS_ANDROID) | 800 #if !defined(OS_ANDROID) |
| 795 | 801 |
| 802 // Pass command-line invocations through modal_dialog_lock_ and |
| 803 // startup_lock_ before handling them ourselves. |
| 796 process_singleton_.reset(new ProcessSingleton( | 804 process_singleton_.reset(new ProcessSingleton( |
| 797 user_data_dir_, base::Bind(&ProcessSingletonNotificationCallback))); | 805 user_data_dir_, modal_dialog_lock_.AsNotificationCallback())); |
| 798 // Ensure ProcessSingleton won't process messages too early. It will be | |
| 799 // unlocked in PostBrowserStart(). | |
| 800 process_singleton_->Lock(NULL); | |
| 801 | 806 |
| 802 bool force_first_run = | 807 bool force_first_run = |
| 803 parsed_command_line().HasSwitch(switches::kForceFirstRun); | 808 parsed_command_line().HasSwitch(switches::kForceFirstRun); |
| 804 bool force_skip_first_run_tasks = | 809 bool force_skip_first_run_tasks = |
| 805 (!force_first_run && | 810 (!force_first_run && |
| 806 parsed_command_line().HasSwitch(switches::kNoFirstRun)); | 811 parsed_command_line().HasSwitch(switches::kNoFirstRun)); |
| 807 | 812 |
| 808 is_first_run = | 813 is_first_run = |
| 809 (force_first_run || first_run::IsChromeFirstRun()) && | 814 (force_first_run || first_run::IsChromeFirstRun()) && |
| 810 !ProfileManager::IsImportProcess(parsed_command_line()); | 815 !ProfileManager::IsImportProcess(parsed_command_line()); |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 void ChromeBrowserMainParts::PostBrowserStart() { | 1045 void ChromeBrowserMainParts::PostBrowserStart() { |
| 1041 #if !defined(OS_ANDROID) | 1046 #if !defined(OS_ANDROID) |
| 1042 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kVisitURLs)) | 1047 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kVisitURLs)) |
| 1043 RunPageCycler(); | 1048 RunPageCycler(); |
| 1044 #endif | 1049 #endif |
| 1045 | 1050 |
| 1046 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i) | 1051 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i) |
| 1047 chrome_extra_parts_[i]->PostBrowserStart(); | 1052 chrome_extra_parts_[i]->PostBrowserStart(); |
| 1048 #if !defined(OS_ANDROID) | 1053 #if !defined(OS_ANDROID) |
| 1049 // Allow ProcessSingleton to process messages. | 1054 // Allow ProcessSingleton to process messages. |
| 1050 process_singleton_->Unlock(); | 1055 startup_lock_.Unlock(); |
| 1051 #endif | 1056 #endif |
| 1052 } | 1057 } |
| 1053 | 1058 |
| 1054 #if !defined(OS_ANDROID) | 1059 #if !defined(OS_ANDROID) |
| 1055 void ChromeBrowserMainParts::RunPageCycler() { | 1060 void ChromeBrowserMainParts::RunPageCycler() { |
| 1056 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 1061 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| 1057 // We assume a native desktop for tests, but we will need to find a way to | 1062 // We assume a native desktop for tests, but we will need to find a way to |
| 1058 // get the proper host desktop type once we start running these tests in ASH. | 1063 // get the proper host desktop type once we start running these tests in ASH. |
| 1059 Browser* browser = chrome::FindBrowserWithProfile( | 1064 Browser* browser = chrome::FindBrowserWithProfile( |
| 1060 profile_, chrome::HOST_DESKTOP_TYPE_NATIVE); | 1065 profile_, chrome::HOST_DESKTOP_TYPE_NATIVE); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1215 std::string try_chrome = | 1220 std::string try_chrome = |
| 1216 parsed_command_line().GetSwitchValueASCII(switches::kTryChromeAgain); | 1221 parsed_command_line().GetSwitchValueASCII(switches::kTryChromeAgain); |
| 1217 if (!try_chrome.empty()) { | 1222 if (!try_chrome.empty()) { |
| 1218 #if defined(OS_WIN) | 1223 #if defined(OS_WIN) |
| 1219 // Setup.exe has determined that we need to run a retention experiment | 1224 // Setup.exe has determined that we need to run a retention experiment |
| 1220 // and has lauched chrome to show the experiment UI. It is guaranteed that | 1225 // and has lauched chrome to show the experiment UI. It is guaranteed that |
| 1221 // no other Chrome is currently running as the process singleton was | 1226 // no other Chrome is currently running as the process singleton was |
| 1222 // sucessfully grabbed above. | 1227 // sucessfully grabbed above. |
| 1223 int try_chrome_int; | 1228 int try_chrome_int; |
| 1224 base::StringToInt(try_chrome, &try_chrome_int); | 1229 base::StringToInt(try_chrome, &try_chrome_int); |
| 1225 TryChromeDialogView::Result answer = | 1230 TryChromeDialogView::Result answer = TryChromeDialogView::Show( |
| 1226 TryChromeDialogView::Show(try_chrome_int, process_singleton_.get()); | 1231 try_chrome_int, |
| 1232 base::Bind( |
| 1233 &ProcessSingletonModalDialogLock::SetActiveModalDialog, |
| 1234 base::Unretained(&modal_dialog_lock_))); |
| 1227 if (answer == TryChromeDialogView::NOT_NOW) | 1235 if (answer == TryChromeDialogView::NOT_NOW) |
| 1228 return chrome::RESULT_CODE_NORMAL_EXIT_CANCEL; | 1236 return chrome::RESULT_CODE_NORMAL_EXIT_CANCEL; |
| 1229 if (answer == TryChromeDialogView::UNINSTALL_CHROME) | 1237 if (answer == TryChromeDialogView::UNINSTALL_CHROME) |
| 1230 return chrome::RESULT_CODE_NORMAL_EXIT_EXP2; | 1238 return chrome::RESULT_CODE_NORMAL_EXIT_EXP2; |
| 1231 // At this point the user is willing to try chrome again. | 1239 // At this point the user is willing to try chrome again. |
| 1232 if (answer == TryChromeDialogView::TRY_CHROME_AS_DEFAULT) { | 1240 if (answer == TryChromeDialogView::TRY_CHROME_AS_DEFAULT) { |
| 1233 // Only set in the unattended case, the interactive case is Windows 8. | 1241 // Only set in the unattended case, the interactive case is Windows 8. |
| 1234 if (ShellIntegration::CanSetAsDefaultBrowser() == | 1242 if (ShellIntegration::CanSetAsDefaultBrowser() == |
| 1235 ShellIntegration::SET_DEFAULT_UNATTENDED) | 1243 ShellIntegration::SET_DEFAULT_UNATTENDED) |
| 1236 ShellIntegration::SetAsDefaultBrowser(); | 1244 ShellIntegration::SetAsDefaultBrowser(); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1318 #if !defined(OS_ANDROID) | 1326 #if !defined(OS_ANDROID) |
| 1319 // Show the First Run UI if this is the first time Chrome has been run on | 1327 // Show the First Run UI if this is the first time Chrome has been run on |
| 1320 // this computer, or we're being compelled to do so by a command line flag. | 1328 // this computer, or we're being compelled to do so by a command line flag. |
| 1321 // Note that this be done _after_ the PrefService is initialized and all | 1329 // Note that this be done _after_ the PrefService is initialized and all |
| 1322 // preferences are registered, since some of the code that the importer | 1330 // preferences are registered, since some of the code that the importer |
| 1323 // touches reads preferences. | 1331 // touches reads preferences. |
| 1324 if (do_first_run_tasks_) { | 1332 if (do_first_run_tasks_) { |
| 1325 first_run::AutoImport(profile_, | 1333 first_run::AutoImport(profile_, |
| 1326 master_prefs_->homepage_defined, | 1334 master_prefs_->homepage_defined, |
| 1327 master_prefs_->do_import_items, | 1335 master_prefs_->do_import_items, |
| 1328 master_prefs_->dont_import_items, | 1336 master_prefs_->dont_import_items); |
| 1329 process_singleton_.get()); | |
| 1330 // Note: this can pop the first run consent dialog on linux. | 1337 // Note: this can pop the first run consent dialog on linux. |
| 1331 first_run::DoPostImportTasks(profile_, master_prefs_->make_chrome_default); | 1338 first_run::DoPostImportTasks(profile_, master_prefs_->make_chrome_default); |
| 1332 | 1339 |
| 1333 browser_process_->profile_manager()->OnImportFinished(profile_); | 1340 browser_process_->profile_manager()->OnImportFinished(profile_); |
| 1334 | 1341 |
| 1335 if (!master_prefs_->suppress_first_run_default_browser_prompt) { | 1342 if (!master_prefs_->suppress_first_run_default_browser_prompt) { |
| 1336 browser_creator_->set_show_main_browser_window( | 1343 browser_creator_->set_show_main_browser_window( |
| 1337 !chrome::ShowFirstRunDefaultBrowserPrompt(profile_)); | 1344 !chrome::ShowFirstRunDefaultBrowserPrompt(profile_)); |
| 1338 } else { | 1345 } else { |
| 1339 browser_creator_->set_is_default_browser_dialog_suppressed(true); | 1346 browser_creator_->set_is_default_browser_dialog_suppressed(true); |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1792 if (base::win::GetVersion() <= base::win::VERSION_XP) | 1799 if (base::win::GetVersion() <= base::win::VERSION_XP) |
| 1793 uma_name += "_XP"; | 1800 uma_name += "_XP"; |
| 1794 | 1801 |
| 1795 uma_name += "_PreRead_"; | 1802 uma_name += "_PreRead_"; |
| 1796 uma_name += pre_read_percentage; | 1803 uma_name += pre_read_percentage; |
| 1797 AddPreReadHistogramTime(uma_name.c_str(), time); | 1804 AddPreReadHistogramTime(uma_name.c_str(), time); |
| 1798 } | 1805 } |
| 1799 #endif | 1806 #endif |
| 1800 #endif | 1807 #endif |
| 1801 } | 1808 } |
| OLD | NEW |