| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/crash/core/browser/crashes_ui_util.h" |
| |
| #include <memory> |
| #include <utility> |
| #include <vector> |
| |
| #include "base/i18n/time_formatting.h" |
| #include "base/stl_util.h" |
| #include "base/values.h" |
| #include "components/strings/grit/components_chromium_strings.h" |
| #include "components/strings/grit/components_strings.h" |
| #include "components/upload_list/upload_list.h" |
| |
| namespace crash { |
| |
| const CrashesUILocalizedString kCrashesUILocalizedStrings[] = { |
| {"bugLinkText", IDS_CRASH_BUG_LINK_LABEL}, |
| {"crashCountFormat", IDS_CRASH_CRASH_COUNT_BANNER_FORMAT}, |
| {"crashHeaderFormat", IDS_CRASH_CRASH_HEADER_FORMAT}, |
| {"crashHeaderFormatLocalOnly", IDS_CRASH_CRASH_HEADER_FORMAT_LOCAL_ONLY}, |
| {"crashUploadTimeFormat", IDS_CRASH_UPLOAD_TIME_FORMAT}, |
| {"crashCaptureAndUploadTimeFormat", |
| IDS_CRASH_CAPTURE_AND_UPLOAD_TIME_FORMAT}, |
| {"crashNotUploaded", IDS_CRASH_CRASH_NOT_UPLOADED}, |
| {"crashUserRequested", IDS_CRASH_CRASH_USER_REQUESTED}, |
| {"crashPending", IDS_CRASH_CRASH_PENDING}, |
| {"crashesTitle", IDS_CRASH_TITLE}, |
| {"disabledHeader", IDS_CRASH_DISABLED_HEADER}, |
| {"disabledMessage", IDS_CRASH_DISABLED_MESSAGE}, |
| {"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 = |
| base::size(kCrashesUILocalizedStrings); |
| |
| const char kCrashesUICrashesJS[] = "crashes.js"; |
| const char kCrashesUIRequestCrashList[] = "requestCrashList"; |
| const char kCrashesUIRequestCrashUpload[] = "requestCrashUpload"; |
| const char kCrashesUIShortProductName[] = "shortProductName"; |
| const char kCrashesUIUpdateCrashList[] = "updateCrashList"; |
| const char kCrashesUIRequestSingleCrashUpload[] = "requestSingleCrashUpload"; |
| |
| std::string UploadInfoStateAsString(UploadList::UploadInfo::State state) { |
| switch (state) { |
| case UploadList::UploadInfo::State::NotUploaded: |
| return "not_uploaded"; |
| case UploadList::UploadInfo::State::Pending: |
| return "pending"; |
| case UploadList::UploadInfo::State::Pending_UserRequested: |
| return "pending_user_requested"; |
| case UploadList::UploadInfo::State::Uploaded: |
| return "uploaded"; |
| } |
| |
| NOTREACHED(); |
| return ""; |
| } |
| |
| void UploadListToValue(UploadList* upload_list, base::ListValue* out_value) { |
| std::vector<UploadList::UploadInfo> crashes; |
| upload_list->GetUploads(50, &crashes); |
| |
| for (const auto& info : crashes) { |
| std::unique_ptr<base::DictionaryValue> crash(new base::DictionaryValue()); |
| crash->SetString("id", info.upload_id); |
| if (info.state == UploadList::UploadInfo::State::Uploaded) { |
| crash->SetString("upload_time", |
| base::TimeFormatFriendlyDateAndTime(info.upload_time)); |
| } |
| if (!info.capture_time.is_null()) { |
| crash->SetString("capture_time", |
| base::TimeFormatFriendlyDateAndTime(info.capture_time)); |
| } |
| 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)); |
| } |
| } |
| |
| } // namespace crash |