Commit cc7d54ea authored by gayane's avatar gayane Committed by Commit bot

Show crash report size in crashes UI for Android.

As on Android manual crash uploads can happen on cellular
connection it is important to display the size of the crash reports.

BUG=641628

Review-Url: https://codereview.chromium.org/2330573002
Cr-Commit-Position: refs/heads/master@{#418590}
parent f6a421a8
......@@ -8,6 +8,7 @@
#include "base/files/file_enumerator.h"
#include "base/files/file_util.h"
#include "base/threading/sequenced_worker_pool.h"
#include "ui/base/text/bytes_formatting.h"
CrashUploadListAndroid::CrashUploadListAndroid(
Delegate* delegate,
......@@ -41,6 +42,10 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList(
if (!base::GetFileInfo(file, &info))
continue;
int64_t file_size = 0;
if (!base::GetFileSize(file, &file_size))
continue;
// Crash reports can have multiple extensions (e.g. foo.dmp, foo.dmp.try1,
// foo.skipped.try0).
file = file.BaseName();
......@@ -55,9 +60,9 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList(
continue;
id = id.substr(pos + 1);
UploadList::UploadInfo upload(std::string(), base::Time(), id,
info.creation_time,
UploadList::UploadInfo::State::NotUploaded);
UploadList::UploadInfo upload(id, info.creation_time,
UploadList::UploadInfo::State::NotUploaded,
ui::FormatBytes(file_size));
uploads->push_back(upload);
}
}
......@@ -32,6 +32,7 @@ const CrashesUILocalizedString kCrashesUILocalizedStrings[] = {
{"noCrashesMessage", IDS_CRASH_NO_CRASHES_MESSAGE},
{"uploadCrashesLinkText", IDS_CRASH_UPLOAD_MESSAGE},
{"uploadNowLinkText", IDS_CRASH_UPLOAD_NOW_LINK_TEXT},
{"crashSizeMessage", IDS_CRASH_SIZE_MESSAGE},
};
const size_t kCrashesUILocalizedStringsCount =
......@@ -76,6 +77,7 @@ void UploadListToValue(UploadList* upload_list, base::ListValue* out_value) {
}
crash->SetString("local_id", info.local_id);
crash->SetString("state", UploadInfoStateAsString(info.state));
crash->SetString("file_size", info.file_size);
out_value->Append(std::move(crash));
}
}
......
......@@ -101,23 +101,30 @@ function updateCrashList(
link.textContent = loadTimeData.getString('bugLinkText');
linkBlock.appendChild(link);
crashBlock.appendChild(linkBlock);
} else if (crash.state == 'pending_user_requested') {
var userRequested = document.createElement('p');
userRequested.textContent =
loadTimeData.getStringF('crashUserRequested', crash.time);
crashBlock.appendChild(userRequested);
} else if (crash.state == 'pending' || crash.state == 'not_uploaded') {
if (crash.state == 'pending')
} else {
if (crash.state == 'pending_user_requested')
var textContentKey = 'crashUserRequested';
else if (crash.state == 'pending')
var textContentKey = 'crashPending';
else
else if (crash.state == 'not_uploaded')
var textContentKey = 'crashNotUploaded';
else
continue;
var notUploaded = document.createElement('p');
notUploaded.textContent = loadTimeData.getStringF(textContentKey,
crash.time);
crashBlock.appendChild(notUploaded);
var crashText = document.createElement('p');
crashText.textContent = loadTimeData.getStringF(textContentKey,
crash.time);
crashBlock.appendChild(crashText);
if (crash.file_size != '') {
var crashSizeText = document.createElement('p');
crashSizeText.textContent = loadTimeData.getStringF('crashSizeMessage',
crash.file_size);
crashBlock.appendChild(crashSizeText);
}
if (manualUploads) {
// Do not show "Send now" link for already requested crashes.
if (crash.state != 'pending_user_requested' && manualUploads) {
var uploadNowLinkBlock = document.createElement('p');
var link = document.createElement('a');
link.href = '';
......@@ -152,4 +159,4 @@ function requestCrashUpload() {
document.addEventListener('DOMContentLoaded', function() {
$('uploadCrashes').onclick = requestCrashUpload;
requestCrashes();
});
\ No newline at end of file
});
......@@ -40,4 +40,7 @@
<message name="IDS_CRASH_UPLOAD_NOW_LINK_TEXT" desc="Link text for manual uploads of a crash report">
Send now
</message>
<message name="IDS_CRASH_SIZE_MESSAGE" desc="Format for displaying file size information for not uploaded crash reports.">
The size on the local storage is <ph name="CRASH_SIZE">$1<ex>10 kB</ex></ph>.
</message>
</grit-part>
......@@ -28,10 +28,27 @@ UploadList::UploadInfo::UploadInfo(const std::string& upload_id,
capture_time(capture_time),
state(state) {}
UploadList::UploadInfo::UploadInfo(const std::string& local_id,
const base::Time& capture_time,
State state,
const base::string16& file_size)
: local_id(local_id),
capture_time(capture_time),
state(state),
file_size(file_size) {}
UploadList::UploadInfo::UploadInfo(const std::string& upload_id,
const base::Time& upload_time)
: upload_id(upload_id), upload_time(upload_time), state(State::Uploaded) {}
UploadList::UploadInfo::UploadInfo(const UploadInfo& upload_info)
: upload_id(upload_info.upload_id),
upload_time(upload_info.upload_time),
local_id(upload_info.local_id),
capture_time(upload_info.capture_time),
state(upload_info.state),
file_size(upload_info.file_size) {}
UploadList::UploadInfo::~UploadInfo() {}
UploadList::UploadList(
......
......@@ -45,7 +45,13 @@ class UploadList : public base::RefCountedThreadSafe<UploadList> {
const std::string& local_id,
const base::Time& capture_time,
State state);
// Constructor for locally stored data.
UploadInfo(const std::string& local_id,
const base::Time& capture_time,
State state,
const base::string16& file_size);
UploadInfo(const std::string& upload_id, const base::Time& upload_time);
UploadInfo(const UploadInfo& upload_info);
~UploadInfo();
// These fields are only valid when |state| == UploadInfo::State::Uploaded.
......@@ -60,6 +66,9 @@ class UploadList : public base::RefCountedThreadSafe<UploadList> {
base::Time capture_time;
State state;
// Formatted file size for locally stored data.
base::string16 file_size;
};
class Delegate {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment