Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1191)

Unified Diff: chrome/browser/crash_upload_list.cc

Issue 6771021: Implement CrashUploadListWin to enable chrome://crashes on Windows. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Less strict crash string parsing. Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/crash_upload_list.cc
diff --git a/chrome/browser/crash_upload_list.cc b/chrome/browser/crash_upload_list.cc
index d10980f6a94c1f7994398596b1ca47969f6eb843..875e83fb3fd4027d0880c06232d8501bce9d0445 100644
--- a/chrome/browser/crash_upload_list.cc
+++ b/chrome/browser/crash_upload_list.cc
@@ -9,6 +9,9 @@
#include "base/file_util.h"
#include "base/string_number_conversions.h"
#include "base/string_split.h"
+#if defined(OS_WIN)
+#include "chrome/browser/crash_upload_list_win.h"
+#endif
#include "chrome/common/chrome_paths.h"
#include "content/browser/browser_thread.h"
@@ -17,20 +20,37 @@ CrashUploadList::CrashInfo::CrashInfo(const std::string& c, const base::Time& t)
CrashUploadList::CrashInfo::~CrashInfo() {}
+// static
+CrashUploadList* CrashUploadList::Create(Delegate* delegate) {
+#if defined(OS_WIN)
+ return new CrashUploadListWin(delegate);
+#else
+ return new CrashUploadList(delegate);
+#endif
+}
+
CrashUploadList::CrashUploadList(Delegate* delegate) : delegate_(delegate) {}
CrashUploadList::~CrashUploadList() {}
void CrashUploadList::LoadCrashListAsynchronously() {
BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
- NewRunnableMethod(this, &CrashUploadList::LoadUploadLog));
+ NewRunnableMethod(this,
+ &CrashUploadList::LoadCrashListAndInformDelegateOfCompletion));
}
void CrashUploadList::ClearDelegate() {
delegate_ = NULL;
}
-void CrashUploadList::LoadUploadLog() {
+
+void CrashUploadList::LoadCrashListAndInformDelegateOfCompletion() {
+ LoadCrashList();
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ NewRunnableMethod(this, &CrashUploadList::InformDelegateOfCompletion));
+}
+
+void CrashUploadList::LoadCrashList() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
FilePath crash_dir_path;
PathService::Get(chrome::DIR_CRASH_DUMPS, &crash_dir_path);
@@ -38,22 +58,16 @@ void CrashUploadList::LoadUploadLog() {
if (file_util::PathExists(upload_log_path)) {
std::string contents;
file_util::ReadFileToString(upload_log_path, &contents);
- base::SplitStringAlongWhitespace(contents, &log_entries_);
+ std::vector<std::string> log_entries;
+ base::SplitStringAlongWhitespace(contents, &log_entries);
+ ParseLogEntries(log_entries);
}
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- NewRunnableMethod(this, &CrashUploadList::InformDelegateOfCompletion));
-}
-
-void CrashUploadList::InformDelegateOfCompletion() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (delegate_)
- delegate_->OnCrashListAvailable();
}
-void CrashUploadList::GetUploadedCrashes(unsigned int max_count,
- std::vector<CrashInfo>* crashes) {
- std::vector<std::string>::reverse_iterator i;
- for (i = log_entries_.rbegin(); i != log_entries_.rend(); ++i) {
+void CrashUploadList::ParseLogEntries(
+ const std::vector<std::string>& log_entries) {
+ std::vector<std::string>::const_reverse_iterator i;
+ for (i = log_entries.rbegin(); i != log_entries.rend(); ++i) {
std::vector<std::string> components;
base::SplitString(*i, ',', &components);
// Skip any blank (or corrupted) lines.
@@ -62,7 +76,25 @@ void CrashUploadList::GetUploadedCrashes(unsigned int max_count,
double seconds_since_epoch;
if (!base::StringToDouble(components[0], &seconds_since_epoch))
continue;
- CrashInfo info(components[1], base::Time::FromDoubleT(seconds_since_epoch));
- crashes->push_back(info);
+ CrashInfo info(components[1],
MAD 2011/04/01 14:28:20 This used to fit in 80 columns, why did you split
Alexei Svitkine (slow) 2011/04/01 15:01:23 This got refactored a few times where at one point
MAD 2011/04/01 15:06:27 That's what I thought... Thanks! :-)
+ base::Time::FromDoubleT(seconds_since_epoch));
+ crashes_.push_back(info);
}
}
+
+void CrashUploadList::InformDelegateOfCompletion() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (delegate_)
+ delegate_->OnCrashListAvailable();
+}
+
+void CrashUploadList::GetUploadedCrashes(unsigned int max_count,
+ std::vector<CrashInfo>* crashes) {
+ std::copy(crashes_.begin(),
+ crashes_.begin() + std::min<size_t>(crashes_.size(), max_count),
+ std::back_inserter(*crashes));
+}
+
+std::vector<CrashUploadList::CrashInfo>& CrashUploadList::crashes() {
+ return crashes_;
+}

Powered by Google App Engine
This is Rietveld 408576698