Index: chrome/browser/views/bug_report_view.cc |
=================================================================== |
--- chrome/browser/views/bug_report_view.cc (revision 30345) |
+++ chrome/browser/views/bug_report_view.cc (working copy) |
@@ -9,6 +9,7 @@ |
#include "app/win_util.h" |
#include "base/file_version_info.h" |
#include "base/string_util.h" |
+#include "chrome/browser/bug_report_util.h" |
#include "chrome/browser/net/url_fetcher.h" |
#include "chrome/browser/profile.h" |
#include "chrome/browser/safe_browsing/safe_browsing_util.h" |
@@ -39,10 +40,6 @@ |
// Number of lines description field can display at one time. |
static const int kDescriptionLines = 5; |
-// Google's phishing reporting URL. |
-static const char kReportPhishingUrl[] = |
- "http://www.google.com/safebrowsing/report_phish/"; |
- |
class BugReportComboBoxModel : public ComboboxModel { |
public: |
BugReportComboBoxModel() {} |
@@ -95,22 +92,6 @@ |
DISALLOW_COPY_AND_ASSIGN(BugReportComboBoxModel); |
}; |
-// Simple URLFetcher::Delegate to clean up URLFetcher on completion |
-// (since the BugReportView will be gone by then). |
-class BugReportView::PostCleanup : public URLFetcher::Delegate { |
- public: |
- PostCleanup(); |
- // Overridden from URLFetcher::Delegate. |
- virtual void OnURLFetchComplete(const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data); |
- private: |
- DISALLOW_COPY_AND_ASSIGN(PostCleanup); |
-}; |
- |
namespace browser { |
// Global "display this dialog" function declared in browser_dialogs.h. |
@@ -134,22 +115,6 @@ |
} // namespace browser |
-BugReportView::PostCleanup::PostCleanup() { |
-} |
- |
-void BugReportView::PostCleanup::OnURLFetchComplete( |
- const URLFetcher* source, |
- const GURL& url, |
- const URLRequestStatus& status, |
- int response_code, |
- const ResponseCookies& cookies, |
- const std::string& data) { |
- // Delete the URLFetcher. |
- delete source; |
- // And then delete ourselves. |
- delete this; |
-} |
- |
// BugReportView - create and submit a bug report from the user. |
// This is separate from crash reporting, which is handled by Breakpad. |
// |
@@ -348,9 +313,17 @@ |
bool BugReportView::Accept() { |
if (IsDialogButtonEnabled(MessageBoxFlags::DIALOGBUTTON_OK)) { |
if (problem_type_ == BugReportComboBoxModel::PHISHING_PAGE) |
- ReportPhishing(); |
+ BugReportUtil::ReportPhishing(tab_, |
+ WideToUTF8(page_url_text_->text())); |
else |
- SendReport(); |
+ BugReportUtil::SendReport(profile_, |
+ WideToUTF8(page_title_text_->GetText()), |
+ problem_type_, |
+ WideToUTF8(page_url_text_->text()), |
+ WideToUTF8(description_text_->text()), |
+ include_page_image_checkbox_->checked() && png_data_.get() ? |
+ reinterpret_cast<const char *>(&((*png_data_.get())[0])) : NULL, |
+ png_data_->size()); |
} |
return true; |
} |
@@ -358,157 +331,3 @@ |
views::View* BugReportView::GetContentsView() { |
return this; |
} |
- |
-// SetOSVersion copies the maj.minor.build + servicePack_string |
-// into a string (for Windows only). This should probably be |
-// in a util somewhere. We currently have: |
-// win_util::GetWinVersion returns WinVersion, which is just |
-// an enum of 2000, XP, 2003, or VISTA. Not enough detail for |
-// bug reports. |
-// base::SysInfo::OperatingSystemVersion returns an std::string |
-// but doesn't include the build or service pack. That function |
-// is probably the right one to extend, but will require changing |
-// all the call sites or making it a wrapper around another util. |
-void BugReportView::SetOSVersion(std::string *os_version) { |
- OSVERSIONINFO osvi; |
- ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); |
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
- |
- if (GetVersionEx(&osvi)) { |
- *os_version = StringPrintf("%d.%d.%d %S", |
- osvi.dwMajorVersion, |
- osvi.dwMinorVersion, |
- osvi.dwBuildNumber, |
- osvi.szCSDVersion); |
- } else { |
- *os_version = "unknown"; |
- } |
-} |
- |
-// Create a MIME boundary marker (27 '-' characters followed by 16 hex digits). |
-void BugReportView::CreateMimeBoundary(std::string *out) { |
- int r1 = rand(); |
- int r2 = rand(); |
- SStringPrintf(out, "---------------------------%08X%08X", r1, r2); |
-} |
- |
-void BugReportView::SendReport() { |
- std::wstring post_url = l10n_util::GetString(IDS_BUGREPORT_POST_URL); |
- std::string mime_boundary; |
- CreateMimeBoundary(&mime_boundary); |
- |
- // Create a request body and add the mandatory parameters. |
- std::string post_body; |
- |
- // Add the protocol version: |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"data_version\"\r\n\r\n"); |
- post_body.append(StringPrintf("%d\r\n", kBugReportVersion)); |
- |
- // Add the page title. |
- post_body.append("--" + mime_boundary + "\r\n"); |
- std::string page_title = WideToUTF8(page_title_text_->GetText()); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"title\"\r\n\r\n"); |
- post_body.append(page_title + "\r\n"); |
- |
- // Add the problem type. |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"problem\"\r\n\r\n"); |
- post_body.append(StringPrintf("%d\r\n", problem_type_)); |
- |
- // Add in the URL, if we have one. |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"url\"\r\n\r\n"); |
- |
- // Convert URL to UTF8. |
- std::string report_url = WideToUTF8(page_url_text_->text()); |
- if (report_url.empty()) { |
- post_body.append("n/a\r\n"); |
- } else { |
- post_body.append(report_url + "\r\n"); |
- } |
- |
- // Add Chrome version. |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"chrome_version\"\r\n\r\n"); |
- |
- std::string version = WideToUTF8(version_); |
- if (version.empty()) { |
- post_body.append("n/a\r\n"); |
- } else { |
- post_body.append(version + "\r\n"); |
- } |
- |
- // Add OS version (eg, for WinXP SP2: "5.1.2600 Service Pack 2"). |
- std::string os_version = ""; |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"os_version\"\r\n\r\n"); |
- SetOSVersion(&os_version); |
- post_body.append(os_version + "\r\n"); |
- |
- // Add locale. |
- icu::Locale locale = icu::Locale::getDefault(); |
- const char *lang = locale.getLanguage(); |
- std::string chrome_locale = (lang)? lang:"en"; |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"chrome_locale\"\r\n\r\n"); |
- post_body.append(chrome_locale + "\r\n"); |
- |
- // Add a description if we have one. |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; " |
- "name=\"description\"\r\n\r\n"); |
- |
- std::string description = WideToUTF8(description_text_->text()); |
- if (description.empty()) { |
- post_body.append("n/a\r\n"); |
- } else { |
- post_body.append(description + "\r\n"); |
- } |
- |
- // Include the page image if we have one. |
- if (include_page_image_checkbox_->checked() && png_data_.get()) { |
- post_body.append("--" + mime_boundary + "\r\n"); |
- post_body.append("Content-Disposition: form-data; name=\"screenshot\"; " |
- "filename=\"screenshot.png\"\r\n"); |
- post_body.append("Content-Type: application/octet-stream\r\n"); |
- post_body.append(StringPrintf("Content-Length: %lu\r\n\r\n", |
- png_data_->size())); |
- // The following relies on the fact that STL vectors are guaranteed to |
- // be stored contiguously. |
- post_body.append(reinterpret_cast<const char *>(&((*png_data_)[0])), |
- png_data_->size()); |
- post_body.append("\r\n"); |
- } |
- |
- // TODO(awalker): include the page source if we can get it. |
- if (include_page_source_checkbox_->checked()) { |
- } |
- |
- // Terminate the body. |
- post_body.append("--" + mime_boundary + "--\r\n"); |
- |
- // We have the body of our POST, so send it off to the server. |
- URLFetcher* fetcher = new URLFetcher(post_url_, URLFetcher::POST, |
- new BugReportView::PostCleanup); |
- fetcher->set_request_context(profile_->GetRequestContext()); |
- std::string mime_type("multipart/form-data; boundary="); |
- mime_type += mime_boundary; |
- fetcher->set_upload_data(mime_type, post_body); |
- fetcher->Start(); |
-} |
- |
-void BugReportView::ReportPhishing() { |
- tab_->controller().LoadURL( |
- safe_browsing_util::GeneratePhishingReportUrl( |
- kReportPhishingUrl, WideToUTF8(page_url_text_->text())), |
- GURL(), |
- PageTransition::LINK); |
-} |