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

Unified Diff: chrome/browser/chrome_browser_main.cc

Issue 11636031: [Fixit Dec-2012] Refactor first_run, very few things should depend on whether the First Run senti... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: No first run import test on OS_CHROMEOS. Created 7 years, 12 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chrome_browser_main.h ('k') | chrome/browser/chrome_browser_main_extra_parts.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chrome_browser_main.cc
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index dd7f5fae3b42bea51ec3ee79fbf64aa8907fa59a..07e9876c979e7bb20da55cca58fe770ccc492df8 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -489,8 +489,7 @@ ChromeBrowserMainParts::ChromeBrowserMainParts(
profile_(NULL),
run_message_loop_(true),
notify_result_(ProcessSingleton::PROCESS_NONE),
- is_first_run_(false),
- first_run_ui_bypass_(false),
+ do_first_run_tasks_(false),
local_state_(NULL),
restart_last_session_(false) {
// If we're running tests (ui_task is non-null).
@@ -690,16 +689,26 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
<< "Must be able to get user data directory!";
#endif
+ // Whether this is First Run. |do_first_run_tasks_| should be prefered to this
+ // unless the desire is actually to know whether this is really First Run
+ // (i.e., even if --no-first-run is passed).
+ bool is_first_run = false;
// Android's first run is done in Java instead of native.
#if !defined(OS_ANDROID)
+
process_singleton_.reset(new ProcessSingleton(user_data_dir_));
// Ensure ProcessSingleton won't process messages too early. It will be
// unlocked in PostBrowserStart().
process_singleton_->Lock(NULL);
- is_first_run_ =
- (first_run::IsChromeFirstRun() ||
- parsed_command_line().HasSwitch(switches::kFirstRun)) &&
+ bool force_first_run =
+ parsed_command_line().HasSwitch(switches::kForceFirstRun);
+ bool force_skip_first_run_tasks =
+ (!force_first_run &&
+ parsed_command_line().HasSwitch(switches::kNoFirstRun));
+
+ is_first_run =
+ (force_first_run || first_run::IsChromeFirstRun()) &&
!ProfileManager::IsImportProcess(parsed_command_line());
#endif
@@ -733,7 +742,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
local_state_ = InitializeLocalState(local_state_task_runner,
parsed_command_line(),
- is_first_run_);
+ is_first_run);
// These members must be initialized before returning from this function.
master_prefs_.reset(new first_run::MasterPrefs);
@@ -800,29 +809,30 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
// On first run, we need to process the predictor preferences before the
// browser's profile_manager object is created, but after ResourceBundle
// is initialized.
- first_run_ui_bypass_ = false; // True to skip first run UI.
- if (is_first_run_) {
+ if (is_first_run) {
first_run::ProcessMasterPreferencesResult pmp_result =
first_run::ProcessMasterPreferences(user_data_dir_,
master_prefs_.get());
if (pmp_result == first_run::EULA_EXIT_NOW)
return chrome::RESULT_CODE_EULA_REFUSED;
- first_run_ui_bypass_ = (pmp_result == first_run::SKIP_FIRST_RUN);
-
- AddFirstRunNewTabs(browser_creator_.get(), master_prefs_->new_tabs);
-
- // If we are running in App mode, we do not want to show the importer
- // (first run) UI.
- if (!first_run_ui_bypass_ &&
- (parsed_command_line().HasSwitch(switches::kApp) ||
- parsed_command_line().HasSwitch(switches::kAppId) ||
- parsed_command_line().HasSwitch(switches::kNoFirstRun)))
- first_run_ui_bypass_ = true;
-
- // Create Sentinel if no-first-run argument is passed in.
- if (parsed_command_line().HasSwitch(switches::kNoFirstRun))
+ // Do first run tasks unless:
+ // - Explicitly forced not to by |force_skip_first_run_tasks| or
+ // |pmp_result|.
+ // - Running in App mode, where showing the importer (first run) UI is
+ // undesired.
+ do_first_run_tasks_ = (!force_skip_first_run_tasks &&
+ pmp_result != first_run::SKIP_FIRST_RUN_TASKS &&
+ !parsed_command_line().HasSwitch(switches::kApp) &&
+ !parsed_command_line().HasSwitch(switches::kAppId));
+
+ if (do_first_run_tasks_) {
+ AddFirstRunNewTabs(browser_creator_.get(), master_prefs_->new_tabs);
+ } else if (parsed_command_line().HasSwitch(switches::kNoFirstRun)) {
+ // Create the First Run beacon anyways if --no-first-run was passed on the
+ // command line.
first_run::CreateSentinel();
+ }
}
#endif
@@ -884,10 +894,6 @@ void ChromeBrowserMainParts::PreMainMessageLoopRun() {
// ... additional setup, including CreateProfile()
// PostProfileInit()
// ... additional setup
-// PreInteractiveFirstRunInit()
-// ... first_run::AutoImport()
-// PostInteractiveFirstRunInit()
-// ... additional setup
// PreBrowserStart()
// ... browser_creator_->Start (OR parameters().ui_task->Run())
// PostBrowserStart()
@@ -903,16 +909,6 @@ void ChromeBrowserMainParts::PostProfileInit() {
chrome_extra_parts_[i]->PostProfileInit();
}
-void ChromeBrowserMainParts::PreInteractiveFirstRunInit() {
- for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
- chrome_extra_parts_[i]->PreInteractiveFirstRunInit();
-}
-
-void ChromeBrowserMainParts::PostInteractiveFirstRunInit() {
- for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
- chrome_extra_parts_[i]->PostInteractiveFirstRunInit();
-}
-
void ChromeBrowserMainParts::PreBrowserStart() {
for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
chrome_extra_parts_[i]->PreBrowserStart();
@@ -1122,7 +1118,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
// Profile creation ----------------------------------------------------------
- if (is_first_run_) {
+ if (do_first_run_tasks_) {
// Warn the ProfileManager that an import process will run, possibly
// locking the WebDataService directory of the next Profile created.
browser_process_->profile_manager()->SetWillImport();
@@ -1192,31 +1188,14 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
// Note that this be done _after_ the PrefService is initialized and all
// preferences are registered, since some of the code that the importer
// touches reads preferences.
- if (is_first_run_) {
- PreInteractiveFirstRunInit();
-
- if (!first_run_ui_bypass_ ||
- parsed_command_line().HasSwitch(switches::kFirstRunForceImport)) {
- first_run::AutoImport(profile_,
- master_prefs_->homepage_defined,
- master_prefs_->do_import_items,
- master_prefs_->dont_import_items,
- process_singleton_.get());
- first_run::DoFirstRunTasks(profile_, master_prefs_->make_chrome_default);
-#if defined(OS_POSIX) && !defined(OS_CHROMEOS)
- // TODO(thakis): Look into moving this POSIX-specific section to
- // ChromeBrowserMainPartsPosix::PostInteractiveFirstRunInit().
-
- // On Windows, the download is tagged with enable/disable stats so there
- // is no need for this code.
-
- // If stats reporting was turned on by the first run dialog then toggle
- // the pref.
- if (GoogleUpdateSettings::GetCollectStatsConsent())
- local_state_->SetBoolean(prefs::kMetricsReportingEnabled, true);
-#endif // OS_POSIX && !OS_CHROMEOS
- } // if (!first_run_ui_bypass_)
- PostInteractiveFirstRunInit();
+ if (do_first_run_tasks_) {
+ first_run::AutoImport(profile_,
+ master_prefs_->homepage_defined,
+ master_prefs_->do_import_items,
+ master_prefs_->dont_import_items,
+ process_singleton_.get());
+ // Note: this can pop the first run consent dialog on linux.
+ first_run::DoPostImportTasks(profile_, master_prefs_->make_chrome_default);
browser_process_->profile_manager()->OnImportFinished(profile_);
@@ -1226,7 +1205,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
} else {
browser_creator_->set_is_default_browser_dialog_suppressed(true);
}
- } // if (is_first_run_)
+ } // if (do_first_run_tasks_)
#endif // !defined(OS_ANDROID)
#if defined(OS_WIN)
@@ -1260,12 +1239,12 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
// file thread to be run sometime later. If this is the first run we record
// the installation event.
PrefService* pref_service = profile_->GetPrefs();
- int ping_delay = is_first_run_ ? master_prefs_->ping_delay :
+ int ping_delay = do_first_run_tasks_ ? master_prefs_->ping_delay :
pref_service->GetInteger(first_run::GetPingDelayPrefName().c_str());
// Negative ping delay means to send ping immediately after a first search is
// recorded.
RLZTracker::InitRlzFromProfileDelayed(
- profile_, is_first_run_, ping_delay < 0,
+ profile_, do_first_run_tasks_, ping_delay < 0,
base::TimeDelta::FromMilliseconds(abs(ping_delay)));
#endif // defined(ENABLE_RLZ) && !defined(OS_CHROMEOS)
@@ -1362,7 +1341,7 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() {
#if defined(OS_WIN)
// We check this here because if the profile is OTR (chromeos possibility)
// it won't still be accessible after browser is destroyed.
- record_search_engine_ = is_first_run_ && !profile_->IsOffTheRecord();
+ record_search_engine_ = do_first_run_tasks_ && !profile_->IsOffTheRecord();
#endif
// Create the instance of the cloud print proxy service so that it can launch
« no previous file with comments | « chrome/browser/chrome_browser_main.h ('k') | chrome/browser/chrome_browser_main_extra_parts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698