OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include <windows.h> | |
6 #include <stdlib.h> | |
7 #include <tchar.h> | |
8 | |
9 #include "base/at_exit.h" | |
10 #include "base/command_line.h" | |
11 #include "base/files/file_util.h" | |
12 #include "base/logging.h" | |
13 #include "base/path_service.h" | |
14 #include "chrome/common/chrome_constants.h" | |
15 #include "chrome/common/chrome_paths.h" | |
16 #include "components/crash/content/tools/crash_service.h" | |
17 | |
18 namespace { | |
19 | |
20 const wchar_t kStandardLogFile[] = L"operation_log.txt"; | |
21 | |
22 bool GetCrashServiceDirectory(base::FilePath* dir) { | |
23 base::FilePath temp_dir; | |
24 if (!base::GetTempDir(&temp_dir)) | |
25 return false; | |
26 temp_dir = temp_dir.Append(L"chrome_crashes"); | |
27 if (!base::PathExists(temp_dir)) { | |
28 if (!base::CreateDirectory(temp_dir)) | |
29 return false; | |
30 } | |
31 *dir = temp_dir; | |
32 return true; | |
33 } | |
34 | |
35 } // namespace. | |
36 | |
37 int __stdcall wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd_line, | |
38 int show_mode) { | |
39 // Manages the destruction of singletons. | |
40 base::AtExitManager exit_manager; | |
41 | |
42 base::CommandLine::Init(0, NULL); | |
43 | |
44 chrome::RegisterPathProvider(); | |
45 | |
46 // We use/create a directory under the user's temp folder, for logging. | |
47 base::FilePath operating_dir; | |
48 GetCrashServiceDirectory(&operating_dir); | |
49 base::FilePath log_file = operating_dir.Append(kStandardLogFile); | |
50 | |
51 // Logging to stderr (to help with debugging failures on the | |
52 // buildbots) and to a file. | |
53 logging::LoggingSettings settings; | |
54 settings.logging_dest = logging::LOG_TO_ALL; | |
55 settings.log_file = log_file.value().c_str(); | |
56 logging::InitLogging(settings); | |
57 // Logging with pid, tid and timestamp. | |
58 logging::SetLogItems(true, true, true, false); | |
59 | |
60 VLOG(1) << "session start. cmdline is [" << cmd_line << "]"; | |
61 | |
62 base::FilePath dumps_path; | |
63 if (!PathService::Get(chrome::DIR_CRASH_DUMPS, &dumps_path)) { | |
64 LOG(ERROR) << "could not get DIR_CRASH_DUMPS"; | |
65 return 1; | |
66 } | |
67 | |
68 breakpad::CrashService crash_service; | |
69 if (!crash_service.Initialize(operating_dir, dumps_path)) | |
70 return 1; | |
71 | |
72 VLOG(1) << "ready to process crash requests"; | |
73 | |
74 // Enter the message loop. | |
75 int retv = crash_service.ProcessingLoop(); | |
76 // Time to exit. | |
77 VLOG(1) << "session end. return code is " << retv; | |
78 return retv; | |
79 } | |
OLD | NEW |