diff options
author | rkc@google.com <rkc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-22 10:38:54 +0000 |
---|---|---|
committer | rkc@google.com <rkc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-22 10:38:54 +0000 |
commit | ac1894aec051033fc13bc41e1399ac05f5df3cc6 (patch) | |
tree | e2363bfaa2cf79a0b497d4d9441b69e3979ad028 /chrome/browser/bug_report_util.cc | |
parent | d486304b803dcf7c247133edfdc14f486b1de54c (diff) | |
download | chromium_src-ac1894aec051033fc13bc41e1399ac05f5df3cc6.zip chromium_src-ac1894aec051033fc13bc41e1399ac05f5df3cc6.tar.gz chromium_src-ac1894aec051033fc13bc41e1399ac05f5df3cc6.tar.bz2 |
Build fixes to the CL
Review URL: http://codereview.chromium.org/3061044
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57019 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/bug_report_util.cc')
-rw-r--r-- | chrome/browser/bug_report_util.cc | 170 |
1 files changed, 143 insertions, 27 deletions
diff --git a/chrome/browser/bug_report_util.cc b/chrome/browser/bug_report_util.cc index d60ef4e..71d8612 100644 --- a/chrome/browser/bug_report_util.cc +++ b/chrome/browser/bug_report_util.cc @@ -4,22 +4,35 @@ #include "chrome/browser/bug_report_util.h" +#include <sstream> #include <string> +#include "app/l10n_util.h" +#include "base/command_line.h" #include "base/file_version_info.h" +#include "base/file_util.h" +#include "base/singleton.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/browser_list.h" #include "chrome/browser/browser_process_impl.h" #include "chrome/browser/profile.h" #include "chrome/browser/safe_browsing/safe_browsing_util.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/common/chrome_version_info.h" +#include "chrome/common/chrome_switches.h" #include "chrome/common/net/url_fetcher.h" #include "googleurl/src/gurl.h" +#include "grit/generated_resources.h" #include "grit/locale_settings.h" +#include "grit/theme_resources.h" #include "net/url_request/url_request_status.h" #include "unicode/locid.h" +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/notifications/system_notification.h" +#endif + namespace { const int kBugReportVersion = 1; @@ -28,27 +41,60 @@ const char kReportPhishingUrl[] = "http://www.google.com/safebrowsing/report_phish/"; // URL to post bug reports to. -const char* const kBugReportPostUrl = +static char const kBugReportPostUrl[] = "https://www.google.com/tools/feedback/chrome/__submit"; -const char* const kProtBufMimeType = "application/x-protobuf"; -const char* const kPngMimeType = "image/png"; +static char const kProtBufMimeType[] = "application/x-protobuf"; +static char const kPngMimeType[] = "image/png"; // Tags we use in product specific data -const char* const kPageTitleTag = "PAGE TITLE"; -const char* const kProblemTypeIdTag = "PROBLEM TYPE ID"; -const char* const kProblemTypeTag = "PROBLEM TYPE"; -const char* const kChromeVersionTag = "CHROME VERSION"; -const char* const kOsVersionTag = "OS VERSION"; +static char const kPageTitleTag[] = "PAGE TITLE"; +static char const kProblemTypeIdTag[] = "PROBLEM TYPE ID"; +static char const kProblemTypeTag[] = "PROBLEM TYPE"; +static char const kChromeVersionTag[] = "CHROME VERSION"; +static char const kOsVersionTag[] = "OS VERSION"; + +static char const kNotificationId[] = "feedback.chromeos"; + +static int const kHttpPostSuccessNoContent = 204; +static int const kHttpPostFailNoConnection = -1; +static int const kHttpPostFailClientError = 400; +static int const kHttpPostFailServerError = 500; + +} // namespace + +#if defined(OS_CHROMEOS) +class FeedbackNotification { + public: + // Previous notification cleanup is handled by scoped_ptr. + // Note: notification will show only on one profile at a time. + void Show(Profile* profile, const string16& message, bool urgent) { + notification_.reset( + new chromeos::SystemNotification(profile, kNotificationId, + IDR_STATUSBAR_FEEDBACK, + l10n_util::GetStringUTF16( + IDS_BUGREPORT_NOTIFICATION_TITLE))); + notification_->Show(message, urgent); + } -} // namespace + private: + FeedbackNotification() {} + friend struct DefaultSingletonTraits<FeedbackNotification>; + + scoped_ptr<chromeos::SystemNotification> notification_; + DISALLOW_COPY_AND_ASSIGN(FeedbackNotification); +}; +#endif // Simple URLFetcher::Delegate to clean up URLFetcher on completion. class BugReportUtil::PostCleanup : public URLFetcher::Delegate { public: +#if defined(OS_CHROMEOS) + explicit PostCleanup(Profile* profile); +#else PostCleanup(); - +#endif // Overridden from URLFetcher::Delegate. virtual void OnURLFetchComplete(const URLFetcher* source, const GURL& url, @@ -61,10 +107,17 @@ class BugReportUtil::PostCleanup : public URLFetcher::Delegate { virtual ~PostCleanup() {} private: + Profile* profile_; + DISALLOW_COPY_AND_ASSIGN(PostCleanup); }; -BugReportUtil::PostCleanup::PostCleanup() { +#if defined(OS_CHROMEOS) + BugReportUtil::PostCleanup::PostCleanup(Profile* profile) + : profile_(profile) { +#else + BugReportUtil::PostCleanup::PostCleanup() { +#endif } void BugReportUtil::PostCleanup::OnURLFetchComplete( @@ -74,10 +127,38 @@ void BugReportUtil::PostCleanup::OnURLFetchComplete( int response_code, const ResponseCookies& cookies, const std::string& data) { - // if not 204, something went wrong - if (response_code != 204) - LOG(WARNING) << "Submission to feedback server failed. Response code: " << - response_code << std::endl; + + std::stringstream error_stream; + if (response_code == kHttpPostSuccessNoContent) { + error_stream << "Success"; + } else if (response_code == kHttpPostFailNoConnection) { + error_stream << "No connection to server."; + } else if ((response_code > kHttpPostFailClientError) && + (response_code < kHttpPostFailServerError)) { + error_stream << "Client error: HTTP response code " << response_code; + } else if (response_code > kHttpPostFailServerError) { + error_stream << "Server error: HTTP response code " << response_code; + } else { + error_stream << "Unknown error: HTTP response code " << response_code; + } + + LOG(WARNING) << "Submission to feedback server (" << url << + ") status: " << error_stream.str() << std::endl; + +#if defined(OS_CHROMEOS) + // Show the notification to the user; this notification will stay active till + // either the user closes it, or we display another notification. + if (response_code == kHttpPostSuccessNoContent) { + Singleton<FeedbackNotification>()->Show(profile_, l10n_util::GetStringUTF16( + IDS_BUGREPORT_FEEDBACK_STATUS_SUCCESS), false); + } else { + Singleton<FeedbackNotification>()->Show(profile_, + l10n_util::GetStringFUTF16(IDS_BUGREPORT_FEEDBACK_STATUS_FAIL, + ASCIIToUTF16(error_stream.str())), + true); + } +#endif + // Delete the URLFetcher. delete source; // And then delete ourselves. @@ -112,9 +193,20 @@ void BugReportUtil::SetOSVersion(std::string *os_version) { } // static +std::string BugReportUtil::feedback_server_(""); + +// static +void BugReportUtil::SetFeedbackServer(const std::string& server) { + feedback_server_ = server; +} + + +// static void BugReportUtil::AddFeedbackData( userfeedback::ExternalExtensionSubmit* feedback_data, const std::string& key, const std::string& value) { + // We have no reason to log any empty values - gives us no data + if (value == "") return; // Create log_value object and add it to the web_data object userfeedback::ProductSpecificData log_value; log_value.set_key(key); @@ -128,19 +220,25 @@ void BugReportUtil::SendReport(Profile* profile, const std::string& page_title_text, int problem_type, const std::string& page_url_text, - const std::string& user_email_text, const std::string& description, const char* png_data, int png_data_length, int png_width, #if defined(OS_CHROMEOS) int png_height, - const std::string& problem_type_text, + const std::string& user_email_text, const chromeos::LogDictionaryType* const sys_info) { #else int png_height) { #endif - GURL post_url(kBugReportPostUrl); + GURL post_url; + + if (CommandLine::ForCurrentProcess()-> + HasSwitch(switches::kFeedbackServer)) + post_url = GURL(CommandLine::ForCurrentProcess()-> + GetSwitchValueASCII(switches::kFeedbackServer)); + else + post_url = GURL(kBugReportPostUrl); // Create google feedback protocol buffer objects userfeedback::ExternalExtensionSubmit feedback_data; @@ -160,23 +258,17 @@ void BugReportUtil::SendReport(Profile* profile, AddFeedbackData(&feedback_data, std::string(kPageTitleTag), page_title_text); - AddFeedbackData(&feedback_data, std::string(kProblemTypeIdTag), - StringPrintf("%d\r\n", problem_type)); - #if defined(OS_CHROMEOS) - AddFeedbackData(&feedback_data, std::string(kProblemTypeTag), - problem_type_text); -#endif - // Add the user e-mail to the feedback object common_data->set_user_email(user_email_text); +#endif // Add the description to the feedback object common_data->set_description(description); // Add the language std::string chrome_locale = g_browser_process->GetApplicationLocale(); - common_data->set_source_descripton_language(chrome_locale); + common_data->set_source_description_language(chrome_locale); // Set the url web_data->set_url(page_url_text); @@ -222,9 +314,33 @@ void BugReportUtil::SendReport(Profile* profile, *(feedback_data.mutable_screenshot()) = screenshot; } + // Set our Chrome specific data + userfeedback::ChromeData chrome_data; +#if defined(OS_CHROMEOS) + chrome_data.set_chrome_platform( + userfeedback::ChromeData_ChromePlatform_CHROME_OS); + userfeedback::ChromeOsData chrome_os_data; + chrome_os_data.set_category( + (userfeedback::ChromeOsData_ChromeOsCategory) problem_type); + *(chrome_data.mutable_chrome_os_data()) = chrome_os_data; +#else + chrome_data.set_chrome_platform( + userfeedback::ChromeData_ChromePlatform_CHROME_BROWSER); + userfeedback::ChromeBrowserData chrome_browser_data; + chrome_browser_data.set_category( + (userfeedback::ChromeBrowserData_ChromeBrowserCategory) problem_type); + *(chrome_data.mutable_chrome_browser_data()) = chrome_browser_data; +#endif + + *(feedback_data.mutable_chrome_data()) = chrome_data; + // We have the body of our POST, so send it off to the server. URLFetcher* fetcher = new URLFetcher(post_url, URLFetcher::POST, - new BugReportUtil::PostCleanup); +#if defined(OS_CHROMEOS) + new BugReportUtil::PostCleanup(profile)); +#else + new BugReportUtil::PostCleanup()); +#endif fetcher->set_request_context(profile->GetRequestContext()); std::string post_body; |