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 @@ ...@@ -8,6 +8,7 @@
#include "base/files/file_enumerator.h" #include "base/files/file_enumerator.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/threading/sequenced_worker_pool.h" #include "base/threading/sequenced_worker_pool.h"
#include "ui/base/text/bytes_formatting.h"
CrashUploadListAndroid::CrashUploadListAndroid( CrashUploadListAndroid::CrashUploadListAndroid(
Delegate* delegate, Delegate* delegate,
...@@ -41,6 +42,10 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList( ...@@ -41,6 +42,10 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList(
if (!base::GetFileInfo(file, &info)) if (!base::GetFileInfo(file, &info))
continue; 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, // Crash reports can have multiple extensions (e.g. foo.dmp, foo.dmp.try1,
// foo.skipped.try0). // foo.skipped.try0).
file = file.BaseName(); file = file.BaseName();
...@@ -55,9 +60,9 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList( ...@@ -55,9 +60,9 @@ void CrashUploadListAndroid::LoadUnsuccessfulUploadList(
continue; continue;
id = id.substr(pos + 1); id = id.substr(pos + 1);
UploadList::UploadInfo upload(std::string(), base::Time(), id, UploadList::UploadInfo upload(id, info.creation_time,
info.creation_time, UploadList::UploadInfo::State::NotUploaded,
UploadList::UploadInfo::State::NotUploaded); ui::FormatBytes(file_size));
uploads->push_back(upload); uploads->push_back(upload);
} }
} }
...@@ -32,6 +32,7 @@ const CrashesUILocalizedString kCrashesUILocalizedStrings[] = { ...@@ -32,6 +32,7 @@ const CrashesUILocalizedString kCrashesUILocalizedStrings[] = {
{"noCrashesMessage", IDS_CRASH_NO_CRASHES_MESSAGE}, {"noCrashesMessage", IDS_CRASH_NO_CRASHES_MESSAGE},
{"uploadCrashesLinkText", IDS_CRASH_UPLOAD_MESSAGE}, {"uploadCrashesLinkText", IDS_CRASH_UPLOAD_MESSAGE},
{"uploadNowLinkText", IDS_CRASH_UPLOAD_NOW_LINK_TEXT}, {"uploadNowLinkText", IDS_CRASH_UPLOAD_NOW_LINK_TEXT},
{"crashSizeMessage", IDS_CRASH_SIZE_MESSAGE},
}; };
const size_t kCrashesUILocalizedStringsCount = const size_t kCrashesUILocalizedStringsCount =
...@@ -76,6 +77,7 @@ void UploadListToValue(UploadList* upload_list, base::ListValue* out_value) { ...@@ -76,6 +77,7 @@ void UploadListToValue(UploadList* upload_list, base::ListValue* out_value) {
} }
crash->SetString("local_id", info.local_id); crash->SetString("local_id", info.local_id);
crash->SetString("state", UploadInfoStateAsString(info.state)); crash->SetString("state", UploadInfoStateAsString(info.state));
crash->SetString("file_size", info.file_size);
out_value->Append(std::move(crash)); out_value->Append(std::move(crash));
} }
} }
......
...@@ -101,23 +101,30 @@ function updateCrashList( ...@@ -101,23 +101,30 @@ function updateCrashList(
link.textContent = loadTimeData.getString('bugLinkText'); link.textContent = loadTimeData.getString('bugLinkText');
linkBlock.appendChild(link); linkBlock.appendChild(link);
crashBlock.appendChild(linkBlock); crashBlock.appendChild(linkBlock);
} else if (crash.state == 'pending_user_requested') { } else {
var userRequested = document.createElement('p'); if (crash.state == 'pending_user_requested')
userRequested.textContent = var textContentKey = 'crashUserRequested';
loadTimeData.getStringF('crashUserRequested', crash.time); else if (crash.state == 'pending')
crashBlock.appendChild(userRequested);
} else if (crash.state == 'pending' || crash.state == 'not_uploaded') {
if (crash.state == 'pending')
var textContentKey = 'crashPending'; var textContentKey = 'crashPending';
else else if (crash.state == 'not_uploaded')
var textContentKey = 'crashNotUploaded'; var textContentKey = 'crashNotUploaded';
else
continue;
var notUploaded = document.createElement('p'); var crashText = document.createElement('p');
notUploaded.textContent = loadTimeData.getStringF(textContentKey, crashText.textContent = loadTimeData.getStringF(textContentKey,
crash.time); crash.time);
crashBlock.appendChild(notUploaded); 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 uploadNowLinkBlock = document.createElement('p');
var link = document.createElement('a'); var link = document.createElement('a');
link.href = ''; link.href = '';
...@@ -152,4 +159,4 @@ function requestCrashUpload() { ...@@ -152,4 +159,4 @@ function requestCrashUpload() {
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
$('uploadCrashes').onclick = requestCrashUpload; $('uploadCrashes').onclick = requestCrashUpload;
requestCrashes(); requestCrashes();
}); });
\ No newline at end of file
...@@ -40,4 +40,7 @@ ...@@ -40,4 +40,7 @@
<message name="IDS_CRASH_UPLOAD_NOW_LINK_TEXT" desc="Link text for manual uploads of a crash report"> <message name="IDS_CRASH_UPLOAD_NOW_LINK_TEXT" desc="Link text for manual uploads of a crash report">
Send now Send now
</message> </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> </grit-part>
...@@ -28,10 +28,27 @@ UploadList::UploadInfo::UploadInfo(const std::string& upload_id, ...@@ -28,10 +28,27 @@ UploadList::UploadInfo::UploadInfo(const std::string& upload_id,
capture_time(capture_time), capture_time(capture_time),
state(state) {} 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, UploadList::UploadInfo::UploadInfo(const std::string& upload_id,
const base::Time& upload_time) const base::Time& upload_time)
: upload_id(upload_id), upload_time(upload_time), state(State::Uploaded) {} : 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::UploadInfo::~UploadInfo() {}
UploadList::UploadList( UploadList::UploadList(
......
...@@ -45,7 +45,13 @@ class UploadList : public base::RefCountedThreadSafe<UploadList> { ...@@ -45,7 +45,13 @@ class UploadList : public base::RefCountedThreadSafe<UploadList> {
const std::string& local_id, const std::string& local_id,
const base::Time& capture_time, const base::Time& capture_time,
State state); 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 std::string& upload_id, const base::Time& upload_time);
UploadInfo(const UploadInfo& upload_info);
~UploadInfo(); ~UploadInfo();
// These fields are only valid when |state| == UploadInfo::State::Uploaded. // These fields are only valid when |state| == UploadInfo::State::Uploaded.
...@@ -60,6 +66,9 @@ class UploadList : public base::RefCountedThreadSafe<UploadList> { ...@@ -60,6 +66,9 @@ class UploadList : public base::RefCountedThreadSafe<UploadList> {
base::Time capture_time; base::Time capture_time;
State state; State state;
// Formatted file size for locally stored data.
base::string16 file_size;
}; };
class Delegate { 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