OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <windows.h> | 5 #include <windows.h> |
6 #include <shellapi.h> | 6 #include <shellapi.h> |
7 | 7 |
8 #include <algorithm> | 8 #include <algorithm> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "chrome/browser/first_run.h" | 32 #include "chrome/browser/first_run.h" |
33 #include "chrome/browser/jankometer.h" | 33 #include "chrome/browser/jankometer.h" |
34 #include "chrome/browser/metrics_service.h" | 34 #include "chrome/browser/metrics_service.h" |
35 #include "chrome/browser/net/dns_global.h" | 35 #include "chrome/browser/net/dns_global.h" |
36 #include "chrome/browser/net/sdch_dictionary_fetcher.h" | 36 #include "chrome/browser/net/sdch_dictionary_fetcher.h" |
37 #include "chrome/browser/plugin_service.h" | 37 #include "chrome/browser/plugin_service.h" |
38 #include "chrome/browser/printing/print_job_manager.h" | 38 #include "chrome/browser/printing/print_job_manager.h" |
39 #include "chrome/browser/rlz/rlz.h" | 39 #include "chrome/browser/rlz/rlz.h" |
40 #include "chrome/browser/shell_integration.h" | 40 #include "chrome/browser/shell_integration.h" |
41 #include "chrome/browser/url_fixer_upper.h" | 41 #include "chrome/browser/url_fixer_upper.h" |
| 42 #include "chrome/browser/user_data_manager.h" |
42 #include "chrome/browser/user_metrics.h" | 43 #include "chrome/browser/user_metrics.h" |
43 #include "chrome/browser/views/user_data_dir_dialog.h" | 44 #include "chrome/browser/views/user_data_dir_dialog.h" |
44 #include "chrome/common/chrome_constants.h" | 45 #include "chrome/common/chrome_constants.h" |
45 #include "chrome/common/chrome_paths.h" | 46 #include "chrome/common/chrome_paths.h" |
46 #include "chrome/common/chrome_switches.h" | 47 #include "chrome/common/chrome_switches.h" |
47 #include "chrome/common/env_vars.h" | 48 #include "chrome/common/env_vars.h" |
48 #include "chrome/common/jstemplate_builder.h" | 49 #include "chrome/common/jstemplate_builder.h" |
49 #include "chrome/common/l10n_util.h" | 50 #include "chrome/common/l10n_util.h" |
50 #include "chrome/common/resource_bundle.h" | 51 #include "chrome/common/resource_bundle.h" |
51 #include "chrome/common/pref_names.h" | 52 #include "chrome/common/pref_names.h" |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 // instantiated (as it makes a URLRequest and we don't have an IO thread, | 317 // instantiated (as it makes a URLRequest and we don't have an IO thread, |
317 // see bug #1292702). | 318 // see bug #1292702). |
318 browser_process.reset(new FirstRunBrowserProcess(parsed_command_line)); | 319 browser_process.reset(new FirstRunBrowserProcess(parsed_command_line)); |
319 } else { | 320 } else { |
320 browser_process.reset(new BrowserProcessImpl(parsed_command_line)); | 321 browser_process.reset(new BrowserProcessImpl(parsed_command_line)); |
321 } | 322 } |
322 | 323 |
323 // BrowserProcessImpl's constructor should set g_browser_process. | 324 // BrowserProcessImpl's constructor should set g_browser_process. |
324 DCHECK(g_browser_process); | 325 DCHECK(g_browser_process); |
325 | 326 |
| 327 std::wstring local_state_path; |
| 328 PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path); |
| 329 bool local_state_file_exists = file_util::PathExists(local_state_path); |
| 330 |
326 // Load local state. This includes the application locale so we know which | 331 // Load local state. This includes the application locale so we know which |
327 // locale dll to load. | 332 // locale dll to load. |
328 PrefService* local_state = browser_process->local_state(); | 333 PrefService* local_state = browser_process->local_state(); |
329 DCHECK(local_state); | 334 DCHECK(local_state); |
330 | 335 |
331 bool is_first_run = FirstRun::IsChromeFirstRun() || | 336 bool is_first_run = FirstRun::IsChromeFirstRun() || |
332 parsed_command_line.HasSwitch(switches::kFirstRun); | 337 parsed_command_line.HasSwitch(switches::kFirstRun); |
333 bool first_run_ui_bypass = false; | 338 bool first_run_ui_bypass = false; |
334 | 339 |
335 // Initialize ResourceBundle which handles files loaded from external | 340 // Initialize ResourceBundle which handles files loaded from external |
(...skipping 16 matching lines...) Expand all Loading... |
352 first_run_ui_bypass = | 357 first_run_ui_bypass = |
353 !FirstRun::ProcessMasterPreferences(user_data_dir, | 358 !FirstRun::ProcessMasterPreferences(user_data_dir, |
354 std::wstring(), NULL); | 359 std::wstring(), NULL); |
355 | 360 |
356 // If we are running in App mode, we do not want to show the importer | 361 // If we are running in App mode, we do not want to show the importer |
357 // (first run) UI. | 362 // (first run) UI. |
358 if (!first_run_ui_bypass && parsed_command_line.HasSwitch(switches::kApp)) | 363 if (!first_run_ui_bypass && parsed_command_line.HasSwitch(switches::kApp)) |
359 first_run_ui_bypass = true; | 364 first_run_ui_bypass = true; |
360 } | 365 } |
361 | 366 |
| 367 // If the local state file for the current profile doesn't exist and the |
| 368 // parent profile command line flag is present, then we should inherit some |
| 369 // local state from the parent profile. |
| 370 // Checking that the local state file for the current profile doesn't exist |
| 371 // is the most robust way to determine whether we need to inherit or not |
| 372 // since the parent profile command line flag can be present even when the |
| 373 // current profile is not a new one, and in that case we do not want to |
| 374 // inherit and reset the user's setting. |
| 375 if (!local_state_file_exists && |
| 376 parsed_command_line.HasSwitch(switches::kParentProfile)) { |
| 377 std::wstring parent_profile = |
| 378 parsed_command_line.GetSwitchValue(switches::kParentProfile); |
| 379 PrefService parent_local_state(parent_profile); |
| 380 parent_local_state.RegisterStringPref(prefs::kApplicationLocale, |
| 381 std::wstring()); |
| 382 // Right now, we only inherit the locale setting from the parent profile. |
| 383 local_state->SetString( |
| 384 prefs::kApplicationLocale, |
| 385 parent_local_state.GetString(prefs::kApplicationLocale)); |
| 386 } |
| 387 |
362 ResourceBundle::InitSharedInstance( | 388 ResourceBundle::InitSharedInstance( |
363 local_state->GetString(prefs::kApplicationLocale)); | 389 local_state->GetString(prefs::kApplicationLocale)); |
364 // We only load the theme dll in the browser process. | 390 // We only load the theme dll in the browser process. |
365 ResourceBundle::GetSharedInstance().LoadThemeResources(); | 391 ResourceBundle::GetSharedInstance().LoadThemeResources(); |
366 | 392 |
367 if (!parsed_command_line.HasSwitch(switches::kNoErrorDialogs)) { | 393 if (!parsed_command_line.HasSwitch(switches::kNoErrorDialogs)) { |
368 // Display a warning if the user is running windows 2000. | 394 // Display a warning if the user is running windows 2000. |
369 CheckForWin2000(); | 395 CheckForWin2000(); |
370 } | 396 } |
371 | 397 |
372 // Initialize histogram statistics gathering system. | 398 // Initialize histogram statistics gathering system. |
373 StatisticsRecorder statistics; | 399 StatisticsRecorder statistics; |
374 | 400 |
375 // Start tracking the creation and deletion of Task instances | 401 // Start tracking the creation and deletion of Task instances |
376 bool tracking_objects = false; | 402 bool tracking_objects = false; |
377 #ifdef TRACK_ALL_TASK_OBJECTS | 403 #ifdef TRACK_ALL_TASK_OBJECTS |
378 tracking_objects = tracked_objects::ThreadData::StartTracking(true); | 404 tracking_objects = tracked_objects::ThreadData::StartTracking(true); |
379 #endif | 405 #endif |
380 | 406 |
| 407 // Initialize the shared instance of user data manager. |
| 408 UserDataManager::Create(); |
| 409 |
381 // Try to create/load the profile. | 410 // Try to create/load the profile. |
382 ProfileManager* profile_manager = browser_process->profile_manager(); | 411 ProfileManager* profile_manager = browser_process->profile_manager(); |
383 Profile* profile = profile_manager->GetDefaultProfile(user_data_dir); | 412 Profile* profile = profile_manager->GetDefaultProfile(user_data_dir); |
384 if (!profile) { | 413 if (!profile) { |
385 user_data_dir = UserDataDirDialog::RunUserDataDirDialog(user_data_dir); | 414 user_data_dir = UserDataDirDialog::RunUserDataDirDialog(user_data_dir); |
386 // Flush the message loop which lets the UserDataDirDialog close. | 415 // Flush the message loop which lets the UserDataDirDialog close. |
387 MessageLoop::current()->Run(); | 416 MessageLoop::current()->Run(); |
388 | 417 |
389 ResourceBundle::CleanupSharedInstance(); | 418 ResourceBundle::CleanupSharedInstance(); |
390 | 419 |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 // The following should ONLY be called when in single threaded mode. It is | 629 // The following should ONLY be called when in single threaded mode. It is |
601 // unsafe to do this cleanup if other threads are still active. | 630 // unsafe to do this cleanup if other threads are still active. |
602 // It is also very unnecessary, so I'm only doing this in debug to satisfy | 631 // It is also very unnecessary, so I'm only doing this in debug to satisfy |
603 // purify. | 632 // purify. |
604 if (tracking_objects) | 633 if (tracking_objects) |
605 tracked_objects::ThreadData::ShutdownSingleThreadedCleanup(); | 634 tracked_objects::ThreadData::ShutdownSingleThreadedCleanup(); |
606 #endif // NDEBUG | 635 #endif // NDEBUG |
607 | 636 |
608 return result_code; | 637 return result_code; |
609 } | 638 } |
OLD | NEW |