| 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 // failed and that the process is being debugged. | 252 // failed and that the process is being debugged. |
| 253 void RecordBreakpadStatusUMA(MetricsService* metrics) { | 253 void RecordBreakpadStatusUMA(MetricsService* metrics) { |
| 254 DWORD len = ::GetEnvironmentVariableW(env_vars::kNoOOBreakpad, NULL, 0); | 254 DWORD len = ::GetEnvironmentVariableW(env_vars::kNoOOBreakpad, NULL, 0); |
| 255 metrics->RecordBreakpadRegistration((len == 0)); | 255 metrics->RecordBreakpadRegistration((len == 0)); |
| 256 metrics->RecordBreakpadHasDebugger(TRUE == ::IsDebuggerPresent()); | 256 metrics->RecordBreakpadHasDebugger(TRUE == ::IsDebuggerPresent()); |
| 257 } | 257 } |
| 258 | 258 |
| 259 } // namespace | 259 } // namespace |
| 260 | 260 |
| 261 // Main routine for running as the Browser process. | 261 // Main routine for running as the Browser process. |
| 262 int BrowserMain(CommandLine &parsed_command_line, int show_command, | 262 int BrowserMain(CommandLine &parsed_command_line, |
| 263 sandbox::BrokerServices* broker_services) { | 263 sandbox::BrokerServices* broker_services) { |
| 264 // WARNING: If we get a WM_ENDSESSION objects created on the stack here | 264 // WARNING: If we get a WM_ENDSESSION objects created on the stack here |
| 265 // are NOT deleted. If you need something to run during WM_ENDSESSION add it | 265 // are NOT deleted. If you need something to run during WM_ENDSESSION add it |
| 266 // to browser_shutdown::Shutdown or BrowserProcess::EndSession. | 266 // to browser_shutdown::Shutdown or BrowserProcess::EndSession. |
| 267 | 267 |
| 268 // TODO(beng, brettw): someday, break this out into sub functions with well | 268 // TODO(beng, brettw): someday, break this out into sub functions with well |
| 269 // defined roles (e.g. pre/post-profile startup, etc). | 269 // defined roles (e.g. pre/post-profile startup, etc). |
| 270 | 270 |
| 271 MessageLoop main_message_loop(MessageLoop::TYPE_UI); | 271 MessageLoop main_message_loop(MessageLoop::TYPE_UI); |
| 272 | 272 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 return ResultCodes::SHELL_INTEGRATION_FAILED; | 414 return ResultCodes::SHELL_INTEGRATION_FAILED; |
| 415 } | 415 } |
| 416 } | 416 } |
| 417 | 417 |
| 418 // Importing other browser settings is done in a browser-like process | 418 // Importing other browser settings is done in a browser-like process |
| 419 // that exits when this task has finished. | 419 // that exits when this task has finished. |
| 420 if (parsed_command_line.HasSwitch(switches::kImport)) | 420 if (parsed_command_line.HasSwitch(switches::kImport)) |
| 421 return FirstRun::ImportNow(profile, parsed_command_line); | 421 return FirstRun::ImportNow(profile, parsed_command_line); |
| 422 | 422 |
| 423 // When another process is running, use it instead of starting us. | 423 // When another process is running, use it instead of starting us. |
| 424 if (message_window.NotifyOtherProcess(show_command)) | 424 if (message_window.NotifyOtherProcess()) |
| 425 return ResultCodes::NORMAL_EXIT; | 425 return ResultCodes::NORMAL_EXIT; |
| 426 | 426 |
| 427 message_window.HuntForZombieChromeProcesses(); | 427 message_window.HuntForZombieChromeProcesses(); |
| 428 | 428 |
| 429 // Do the tasks if chrome has been upgraded while it was last running. | 429 // Do the tasks if chrome has been upgraded while it was last running. |
| 430 if (!already_running && DoUpgradeTasks(parsed_command_line)) { | 430 if (!already_running && DoUpgradeTasks(parsed_command_line)) { |
| 431 return ResultCodes::NORMAL_EXIT; | 431 return ResultCodes::NORMAL_EXIT; |
| 432 } | 432 } |
| 433 | 433 |
| 434 // Check if there is any machine level Chrome installed on the current | 434 // Check if there is any machine level Chrome installed on the current |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 browser_process->print_job_manager()->set_debug_dump_path( | 555 browser_process->print_job_manager()->set_debug_dump_path( |
| 556 parsed_command_line.GetSwitchValue(switches::kDebugPrint)); | 556 parsed_command_line.GetSwitchValue(switches::kDebugPrint)); |
| 557 } | 557 } |
| 558 | 558 |
| 559 HandleErrorTestParameters(parsed_command_line); | 559 HandleErrorTestParameters(parsed_command_line); |
| 560 | 560 |
| 561 RecordBreakpadStatusUMA(metrics); | 561 RecordBreakpadStatusUMA(metrics); |
| 562 | 562 |
| 563 int result_code = ResultCodes::NORMAL_EXIT; | 563 int result_code = ResultCodes::NORMAL_EXIT; |
| 564 if (BrowserInit::ProcessCommandLine(parsed_command_line, L"", local_state, | 564 if (BrowserInit::ProcessCommandLine(parsed_command_line, L"", local_state, |
| 565 show_command, true, profile, | 565 true, profile, &result_code)) { |
| 566 &result_code)) { | |
| 567 MessageLoopForUI::current()->Run(browser_process->accelerator_handler()); | 566 MessageLoopForUI::current()->Run(browser_process->accelerator_handler()); |
| 568 } | 567 } |
| 569 | 568 |
| 570 if (metrics) | 569 if (metrics) |
| 571 metrics->Stop(); | 570 metrics->Stop(); |
| 572 | 571 |
| 573 // browser_shutdown takes care of deleting browser_process, so we need to | 572 // browser_shutdown takes care of deleting browser_process, so we need to |
| 574 // release it. | 573 // release it. |
| 575 browser_process.release(); | 574 browser_process.release(); |
| 576 | 575 |
| 577 browser_shutdown::Shutdown(); | 576 browser_shutdown::Shutdown(); |
| 578 | 577 |
| 579 // The following teardown code will pacify Purify, but is not necessary for | 578 // The following teardown code will pacify Purify, but is not necessary for |
| 580 // shutdown. Only list methods here that have no significant side effects | 579 // shutdown. Only list methods here that have no significant side effects |
| 581 // and can be run in single threaded mode before terminating. | 580 // and can be run in single threaded mode before terminating. |
| 582 #ifndef NDEBUG // Don't call these in a Release build: they just waste time. | 581 #ifndef NDEBUG // Don't call these in a Release build: they just waste time. |
| 583 // The following should ONLY be called when in single threaded mode. It is | 582 // The following should ONLY be called when in single threaded mode. It is |
| 584 // unsafe to do this cleanup if other threads are still active. | 583 // unsafe to do this cleanup if other threads are still active. |
| 585 // It is also very unnecessary, so I'm only doing this in debug to satisfy | 584 // It is also very unnecessary, so I'm only doing this in debug to satisfy |
| 586 // purify. | 585 // purify. |
| 587 if (tracking_objects) | 586 if (tracking_objects) |
| 588 tracked_objects::ThreadData::ShutdownSingleThreadedCleanup(); | 587 tracked_objects::ThreadData::ShutdownSingleThreadedCleanup(); |
| 589 #endif // NDEBUG | 588 #endif // NDEBUG |
| 590 | 589 |
| 591 return result_code; | 590 return result_code; |
| 592 } | 591 } |
| OLD | NEW |