OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/android/crash_dump_manager.h" | 5 #include "chrome/browser/android/crash_dump_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 void CrashDumpManager::ProcessMinidump(const base::FilePath& minidump_path, | 84 void CrashDumpManager::ProcessMinidump(const base::FilePath& minidump_path, |
85 base::ProcessHandle pid) { | 85 base::ProcessHandle pid) { |
86 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 86 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
87 int64 file_size = 0; | 87 int64 file_size = 0; |
88 int r = file_util::GetFileSize(minidump_path, &file_size); | 88 int r = file_util::GetFileSize(minidump_path, &file_size); |
89 DCHECK(r) << "Failed to retrieve size for minidump " | 89 DCHECK(r) << "Failed to retrieve size for minidump " |
90 << minidump_path.value(); | 90 << minidump_path.value(); |
91 | 91 |
92 if (file_size == 0) { | 92 if (file_size == 0) { |
93 // Empty minidump, this process did not crash. Just remove the file. | 93 // Empty minidump, this process did not crash. Just remove the file. |
94 r = file_util::Delete(minidump_path, false); | 94 r = base::Delete(minidump_path, false); |
95 DCHECK(r) << "Failed to delete temporary minidump file " | 95 DCHECK(r) << "Failed to delete temporary minidump file " |
96 << minidump_path.value(); | 96 << minidump_path.value(); |
97 return; | 97 return; |
98 } | 98 } |
99 | 99 |
100 // We are dealing with a valid minidump. Copy it to the crash report | 100 // We are dealing with a valid minidump. Copy it to the crash report |
101 // directory from where Java code will upload it later on. | 101 // directory from where Java code will upload it later on. |
102 base::FilePath crash_dump_dir; | 102 base::FilePath crash_dump_dir; |
103 r = PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dump_dir); | 103 r = PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dump_dir); |
104 if (!r) { | 104 if (!r) { |
105 NOTREACHED() << "Failed to retrieve the crash dump directory."; | 105 NOTREACHED() << "Failed to retrieve the crash dump directory."; |
106 return; | 106 return; |
107 } | 107 } |
108 | 108 |
109 const uint64 rand = base::RandUint64(); | 109 const uint64 rand = base::RandUint64(); |
110 const std::string filename = | 110 const std::string filename = |
111 base::StringPrintf("chromium-renderer-minidump-%016" PRIx64 ".dmp%d", | 111 base::StringPrintf("chromium-renderer-minidump-%016" PRIx64 ".dmp%d", |
112 rand, pid); | 112 rand, pid); |
113 base::FilePath dest_path = crash_dump_dir.Append(filename); | 113 base::FilePath dest_path = crash_dump_dir.Append(filename); |
114 r = file_util::Move(minidump_path, dest_path); | 114 r = file_util::Move(minidump_path, dest_path); |
115 if (!r) { | 115 if (!r) { |
116 LOG(ERROR) << "Failed to move crash dump from " << minidump_path.value() | 116 LOG(ERROR) << "Failed to move crash dump from " << minidump_path.value() |
117 << " to " << dest_path.value(); | 117 << " to " << dest_path.value(); |
118 file_util::Delete(minidump_path, false); | 118 base::Delete(minidump_path, false); |
119 return; | 119 return; |
120 } | 120 } |
121 LOG(INFO) << "Crash minidump successfully generated: " << | 121 LOG(INFO) << "Crash minidump successfully generated: " << |
122 crash_dump_dir.Append(filename).value(); | 122 crash_dump_dir.Append(filename).value(); |
123 } | 123 } |
124 | 124 |
125 void CrashDumpManager::BrowserChildProcessHostDisconnected( | 125 void CrashDumpManager::BrowserChildProcessHostDisconnected( |
126 const content::ChildProcessData& data) { | 126 const content::ChildProcessData& data) { |
127 OnChildExit(data.id, data.handle); | 127 OnChildExit(data.id, data.handle); |
128 } | 128 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 // NOTIFICATION_RENDERER_PROCESS_CLOSED. | 164 // NOTIFICATION_RENDERER_PROCESS_CLOSED. |
165 return; | 165 return; |
166 } | 166 } |
167 minidump_path = iter->second; | 167 minidump_path = iter->second; |
168 child_process_id_to_minidump_path_.erase(iter); | 168 child_process_id_to_minidump_path_.erase(iter); |
169 } | 169 } |
170 BrowserThread::PostTask( | 170 BrowserThread::PostTask( |
171 BrowserThread::FILE, FROM_HERE, | 171 BrowserThread::FILE, FROM_HERE, |
172 base::Bind(&CrashDumpManager::ProcessMinidump, minidump_path, pid)); | 172 base::Bind(&CrashDumpManager::ProcessMinidump, minidump_path, pid)); |
173 } | 173 } |
OLD | NEW |