Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Side by Side Diff: chrome/browser/ui/webui/crashes_ui.cc

Issue 2268783002: Manual crash uploads for mac and win (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 void HandleRequestCrashes(const base::ListValue* args); 85 void HandleRequestCrashes(const base::ListValue* args);
86 86
87 #if defined(OS_CHROMEOS) 87 #if defined(OS_CHROMEOS)
88 // Asynchronously triggers crash uploading. Called from JS. 88 // Asynchronously triggers crash uploading. Called from JS.
89 void HandleRequestUploads(const base::ListValue* args); 89 void HandleRequestUploads(const base::ListValue* args);
90 #endif 90 #endif
91 91
92 // Sends the recent crashes list JS. 92 // Sends the recent crashes list JS.
93 void UpdateUI(); 93 void UpdateUI();
94 94
95 #if defined(OS_WIN) || defined(OS_MACOSX)
96 // Asynchronously requests a user triggered upload. Called from JS.
97 void HandleRequestSingleCrashUpload(const base::ListValue* args);
98 #endif
99
95 scoped_refptr<CrashUploadList> upload_list_; 100 scoped_refptr<CrashUploadList> upload_list_;
96 bool list_available_; 101 bool list_available_;
97 bool first_load_; 102 bool first_load_;
98 103
99 DISALLOW_COPY_AND_ASSIGN(CrashesDOMHandler); 104 DISALLOW_COPY_AND_ASSIGN(CrashesDOMHandler);
100 }; 105 };
101 106
102 CrashesDOMHandler::CrashesDOMHandler() 107 CrashesDOMHandler::CrashesDOMHandler()
103 : list_available_(false), first_load_(true) { 108 : list_available_(false), first_load_(true) {
104 upload_list_ = CreateCrashUploadList(this); 109 upload_list_ = CreateCrashUploadList(this);
105 } 110 }
106 111
107 CrashesDOMHandler::~CrashesDOMHandler() { 112 CrashesDOMHandler::~CrashesDOMHandler() {
108 upload_list_->ClearDelegate(); 113 upload_list_->ClearDelegate();
109 } 114 }
110 115
111 void CrashesDOMHandler::RegisterMessages() { 116 void CrashesDOMHandler::RegisterMessages() {
112 upload_list_->LoadUploadListAsynchronously(); 117 upload_list_->LoadUploadListAsynchronously();
113 web_ui()->RegisterMessageCallback( 118 web_ui()->RegisterMessageCallback(
114 crash::kCrashesUIRequestCrashList, 119 crash::kCrashesUIRequestCrashList,
115 base::Bind(&CrashesDOMHandler::HandleRequestCrashes, 120 base::Bind(&CrashesDOMHandler::HandleRequestCrashes,
116 base::Unretained(this))); 121 base::Unretained(this)));
117 122
118 #if defined(OS_CHROMEOS) 123 #if defined(OS_CHROMEOS)
119 web_ui()->RegisterMessageCallback( 124 web_ui()->RegisterMessageCallback(
120 crash::kCrashesUIRequestCrashUpload, 125 crash::kCrashesUIRequestCrashUpload,
121 base::Bind(&CrashesDOMHandler::HandleRequestUploads, 126 base::Bind(&CrashesDOMHandler::HandleRequestUploads,
122 base::Unretained(this))); 127 base::Unretained(this)));
123 #endif 128 #endif
129
130 #if defined(OS_WIN) || defined(OS_MACOSX)
131 web_ui()->RegisterMessageCallback(
132 crash::kCrashesUIRequestSingleCrashUpload,
133 base::Bind(&CrashesDOMHandler::HandleRequestSingleCrashUpload,
134 base::Unretained(this)));
135 #endif
124 } 136 }
125 137
126 void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) { 138 void CrashesDOMHandler::HandleRequestCrashes(const base::ListValue* args) {
127 if (first_load_) { 139 if (first_load_) {
128 first_load_ = false; 140 first_load_ = false;
129 if (list_available_) 141 if (list_available_)
130 UpdateUI(); 142 UpdateUI();
131 } else { 143 } else {
132 list_available_ = false; 144 list_available_ = false;
133 upload_list_->LoadUploadListAsynchronously(); 145 upload_list_->LoadUploadListAsynchronously();
(...skipping 19 matching lines...) Expand all
153 void CrashesDOMHandler::UpdateUI() { 165 void CrashesDOMHandler::UpdateUI() {
154 bool crash_reporting_enabled = 166 bool crash_reporting_enabled =
155 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(); 167 ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled();
156 168
157 bool system_crash_reporter = false; 169 bool system_crash_reporter = false;
158 #if defined(OS_CHROMEOS) 170 #if defined(OS_CHROMEOS)
159 // Chrome OS has a system crash reporter. 171 // Chrome OS has a system crash reporter.
160 system_crash_reporter = true; 172 system_crash_reporter = true;
161 #endif 173 #endif
162 174
175 bool support_manual_uploads = false;
176 #if defined(OS_WIN) || defined(OS_MACOSX)
177 // Maunal uploads are supported only for Windows and Mac platforms.
178 support_manual_uploads = true;
179 #endif
180
163 base::ListValue crash_list; 181 base::ListValue crash_list;
164 if (crash_reporting_enabled) 182 if (crash_reporting_enabled)
165 crash::UploadListToValue(upload_list_.get(), &crash_list); 183 crash::UploadListToValue(upload_list_.get(), &crash_list);
166 184
167 base::FundamentalValue enabled(crash_reporting_enabled); 185 base::FundamentalValue enabled(crash_reporting_enabled);
168 base::FundamentalValue dynamic_backend(system_crash_reporter); 186 base::FundamentalValue dynamic_backend(system_crash_reporter);
187 base::FundamentalValue manual_uploads(support_manual_uploads);
169 base::StringValue version(version_info::GetVersionNumber()); 188 base::StringValue version(version_info::GetVersionNumber());
170 base::StringValue os_string(base::SysInfo::OperatingSystemName() + " " + 189 base::StringValue os_string(base::SysInfo::OperatingSystemName() + " " +
171 base::SysInfo::OperatingSystemVersion()); 190 base::SysInfo::OperatingSystemVersion());
172 191
173 std::vector<const base::Value*> args; 192 std::vector<const base::Value*> args;
174 args.push_back(&enabled); 193 args.push_back(&enabled);
175 args.push_back(&dynamic_backend); 194 args.push_back(&dynamic_backend);
195 args.push_back(&manual_uploads);
176 args.push_back(&crash_list); 196 args.push_back(&crash_list);
177 args.push_back(&version); 197 args.push_back(&version);
178 args.push_back(&os_string); 198 args.push_back(&os_string);
179 web_ui()->CallJavascriptFunctionUnsafe(crash::kCrashesUIUpdateCrashList, 199 web_ui()->CallJavascriptFunctionUnsafe(crash::kCrashesUIUpdateCrashList,
180 args); 200 args);
181 } 201 }
182 202
203 #if defined(OS_WIN) || defined(OS_MACOSX)
204 void CrashesDOMHandler::HandleRequestSingleCrashUpload(
205 const base::ListValue* args) {
206 std::string local_id;
207 if (!args || !args->GetString(0, &local_id))
208 return;
209 upload_list_->RequestSingleCrashUploadAsync(local_id);
210 }
211 #endif
212
183 } // namespace 213 } // namespace
184 214
185 /////////////////////////////////////////////////////////////////////////////// 215 ///////////////////////////////////////////////////////////////////////////////
186 // 216 //
187 // CrashesUI 217 // CrashesUI
188 // 218 //
189 /////////////////////////////////////////////////////////////////////////////// 219 ///////////////////////////////////////////////////////////////////////////////
190 220
191 CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { 221 CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) {
192 web_ui->AddMessageHandler(new CrashesDOMHandler()); 222 web_ui->AddMessageHandler(new CrashesDOMHandler());
193 223
194 // Set up the chrome://crashes/ source. 224 // Set up the chrome://crashes/ source.
195 Profile* profile = Profile::FromWebUI(web_ui); 225 Profile* profile = Profile::FromWebUI(web_ui);
196 content::WebUIDataSource::Add(profile, CreateCrashesUIHTMLSource()); 226 content::WebUIDataSource::Add(profile, CreateCrashesUIHTMLSource());
197 } 227 }
198 228
199 // static 229 // static
200 base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes( 230 base::RefCountedMemory* CrashesUI::GetFaviconResourceBytes(
201 ui::ScaleFactor scale_factor) { 231 ui::ScaleFactor scale_factor) {
202 return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale( 232 return ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
203 IDR_CRASH_SAD_FAVICON, scale_factor); 233 IDR_CRASH_SAD_FAVICON, scale_factor);
204 } 234 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698