Index: chrome/browser/bug_report_data.cc |
diff --git a/chrome/browser/bug_report_data.cc b/chrome/browser/bug_report_data.cc |
index 45eb45d11ee9ec844b2634c2dd53c6a2e95fee01..4fccd796e73c07fac318ff047c5acc7fee5745da 100644 |
--- a/chrome/browser/bug_report_data.cc |
+++ b/chrome/browser/bug_report_data.cc |
@@ -4,6 +4,9 @@ |
#include "chrome/browser/bug_report_data.h" |
+#include "chrome/browser/bug_report_util.h" |
+#include "content/browser/browser_thread.h" |
+ |
#if defined(OS_CHROMEOS) |
#include "chrome/browser/chromeos/notifications/system_notification.h" |
#endif |
@@ -34,6 +37,7 @@ void BugReportData::UpdateData(Profile* profile, |
, const bool sent_report |
#endif |
) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
profile_ = profile; |
target_tab_url_ = target_tab_url; |
problem_type_ = problem_type; |
@@ -47,11 +51,58 @@ void BugReportData::UpdateData(Profile* profile, |
#endif |
} |
+void BugReportData::SendReport() { |
stevenjb
2011/08/03 01:55:20
Moved from bug_report_ui.cc
|
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+#if defined(OS_CHROMEOS) |
+ if (sent_report_) |
+ return; // We already received the syslogs and sent the report. |
+ |
+ // Set send_report_ to ensure that we only send one report. |
+ sent_report_ = true; |
+#endif |
+ |
+ int image_data_size = image_.size(); |
+ char* image_data = image_data_size ? |
+ reinterpret_cast<char*>(&(image_.front())) : NULL; |
+ gfx::Rect& screen_size = BugReportUtil::GetScreenshotSize(); |
+ BugReportUtil::SendReport(profile_ |
+ , problem_type_ |
+ , page_url_ |
+ , description_ |
+ , image_data |
+ , image_data_size |
+ , screen_size.width() |
+ , screen_size.height() |
+#if defined(OS_CHROMEOS) |
+ , user_email_ |
+ , zip_content_ ? zip_content_->c_str() : NULL |
+ , zip_content_ ? zip_content_->length() : 0 |
+ , send_sys_info_ ? sys_info_ : NULL |
+#endif |
+ ); |
+ |
+#if defined(OS_CHROMEOS) |
+ if (sys_info_) { |
James Cook
2011/08/03 17:06:49
Don't need to check if pointer is non-null, just c
stevenjb
2011/08/03 19:11:39
True, but since we are also setting variables to N
|
+ delete sys_info_; |
+ sys_info_ = NULL; |
+ } |
+ if (zip_content_) { |
+ delete zip_content_; |
+ zip_content_ = NULL; |
+ } |
+#endif |
+ |
+ // Delete this object once the report has been sent. |
+ delete this; |
+} |
#if defined(OS_CHROMEOS) |
-// Called from the same thread as HandleGetDialogDefaults, i.e. the UI thread. |
+// SyslogsComplete may be called before UpdateData, in which case, we do not |
+// want to delete the logs that were gathered, and we do not want to send the |
+// report either. Instead simply populate |sys_info_| and |zip_content_|. |
void BugReportData::SyslogsComplete(chromeos::system::LogDictionaryType* logs, |
std::string* zip_content) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
if (sent_report_) { |
// We already sent the report, just delete the data. |
if (logs) |