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/ui/webui/crashes_ui.h" | 5 #include "chrome/browser/ui/webui/crashes_ui.h" |
6 | 6 |
7 #include <vector> | |
8 | |
9 #include "base/bind.h" | 7 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
11 #include "base/i18n/time_formatting.h" | |
12 #include "base/memory/ref_counted_memory.h" | 9 #include "base/memory/ref_counted_memory.h" |
13 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
14 #include "base/values.h" | 11 #include "base/values.h" |
15 #include "chrome/browser/crash_upload_list.h" | 12 #include "chrome/browser/crash_upload_list.h" |
16 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" | 13 #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" |
17 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/common/url_constants.h" | 15 #include "chrome/common/url_constants.h" |
19 #include "chrome/grit/chromium_strings.h" | 16 #include "chrome/grit/chromium_strings.h" |
20 #include "chrome/grit/generated_resources.h" | 17 #include "chrome/grit/generated_resources.h" |
21 #include "chrome/grit/google_chrome_strings.h" | 18 #include "chrome/grit/google_chrome_strings.h" |
19 #include "components/crash/core/browser/crashes_ui_util.h" | |
22 #include "components/version_info/version_info.h" | 20 #include "components/version_info/version_info.h" |
23 #include "content/public/browser/web_contents.h" | 21 #include "content/public/browser/web_contents.h" |
24 #include "content/public/browser/web_ui.h" | 22 #include "content/public/browser/web_ui.h" |
25 #include "content/public/browser/web_ui_data_source.h" | 23 #include "content/public/browser/web_ui_data_source.h" |
26 #include "content/public/browser/web_ui_message_handler.h" | 24 #include "content/public/browser/web_ui_message_handler.h" |
27 #include "grit/browser_resources.h" | 25 #include "grit/browser_resources.h" |
28 #include "grit/components_chromium_strings.h" | 26 #include "grit/components_chromium_strings.h" |
29 #include "grit/components_google_chrome_strings.h" | 27 #include "grit/components_google_chrome_strings.h" |
30 #include "grit/components_resources.h" | 28 #include "grit/components_resources.h" |
29 #include "grit/components_scaled_resources.h" | |
31 #include "grit/components_strings.h" | 30 #include "grit/components_strings.h" |
32 #include "grit/theme_resources.h" | |
33 #include "ui/base/resource/resource_bundle.h" | 31 #include "ui/base/resource/resource_bundle.h" |
34 | 32 |
35 #if defined(OS_CHROMEOS) | 33 #if defined(OS_CHROMEOS) |
36 #include "chromeos/dbus/dbus_thread_manager.h" | 34 #include "chromeos/dbus/dbus_thread_manager.h" |
37 #include "chromeos/dbus/debug_daemon_client.h" | 35 #include "chromeos/dbus/debug_daemon_client.h" |
38 #endif | 36 #endif |
39 | 37 |
40 using content::WebContents; | 38 using content::WebContents; |
41 using content::WebUIMessageHandler; | 39 using content::WebUIMessageHandler; |
42 | 40 |
43 namespace { | 41 namespace { |
44 | 42 |
45 content::WebUIDataSource* CreateCrashesUIHTMLSource() { | 43 content::WebUIDataSource* CreateCrashesUIHTMLSource() { |
46 content::WebUIDataSource* source = | 44 content::WebUIDataSource* source = |
47 content::WebUIDataSource::Create(chrome::kChromeUICrashesHost); | 45 content::WebUIDataSource::Create(chrome::kChromeUICrashesHost); |
48 | 46 |
49 source->AddLocalizedString("shortProductName", IDS_SHORT_PRODUCT_NAME); | 47 source->AddLocalizedString(crash::kCrashesUIShortProductName, |
Robert Sesek
2015/10/06 20:13:35
Could you expose an array of struct{const char* na
droger
2015/10/07 09:39:10
Good suggestion.
Done, except for IDS_SHORT_PRODUC
| |
50 source->AddLocalizedString("crashesTitle", IDS_CRASH_TITLE); | 48 IDS_SHORT_PRODUCT_NAME); |
51 source->AddLocalizedString("crashCountFormat", | 49 source->AddLocalizedString(crash::kCrashesUICrashesTitle, IDS_CRASH_TITLE); |
50 source->AddLocalizedString(crash::kCrashesUICrashCountFormat, | |
52 IDS_CRASH_CRASH_COUNT_BANNER_FORMAT); | 51 IDS_CRASH_CRASH_COUNT_BANNER_FORMAT); |
53 source->AddLocalizedString("crashHeaderFormat", | 52 source->AddLocalizedString(crash::kCrashesUICrashHeaderFormat, |
54 IDS_CRASH_CRASH_HEADER_FORMAT); | 53 IDS_CRASH_CRASH_HEADER_FORMAT); |
55 source->AddLocalizedString("crashTimeFormat", IDS_CRASH_CRASH_TIME_FORMAT); | 54 source->AddLocalizedString(crash::kCrashesUICrashTimeFormat, |
56 source->AddLocalizedString("bugLinkText", IDS_CRASH_BUG_LINK_LABEL); | 55 IDS_CRASH_CRASH_TIME_FORMAT); |
57 source->AddLocalizedString("noCrashesMessage", | 56 source->AddLocalizedString(crash::kCrashesUIBugLinkText, |
57 IDS_CRASH_BUG_LINK_LABEL); | |
58 source->AddLocalizedString(crash::kCrashesUINoCrashesMessage, | |
58 IDS_CRASH_NO_CRASHES_MESSAGE); | 59 IDS_CRASH_NO_CRASHES_MESSAGE); |
59 source->AddLocalizedString("disabledHeader", IDS_CRASH_DISABLED_HEADER); | 60 source->AddLocalizedString(crash::kCrashesUIDisabledHeader, |
60 source->AddLocalizedString("disabledMessage", IDS_CRASH_DISABLED_MESSAGE); | 61 IDS_CRASH_DISABLED_HEADER); |
61 source->AddLocalizedString("uploadCrashesLinkText", | 62 source->AddLocalizedString(crash::kCrashesUIDisabledMessage, |
63 IDS_CRASH_DISABLED_MESSAGE); | |
64 source->AddLocalizedString(crash::kCrashesUIUploadCrashesLinkText, | |
62 IDS_CRASH_UPLOAD_MESSAGE); | 65 IDS_CRASH_UPLOAD_MESSAGE); |
63 source->SetJsonPath("strings.js"); | 66 source->SetJsonPath("strings.js"); |
64 source->AddResourcePath("crashes.js", IDR_CRASH_CRASHES_JS); | 67 source->AddResourcePath(crash::kCrashesUICrashesJS, IDR_CRASH_CRASHES_JS); |
65 source->SetDefaultResource(IDR_CRASH_CRASHES_HTML); | 68 source->SetDefaultResource(IDR_CRASH_CRASHES_HTML); |
66 return source; | 69 return source; |
67 } | 70 } |
68 | 71 |
69 //////////////////////////////////////////////////////////////////////////////// | 72 //////////////////////////////////////////////////////////////////////////////// |
70 // | 73 // |
71 // CrashesDOMHandler | 74 // CrashesDOMHandler |
72 // | 75 // |
73 //////////////////////////////////////////////////////////////////////////////// | 76 //////////////////////////////////////////////////////////////////////////////// |
74 | 77 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 : list_available_(false), first_load_(true) { | 111 : list_available_(false), first_load_(true) { |
109 upload_list_ = CreateCrashUploadList(this); | 112 upload_list_ = CreateCrashUploadList(this); |
110 } | 113 } |
111 | 114 |
112 CrashesDOMHandler::~CrashesDOMHandler() { | 115 CrashesDOMHandler::~CrashesDOMHandler() { |
113 upload_list_->ClearDelegate(); | 116 upload_list_->ClearDelegate(); |
114 } | 117 } |
115 | 118 |
116 void CrashesDOMHandler::RegisterMessages() { | 119 void CrashesDOMHandler::RegisterMessages() { |
117 upload_list_->LoadUploadListAsynchronously(); | 120 upload_list_->LoadUploadListAsynchronously(); |
118 web_ui()->RegisterMessageCallback("requestCrashList", | 121 web_ui()->RegisterMessageCallback( |
122 crash::kCrashesUIRequestCrashList, | |
119 base::Bind(&CrashesDOMHandler::HandleRequestCrashes, | 123 base::Bind(&CrashesDOMHandler::HandleRequestCrashes, |
120 base::Unretained(this))); | 124 base::Unretained(this))); |
121 | 125 |
122 #if defined(OS_CHROMEOS) | 126 #if defined(OS_CHROMEOS) |
123 web_ui()->RegisterMessageCallback("requestCrashUpload", | 127 web_ui()->RegisterMessageCallback( |
128 crash::kCrashesUIRequestCrashUpload, | |
124 base::Bind(&CrashesDOMHandler::HandleRequestUploads, | 129 base::Bind(&CrashesDOMHandler::HandleRequestUploads, |
125 base::Unretained(this))); | 130 base::Unretained(this))); |
126 #endif | 131 #endif |
127 } | 132 } |
128 | 133 |
129 void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) { | 134 void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) { |
130 if (first_load_) { | 135 if (first_load_) { |
131 first_load_ = false; | 136 first_load_ = false; |
132 if (list_available_) | 137 if (list_available_) |
133 UpdateUI(); | 138 UpdateUI(); |
(...skipping 15 matching lines...) Expand all Loading... | |
149 | 154 |
150 void CrashesDOMHandler::OnUploadListAvailable() { | 155 void CrashesDOMHandler::OnUploadListAvailable() { |
151 list_available_ = true; | 156 list_available_ = true; |
152 if (!first_load_) | 157 if (!first_load_) |
153 UpdateUI(); | 158 UpdateUI(); |
154 } | 159 } |
155 | 160 |
156 void CrashesDOMHandler::UpdateUI() { | 161 void CrashesDOMHandler::UpdateUI() { |
157 bool crash_reporting_enabled = | 162 bool crash_reporting_enabled = |
158 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(); | 163 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(); |
159 base::ListValue crash_list; | 164 |
160 bool system_crash_reporter = false; | 165 bool system_crash_reporter = false; |
161 | |
162 #if defined(OS_CHROMEOS) | 166 #if defined(OS_CHROMEOS) |
163 // Chrome OS has a system crash reporter. | 167 // Chrome OS has a system crash reporter. |
164 system_crash_reporter = true; | 168 system_crash_reporter = true; |
165 #endif | 169 #endif |
166 | 170 |
167 if (crash_reporting_enabled) { | 171 base::ListValue crash_list; |
168 std::vector<CrashUploadList::UploadInfo> crashes; | 172 if (crash_reporting_enabled) |
169 upload_list_->GetUploads(50, &crashes); | 173 crash::UploadListToValue(upload_list_.get(), &crash_list); |
170 | |
171 for (std::vector<CrashUploadList::UploadInfo>::iterator i = crashes.begin(); | |
172 i != crashes.end(); ++i) { | |
173 base::DictionaryValue* crash = new base::DictionaryValue(); | |
174 crash->SetString("id", i->id); | |
175 crash->SetString("time", base::TimeFormatFriendlyDateAndTime(i->time)); | |
176 crash->SetString("local_id", i->local_id); | |
177 crash_list.Append(crash); | |
178 } | |
179 } | |
180 | 174 |
181 base::FundamentalValue enabled(crash_reporting_enabled); | 175 base::FundamentalValue enabled(crash_reporting_enabled); |
182 base::FundamentalValue dynamic_backend(system_crash_reporter); | 176 base::FundamentalValue dynamic_backend(system_crash_reporter); |
183 | |
184 base::StringValue version(version_info::GetVersionNumber()); | 177 base::StringValue version(version_info::GetVersionNumber()); |
185 | 178 web_ui()->CallJavascriptFunction(crash::kCrashesUIUpdateCrashList, enabled, |
186 web_ui()->CallJavascriptFunction("updateCrashList", enabled, dynamic_backend, | 179 dynamic_backend, crash_list, version); |
187 crash_list, version); | |
188 } | 180 } |
189 | 181 |
190 } // namespace | 182 } // namespace |
191 | 183 |
192 /////////////////////////////////////////////////////////////////////////////// | 184 /////////////////////////////////////////////////////////////////////////////// |
193 // | 185 // |
194 // CrashesUI | 186 // CrashesUI |
195 // | 187 // |
196 /////////////////////////////////////////////////////////////////////////////// | 188 /////////////////////////////////////////////////////////////////////////////// |
197 | 189 |
198 CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { | 190 CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { |
199 web_ui->AddMessageHandler(new CrashesDOMHandler()); | 191 web_ui->AddMessageHandler(new CrashesDOMHandler()); |
200 | 192 |
201 // Set up the chrome://crashes/ source. | 193 // Set up the chrome://crashes/ source. |
202 Profile* profile = Profile::FromWebUI(web_ui); | 194 Profile* profile = Profile::FromWebUI(web_ui); |
203 content::WebUIDataSource::Add(profile, CreateCrashesUIHTMLSource()); | 195 content::WebUIDataSource::Add(profile, CreateCrashesUIHTMLSource()); |
204 } | 196 } |
205 | 197 |
206 // static | 198 // static |
207 base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes( | 199 base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes( |
208 ui::ScaleFactor scale_factor) { | 200 ui::ScaleFactor scale_factor) { |
209 return ResourceBundle::GetSharedInstance(). | 201 return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale( |
210 LoadDataResourceBytesForScale(IDR_SAD_FAVICON, scale_factor); | 202 IDR_CRASH_SAD_FAVICON, scale_factor); |
211 } | 203 } |
OLD | NEW |