| 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 "chrome/browser/browser_init.h" | 5 #include "chrome/browser/browser_init.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/event_recorder.h" | 9 #include "base/event_recorder.h" |
| 10 #include "base/histogram.h" | 10 #include "base/histogram.h" |
| 11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
| 12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
| 13 #include "base/sys_info.h" | 13 #include "base/sys_info.h" |
| 14 #include "chrome/browser/autocomplete/autocomplete.h" | 14 #include "chrome/browser/autocomplete/autocomplete.h" |
| 15 #include "chrome/browser/automation/automation_provider.h" |
| 16 #include "chrome/browser/automation/automation_provider_list.h" |
| 15 #include "chrome/browser/browser_list.h" | 17 #include "chrome/browser/browser_list.h" |
| 16 #include "chrome/browser/browser_process.h" | 18 #include "chrome/browser/browser_process.h" |
| 17 #include "chrome/browser/extensions/extensions_service.h" | 19 #include "chrome/browser/extensions/extensions_service.h" |
| 18 #include "chrome/browser/net/dns_global.h" | 20 #include "chrome/browser/net/dns_global.h" |
| 19 #include "chrome/browser/profile.h" | 21 #include "chrome/browser/profile.h" |
| 20 #include "chrome/browser/renderer_host/render_process_host.h" | 22 #include "chrome/browser/renderer_host/render_process_host.h" |
| 21 #include "chrome/browser/search_engines/template_url_model.h" | 23 #include "chrome/browser/search_engines/template_url_model.h" |
| 22 #include "chrome/browser/session_startup_pref.h" | 24 #include "chrome/browser/session_startup_pref.h" |
| 23 #include "chrome/browser/sessions/session_restore.h" | 25 #include "chrome/browser/sessions/session_restore.h" |
| 24 #include "chrome/browser/tab_contents/infobar_delegate.h" | 26 #include "chrome/browser/tab_contents/infobar_delegate.h" |
| 25 #include "chrome/browser/tab_contents/navigation_controller.h" | 27 #include "chrome/browser/tab_contents/navigation_controller.h" |
| 26 #include "chrome/browser/net/url_fixer_upper.h" | 28 #include "chrome/browser/net/url_fixer_upper.h" |
| 27 #include "chrome/common/chrome_constants.h" | 29 #include "chrome/common/chrome_constants.h" |
| 28 #include "chrome/common/chrome_paths.h" | 30 #include "chrome/common/chrome_paths.h" |
| 29 #include "chrome/common/chrome_switches.h" | 31 #include "chrome/common/chrome_switches.h" |
| 30 #include "chrome/common/l10n_util.h" | 32 #include "chrome/common/l10n_util.h" |
| 31 #include "chrome/common/pref_names.h" | 33 #include "chrome/common/pref_names.h" |
| 32 #include "chrome/common/pref_service.h" | 34 #include "chrome/common/pref_service.h" |
| 33 #include "chrome/common/result_codes.h" | 35 #include "chrome/common/result_codes.h" |
| 34 #include "net/base/cookie_monster.h" | 36 #include "net/base/cookie_monster.h" |
| 35 #include "webkit/glue/webkit_glue.h" | 37 #include "webkit/glue/webkit_glue.h" |
| 36 | 38 |
| 37 #if defined(OS_WIN) | 39 #if defined(OS_WIN) |
| 38 | 40 |
| 39 #include "base/win_util.h" | 41 #include "base/win_util.h" |
| 40 #include "chrome/browser/automation/automation_provider.h" | |
| 41 #include "chrome/browser/automation/automation_provider_list.h" | |
| 42 #include "chrome/common/resource_bundle.h" | 42 #include "chrome/common/resource_bundle.h" |
| 43 #include "grit/chromium_strings.h" | 43 #include "grit/chromium_strings.h" |
| 44 #include "grit/generated_resources.h" | 44 #include "grit/generated_resources.h" |
| 45 #include "grit/locale_settings.h" | 45 #include "grit/locale_settings.h" |
| 46 #include "grit/theme_resources.h" | 46 #include "grit/theme_resources.h" |
| 47 | 47 |
| 48 #endif | 48 #endif |
| 49 | 49 |
| 50 namespace { | 50 namespace { |
| 51 | 51 |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 const std::wstring tab_count_string = | 438 const std::wstring tab_count_string = |
| 439 command_line.GetSwitchValue(switches::kTabCountToLoadOnSessionRestore); | 439 command_line.GetSwitchValue(switches::kTabCountToLoadOnSessionRestore); |
| 440 if (!tab_count_string.empty()) { | 440 if (!tab_count_string.empty()) { |
| 441 int count = 0; | 441 int count = 0; |
| 442 if (StringToInt(WideToUTF16Hack(tab_count_string), &count)) { | 442 if (StringToInt(WideToUTF16Hack(tab_count_string), &count)) { |
| 443 const int tab_count = std::max(0, count); | 443 const int tab_count = std::max(0, count); |
| 444 SessionRestore::num_tabs_to_load_ = static_cast<size_t>(tab_count); | 444 SessionRestore::num_tabs_to_load_ = static_cast<size_t>(tab_count); |
| 445 } | 445 } |
| 446 } | 446 } |
| 447 | 447 |
| 448 #if defined(OS_WIN) | |
| 449 // Look for the testing channel ID ONLY during process startup | 448 // Look for the testing channel ID ONLY during process startup |
| 450 if (command_line.HasSwitch(switches::kTestingChannelID)) { | 449 if (command_line.HasSwitch(switches::kTestingChannelID)) { |
| 451 std::wstring testing_channel_id = | 450 std::wstring testing_channel_id = |
| 452 command_line.GetSwitchValue(switches::kTestingChannelID); | 451 command_line.GetSwitchValue(switches::kTestingChannelID); |
| 453 // TODO(sanjeevr) Check if we need to make this a singleton for | 452 // TODO(sanjeevr) Check if we need to make this a singleton for |
| 454 // compatibility with the old testing code | 453 // compatibility with the old testing code |
| 455 // If there are any loose parameters, we expect each one to generate a | 454 // If there are any loose parameters, we expect each one to generate a |
| 456 // new tab; if there are none then we get one homepage tab. | 455 // new tab; if there are none then we get one homepage tab. |
| 457 int expected_tab_count = 1; | 456 int expected_tab_count = 1; |
| 458 if (command_line.HasSwitch(switches::kRestoreLastSession)) { | 457 if (command_line.HasSwitch(switches::kRestoreLastSession)) { |
| 459 StringToInt(command_line.GetSwitchValue(switches::kRestoreLastSession), | 458 std::wstring restore_session_value( |
| 459 command_line.GetSwitchValue(switches::kRestoreLastSession)); |
| 460 StringToInt(WideToUTF16Hack(restore_session_value), |
| 460 &expected_tab_count); | 461 &expected_tab_count); |
| 461 } else { | 462 } else { |
| 462 expected_tab_count = | 463 expected_tab_count = |
| 463 std::max(1, static_cast<int>(command_line.GetLooseValues().size())); | 464 std::max(1, static_cast<int>(command_line.GetLooseValues().size())); |
| 464 } | 465 } |
| 465 CreateAutomationProvider<TestingAutomationProvider>( | 466 CreateAutomationProvider<TestingAutomationProvider>( |
| 466 testing_channel_id, | 467 testing_channel_id, |
| 467 profile, | 468 profile, |
| 468 static_cast<size_t>(expected_tab_count)); | 469 static_cast<size_t>(expected_tab_count)); |
| 469 } | 470 } |
| 470 #endif | |
| 471 } | 471 } |
| 472 | 472 |
| 473 // Allow the command line to override the persisted setting of home page. | 473 // Allow the command line to override the persisted setting of home page. |
| 474 SetOverrideHomePage(command_line, profile->GetPrefs()); | 474 SetOverrideHomePage(command_line, profile->GetPrefs()); |
| 475 | 475 |
| 476 if (command_line.HasSwitch(switches::kBrowserStartRenderersManually)) | 476 if (command_line.HasSwitch(switches::kBrowserStartRenderersManually)) |
| 477 prefs->transient()->SetBoolean(prefs::kStartRenderersManually, true); | 477 prefs->transient()->SetBoolean(prefs::kStartRenderersManually, true); |
| 478 | 478 |
| 479 bool silent_launch = false; | 479 bool silent_launch = false; |
| 480 #if defined(OS_WIN) | |
| 481 if (command_line.HasSwitch(switches::kAutomationClientChannelID)) { | 480 if (command_line.HasSwitch(switches::kAutomationClientChannelID)) { |
| 482 std::wstring automation_channel_id = | 481 std::wstring automation_channel_id = |
| 483 command_line.GetSwitchValue(switches::kAutomationClientChannelID); | 482 command_line.GetSwitchValue(switches::kAutomationClientChannelID); |
| 484 // If there are any loose parameters, we expect each one to generate a | 483 // If there are any loose parameters, we expect each one to generate a |
| 485 // new tab; if there are none then we have no tabs | 484 // new tab; if there are none then we have no tabs |
| 486 size_t expected_tabs = | 485 size_t expected_tabs = |
| 487 std::max(static_cast<int>(command_line.GetLooseValues().size()), | 486 std::max(static_cast<int>(command_line.GetLooseValues().size()), |
| 488 0); | 487 0); |
| 489 if (expected_tabs == 0) | 488 if (expected_tabs == 0) |
| 490 silent_launch = true; | 489 silent_launch = true; |
| 491 CreateAutomationProvider<AutomationProvider>(automation_channel_id, | 490 CreateAutomationProvider<AutomationProvider>(automation_channel_id, |
| 492 profile, expected_tabs); | 491 profile, expected_tabs); |
| 493 } | 492 } |
| 494 #endif | |
| 495 | 493 |
| 496 if (command_line.HasSwitch(switches::kLoadExtension)) { | 494 if (command_line.HasSwitch(switches::kLoadExtension)) { |
| 497 std::wstring path_string = | 495 std::wstring path_string = |
| 498 command_line.GetSwitchValue(switches::kLoadExtension); | 496 command_line.GetSwitchValue(switches::kLoadExtension); |
| 499 FilePath path = FilePath::FromWStringHack(path_string); | 497 FilePath path = FilePath::FromWStringHack(path_string); |
| 500 profile->GetExtensionsService()->LoadExtension(path); | 498 profile->GetExtensionsService()->LoadExtension(path); |
| 501 profile->GetUserScriptMaster()->AddWatchedPath(path); | 499 profile->GetUserScriptMaster()->AddWatchedPath(path); |
| 502 } | 500 } |
| 503 | 501 |
| 504 if (command_line.HasSwitch(switches::kInstallExtension)) { | 502 if (command_line.HasSwitch(switches::kInstallExtension)) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 524 bool BrowserInit::LaunchBrowser(const CommandLine& command_line, | 522 bool BrowserInit::LaunchBrowser(const CommandLine& command_line, |
| 525 Profile* profile, const std::wstring& cur_dir, | 523 Profile* profile, const std::wstring& cur_dir, |
| 526 bool process_startup, int* return_code) { | 524 bool process_startup, int* return_code) { |
| 527 in_startup = process_startup; | 525 in_startup = process_startup; |
| 528 bool result = LaunchBrowserImpl(command_line, profile, cur_dir, | 526 bool result = LaunchBrowserImpl(command_line, profile, cur_dir, |
| 529 process_startup, return_code); | 527 process_startup, return_code); |
| 530 in_startup = false; | 528 in_startup = false; |
| 531 return result; | 529 return result; |
| 532 } | 530 } |
| 533 | 531 |
| 534 #if defined(OS_WIN) | |
| 535 template <class AutomationProviderClass> | 532 template <class AutomationProviderClass> |
| 536 void BrowserInit::CreateAutomationProvider(const std::wstring& channel_id, | 533 void BrowserInit::CreateAutomationProvider(const std::wstring& channel_id, |
| 537 Profile* profile, | 534 Profile* profile, |
| 538 size_t expected_tabs) { | 535 size_t expected_tabs) { |
| 539 scoped_refptr<AutomationProviderClass> automation = | 536 scoped_refptr<AutomationProviderClass> automation = |
| 540 new AutomationProviderClass(profile); | 537 new AutomationProviderClass(profile); |
| 541 automation->ConnectToChannel(channel_id); | 538 automation->ConnectToChannel(channel_id); |
| 542 automation->SetExpectedTabCount(expected_tabs); | 539 automation->SetExpectedTabCount(expected_tabs); |
| 543 | 540 |
| 544 AutomationProviderList* list = | 541 AutomationProviderList* list = |
| 545 g_browser_process->InitAutomationProviderList(); DCHECK(list); | 542 g_browser_process->InitAutomationProviderList(); |
| 543 DCHECK(list); |
| 546 list->AddProvider(automation); | 544 list->AddProvider(automation); |
| 547 } | 545 } |
| 548 #endif | |
| 549 | 546 |
| 550 bool BrowserInit::LaunchBrowserImpl(const CommandLine& command_line, | 547 bool BrowserInit::LaunchBrowserImpl(const CommandLine& command_line, |
| 551 Profile* profile, | 548 Profile* profile, |
| 552 const std::wstring& cur_dir, | 549 const std::wstring& cur_dir, |
| 553 bool process_startup, | 550 bool process_startup, |
| 554 int* return_code) { | 551 int* return_code) { |
| 555 DCHECK(profile); | 552 DCHECK(profile); |
| 556 | 553 |
| 557 // Continue with the off-the-record profile from here on if --incognito | 554 // Continue with the off-the-record profile from here on if --incognito |
| 558 if (command_line.HasSwitch(switches::kIncognito)) | 555 if (command_line.HasSwitch(switches::kIncognito)) |
| 559 profile = profile->GetOffTheRecordProfile(); | 556 profile = profile->GetOffTheRecordProfile(); |
| 560 | 557 |
| 561 LaunchWithProfile lwp(cur_dir, command_line); | 558 LaunchWithProfile lwp(cur_dir, command_line); |
| 562 bool launched = lwp.Launch(profile, process_startup); | 559 bool launched = lwp.Launch(profile, process_startup); |
| 563 if (!launched) { | 560 if (!launched) { |
| 564 LOG(ERROR) << "launch error"; | 561 LOG(ERROR) << "launch error"; |
| 565 if (return_code != NULL) | 562 if (return_code != NULL) |
| 566 *return_code = ResultCodes::INVALID_CMDLINE_URL; | 563 *return_code = ResultCodes::INVALID_CMDLINE_URL; |
| 567 return false; | 564 return false; |
| 568 } | 565 } |
| 569 | 566 |
| 570 return true; | 567 return true; |
| 571 } | 568 } |
| OLD | NEW |