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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 void HandleRequestCrashes(const base::ListValue* args); | 86 void HandleRequestCrashes(const base::ListValue* args); |
87 | 87 |
88 #if defined(OS_CHROMEOS) | 88 #if defined(OS_CHROMEOS) |
89 // Asynchronously triggers crash uploading. Called from JS. | 89 // Asynchronously triggers crash uploading. Called from JS. |
90 void HandleRequestUploads(const base::ListValue* args); | 90 void HandleRequestUploads(const base::ListValue* args); |
91 #endif | 91 #endif |
92 | 92 |
93 // Sends the recent crashes list JS. | 93 // Sends the recent crashes list JS. |
94 void UpdateUI(); | 94 void UpdateUI(); |
95 | 95 |
96 #if defined(OS_WIN) || defined(OS_MACOSX) | |
97 // Asynchronously requests a user triggered upload. Called from JS. | 96 // Asynchronously requests a user triggered upload. Called from JS. |
98 void HandleRequestSingleCrashUpload(const base::ListValue* args); | 97 void HandleRequestSingleCrashUpload(const base::ListValue* args); |
99 #endif | |
100 | 98 |
101 scoped_refptr<CrashUploadList> upload_list_; | 99 scoped_refptr<CrashUploadList> upload_list_; |
102 bool list_available_; | 100 bool list_available_; |
103 bool first_load_; | 101 bool first_load_; |
104 | 102 |
105 DISALLOW_COPY_AND_ASSIGN(CrashesDOMHandler); | 103 DISALLOW_COPY_AND_ASSIGN(CrashesDOMHandler); |
106 }; | 104 }; |
107 | 105 |
108 CrashesDOMHandler::CrashesDOMHandler() | 106 CrashesDOMHandler::CrashesDOMHandler() |
109 : list_available_(false), first_load_(true) { | 107 : list_available_(false), first_load_(true) { |
(...skipping 11 matching lines...) Expand all Loading... |
121 base::Bind(&CrashesDOMHandler::HandleRequestCrashes, | 119 base::Bind(&CrashesDOMHandler::HandleRequestCrashes, |
122 base::Unretained(this))); | 120 base::Unretained(this))); |
123 | 121 |
124 #if defined(OS_CHROMEOS) | 122 #if defined(OS_CHROMEOS) |
125 web_ui()->RegisterMessageCallback( | 123 web_ui()->RegisterMessageCallback( |
126 crash::kCrashesUIRequestCrashUpload, | 124 crash::kCrashesUIRequestCrashUpload, |
127 base::Bind(&CrashesDOMHandler::HandleRequestUploads, | 125 base::Bind(&CrashesDOMHandler::HandleRequestUploads, |
128 base::Unretained(this))); | 126 base::Unretained(this))); |
129 #endif | 127 #endif |
130 | 128 |
131 #if defined(OS_WIN) || defined(OS_MACOSX) | |
132 web_ui()->RegisterMessageCallback( | 129 web_ui()->RegisterMessageCallback( |
133 crash::kCrashesUIRequestSingleCrashUpload, | 130 crash::kCrashesUIRequestSingleCrashUpload, |
134 base::Bind(&CrashesDOMHandler::HandleRequestSingleCrashUpload, | 131 base::Bind(&CrashesDOMHandler::HandleRequestSingleCrashUpload, |
135 base::Unretained(this))); | 132 base::Unretained(this))); |
136 #endif | |
137 } | 133 } |
138 | 134 |
139 void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) { | 135 void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) { |
140 if (first_load_) { | 136 if (first_load_) { |
141 first_load_ = false; | 137 first_load_ = false; |
142 if (list_available_) | 138 if (list_available_) |
143 UpdateUI(); | 139 UpdateUI(); |
144 } else { | 140 } else { |
145 list_available_ = false; | 141 list_available_ = false; |
146 upload_list_->LoadUploadListAsynchronously(); | 142 upload_list_->LoadUploadListAsynchronously(); |
(...skipping 22 matching lines...) Expand all Loading... |
169 | 165 |
170 bool system_crash_reporter = false; | 166 bool system_crash_reporter = false; |
171 #if defined(OS_CHROMEOS) | 167 #if defined(OS_CHROMEOS) |
172 // Chrome OS has a system crash reporter. | 168 // Chrome OS has a system crash reporter. |
173 system_crash_reporter = true; | 169 system_crash_reporter = true; |
174 #endif | 170 #endif |
175 | 171 |
176 bool upload_list = crash_reporting_enabled; | 172 bool upload_list = crash_reporting_enabled; |
177 bool support_manual_uploads = false; | 173 bool support_manual_uploads = false; |
178 | 174 |
179 #if defined(OS_WIN) || defined(OS_MACOSX) | 175 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_ANDROID) |
180 // Maunal uploads currently are supported only for Crashpad-using platforms | 176 // Maunal uploads currently are supported only for Crashpad-using platforms |
181 // and only if crash uploads are not disabled by policy. | 177 // and Android, and only if crash uploads are not disabled by policy. |
182 support_manual_uploads = | 178 support_manual_uploads = |
183 crash_reporting_enabled || !IsMetricsReportingPolicyManaged(); | 179 crash_reporting_enabled || !IsMetricsReportingPolicyManaged(); |
184 | 180 |
185 // Show crash reports regardless of |crash_reporting_enabled| so that users | 181 // Show crash reports regardless of |crash_reporting_enabled| so that users |
186 // can manually upload those reports. | 182 // can manually upload those reports. |
187 upload_list = true; | 183 upload_list = true; |
188 #endif | 184 #endif |
189 | 185 |
190 base::ListValue crash_list; | 186 base::ListValue crash_list; |
191 if (upload_list) | 187 if (upload_list) |
(...skipping 10 matching lines...) Expand all Loading... |
202 args.push_back(&enabled); | 198 args.push_back(&enabled); |
203 args.push_back(&dynamic_backend); | 199 args.push_back(&dynamic_backend); |
204 args.push_back(&manual_uploads); | 200 args.push_back(&manual_uploads); |
205 args.push_back(&crash_list); | 201 args.push_back(&crash_list); |
206 args.push_back(&version); | 202 args.push_back(&version); |
207 args.push_back(&os_string); | 203 args.push_back(&os_string); |
208 web_ui()->CallJavascriptFunctionUnsafe(crash::kCrashesUIUpdateCrashList, | 204 web_ui()->CallJavascriptFunctionUnsafe(crash::kCrashesUIUpdateCrashList, |
209 args); | 205 args); |
210 } | 206 } |
211 | 207 |
212 #if defined(OS_WIN) || defined(OS_MACOSX) | |
213 void CrashesDOMHandler::HandleRequestSingleCrashUpload( | 208 void CrashesDOMHandler::HandleRequestSingleCrashUpload( |
214 const base::ListValue* args) { | 209 const base::ListValue* args) { |
215 DCHECK(args); | 210 DCHECK(args); |
216 | 211 |
217 std::string local_id; | 212 std::string local_id; |
218 bool success = args->GetString(0, &local_id); | 213 bool success = args->GetString(0, &local_id); |
219 DCHECK(success); | 214 DCHECK(success); |
220 | 215 |
221 // Only allow manual uploads if crash uploads aren’t disabled by policy. | 216 // Only allow manual uploads if crash uploads aren’t disabled by policy. |
222 if (!ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled() && | 217 if (!ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled() && |
223 IsMetricsReportingPolicyManaged()) { | 218 IsMetricsReportingPolicyManaged()) { |
224 return; | 219 return; |
225 } | 220 } |
226 upload_list_->RequestSingleCrashUploadAsync(local_id); | 221 upload_list_->RequestSingleCrashUploadAsync(local_id); |
227 } | 222 } |
228 #endif | |
229 | 223 |
230 } // namespace | 224 } // namespace |
231 | 225 |
232 /////////////////////////////////////////////////////////////////////////////// | 226 /////////////////////////////////////////////////////////////////////////////// |
233 // | 227 // |
234 // CrashesUI | 228 // CrashesUI |
235 // | 229 // |
236 /////////////////////////////////////////////////////////////////////////////// | 230 /////////////////////////////////////////////////////////////////////////////// |
237 | 231 |
238 CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { | 232 CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { |
239 web_ui->AddMessageHandler(new CrashesDOMHandler()); | 233 web_ui->AddMessageHandler(new CrashesDOMHandler()); |
240 | 234 |
241 // Set up the chrome://crashes/ source. | 235 // Set up the chrome://crashes/ source. |
242 Profile* profile = Profile::FromWebUI(web_ui); | 236 Profile* profile = Profile::FromWebUI(web_ui); |
243 content::WebUIDataSource::Add(profile, CreateCrashesUIHTMLSource()); | 237 content::WebUIDataSource::Add(profile, CreateCrashesUIHTMLSource()); |
244 } | 238 } |
245 | 239 |
246 // static | 240 // static |
247 base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes( | 241 base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes( |
248 ui::ScaleFactor scale_factor) { | 242 ui::ScaleFactor scale_factor) { |
249 return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale( | 243 return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale( |
250 IDR_CRASH_SAD_FAVICON, scale_factor); | 244 IDR_CRASH_SAD_FAVICON, scale_factor); |
251 } | 245 } |
OLD | NEW |