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

Unified Diff: chrome/browser/ui/webui/bug_report_ui.cc

Issue 7562001: Add memory usage info to SyslogsProvider, and clean up bug report screenshot data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Increase max entry size for stats included unzipped in feedback page. Created 9 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/memory_details.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/bug_report_ui.cc
diff --git a/chrome/browser/ui/webui/bug_report_ui.cc b/chrome/browser/ui/webui/bug_report_ui.cc
index 2e90b3144c362674a16ebc6866bae7c5d2fceeaa..d5511f110f5bb2516eaea166ca827093427b6cb7 100644
--- a/chrome/browser/ui/webui/bug_report_ui.cc
+++ b/chrome/browser/ui/webui/bug_report_ui.cc
@@ -127,20 +127,6 @@ int GetIndexOfFeedbackTab(Browser* browser) {
namespace browser {
-// TODO(rkc): Eventually find a better way to do this
-std::vector<unsigned char>* last_screenshot_png = 0;
-gfx::Rect screen_size;
-
-void RefreshLastScreenshot(Browser* browser) {
- if (last_screenshot_png)
- last_screenshot_png->clear();
- else
- last_screenshot_png = new std::vector<unsigned char>;
-
- gfx::NativeWindow native_window = browser->window()->GetNativeHandle();
- screen_size = browser::GrabWindowSnapshot(native_window, last_screenshot_png);
-}
-
void ShowHtmlBugReportView(Browser* browser,
const std::string& description_template,
size_t issue_type) {
@@ -155,7 +141,14 @@ void ShowHtmlBugReportView(Browser* browser,
return;
}
- RefreshLastScreenshot(browser);
+ std::vector<unsigned char>* last_screenshot_png =
+ BugReportUtil::GetScreenshotPng();
+ last_screenshot_png->clear();
+
+ gfx::NativeWindow native_window = browser->window()->GetNativeHandle();
+ BugReportUtil::SetScreenshotSize(
+ browser::GrabWindowSnapshot(native_window, last_screenshot_png));
+
std::string bug_report_url = std::string(chrome::kChromeUIBugReportURL) +
"#" + base::IntToString(browser->active_index()) +
"?description=" + EscapeUrlEncodedData(description_template, false) +
@@ -219,7 +212,7 @@ class BugReportHandler : public WebUIMessageHandler,
TabContents* tab_;
ScreenshotSource* screenshot_source_;
- BugReportData* bug_report_;
+ BugReportData* bug_report_data_;
std::string target_tab_url_;
#if defined(OS_CHROMEOS)
// Variables to track SyslogsProvider::RequestSyslogs callback.
@@ -386,62 +379,13 @@ void BugReportUIHTMLSource::StartDataRequest(const std::string& path,
////////////////////////////////////////////////////////////////////////////////
//
-// BugReportData
-//
-////////////////////////////////////////////////////////////////////////////////
-void BugReportData::SendReport() {
-#if defined(OS_CHROMEOS)
- // In case we already got the syslogs and sent the report, leave
- if (sent_report_) return;
- // Set send_report_ so that no one else processes SendReport
- sent_report_ = true;
-#endif
-
- int image_data_size = image_.size();
- char* image_data = image_data_size ?
- reinterpret_cast<char*>(&(image_.front())) : NULL;
- BugReportUtil::SendReport(profile_
- , problem_type_
- , page_url_
- , description_
- , image_data
- , image_data_size
- , browser::screen_size.width()
- , browser::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_) {
- delete sys_info_;
- sys_info_ = NULL;
- }
- if (zip_content_) {
- delete zip_content_;
- zip_content_ = NULL;
- }
-#endif
-
- // Once the report has been sent, this object has no purpose in life, delete
- // ourselves.
- delete this;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-//
// BugReportHandler
//
////////////////////////////////////////////////////////////////////////////////
BugReportHandler::BugReportHandler(TabContents* tab)
: tab_(tab),
screenshot_source_(NULL),
- bug_report_(NULL)
+ bug_report_data_(NULL)
#if defined(OS_CHROMEOS)
, syslogs_handle_(0)
#endif
@@ -449,12 +393,14 @@ BugReportHandler::BugReportHandler(TabContents* tab)
}
BugReportHandler::~BugReportHandler() {
- // Just in case we didn't send off bug_report_ to SendReport
- if (bug_report_) {
+ // Just in case we didn't send off bug_report_data_ to SendReport
+ if (bug_report_data_) {
// If we're deleting the report object, cancel feedback collection first
CancelFeedbackCollection();
- delete bug_report_;
+ delete bug_report_data_;
}
+ // Make sure we don't leave any screenshot data around.
+ BugReportUtil::ClearScreenshotPng();
}
void BugReportHandler::ClobberScreenshotsSource() {
@@ -464,16 +410,15 @@ void BugReportHandler::ClobberScreenshotsSource() {
Profile* profile = Profile::FromBrowserContext(tab_->browser_context());
profile->GetChromeURLDataManager()->AddDataSource(new ScreenshotSource(NULL));
- // clobber last screenshot
- if (browser::last_screenshot_png)
- browser::last_screenshot_png->clear();
+ BugReportUtil::ClearScreenshotPng();
}
void BugReportHandler::SetupScreenshotsSource() {
// If we don't already have a screenshot source object created, create one.
- if (!screenshot_source_)
- screenshot_source_ = new ScreenshotSource(browser::last_screenshot_png);
-
+ if (!screenshot_source_) {
+ screenshot_source_ =
+ new ScreenshotSource(BugReportUtil::GetScreenshotPng());
+ }
// Add the source to the data manager.
Profile* profile = Profile::FromBrowserContext(tab_->browser_context());
profile->GetChromeURLDataManager()->AddDataSource(screenshot_source_);
@@ -546,7 +491,8 @@ void BugReportHandler::RegisterMessages() {
}
void BugReportHandler::HandleGetDialogDefaults(const ListValue*) {
- bug_report_ = new BugReportData();
+ // Will delete itself when bug_report_data_->SendReport() is called.
+ bug_report_data_ = new BugReportData();
// send back values which the dialog js needs initially
ListValue dialog_defaults;
@@ -568,7 +514,7 @@ void BugReportHandler::HandleGetDialogDefaults(const ListValue*) {
true, // don't compress.
chromeos::system::SyslogsProvider::SYSLOGS_FEEDBACK,
&syslogs_consumer_,
- NewCallback(bug_report_, &BugReportData::SyslogsComplete));
+ NewCallback(bug_report_data_, &BugReportData::SyslogsComplete));
}
// 2: user e-mail
dialog_defaults.Append(new StringValue(GetUserEmail()));
@@ -598,7 +544,7 @@ void BugReportHandler::HandleRefreshSavedScreenshots(const ListValue*) {
void BugReportHandler::HandleSendReport(const ListValue* list_value) {
- if (!bug_report_) {
+ if (!bug_report_data_) {
LOG(ERROR) << "Bug report hasn't been intialized yet.";
return;
}
@@ -672,35 +618,35 @@ void BugReportHandler::HandleSendReport(const ListValue* list_value) {
CancelFeedbackCollection();
#endif
- // Update the data in bug_report_ so it can be sent
- bug_report_->UpdateData(web_ui_->GetProfile()
- , target_tab_url_
- , problem_type
- , page_url
- , description
- , image
+ // Update the data in bug_report_data_ so it can be sent
+ bug_report_data_->UpdateData(web_ui_->GetProfile()
+ , target_tab_url_
+ , problem_type
+ , page_url
+ , description
+ , image
#if defined(OS_CHROMEOS)
- , user_email
- , send_sys_info
- , false // sent_report
+ , user_email
+ , send_sys_info
+ , false // sent_report
#endif
- );
+ );
#if defined(OS_CHROMEOS)
// If we don't require sys_info, or we have it, or we never requested it
// (because libcros failed to load), then send the report now.
// Otherwise, the report will get sent when we receive sys_info.
- if (!send_sys_info || bug_report_->sys_info() != NULL ||
+ if (!send_sys_info || bug_report_data_->sys_info() != NULL ||
syslogs_handle_ == 0) {
- bug_report_->SendReport();
+ bug_report_data_->SendReport();
}
#else
- bug_report_->SendReport();
+ bug_report_data_->SendReport();
#endif
// Lose the pointer to the BugReportData object; the object will delete itself
// from SendReport, whether we called it, or will be called by the log
// completion routine.
- bug_report_ = NULL;
+ bug_report_data_ = NULL;
// Whether we sent the report, or if it will be sent by the Syslogs complete
// function, close our feedback tab anyway, we have no more use for it.
« no previous file with comments | « chrome/browser/memory_details.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698