1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_BUG_REPORT_UTIL_H_ 6 #define CHROME_BROWSER_BUG_REPORT_UTIL_H_ 7 #pragma once 8 9 #include <string> 10 11 #include "base/basictypes.h" 12 #include "chrome/browser/userfeedback/proto/common.pb.h" 13 #include "chrome/browser/userfeedback/proto/extension.pb.h" 14 #include "chrome/browser/userfeedback/proto/math.pb.h" 15 #include "ui/gfx/rect.h" 16 17 #if defined(OS_MACOSX) 18 #include "base/sys_info.h" 19 #elif defined(OS_WIN) 20 #include "base/win/windows_version.h" 21 #elif defined(OS_CHROMEOS) 22 #include "chrome/browser/chromeos/cros/syslogs_library.h" 23 #include "chrome/browser/chromeos/cros/cros_library.h" 24 #endif 25 26 class Profile; 27 class TabContents; 28 29 class BugReportUtil { 30 public: 31 32 #if defined(OS_MACOSX) 33 enum BugType { 34 PAGE_WONT_LOAD = 0, 35 PAGE_LOOKS_ODD, 36 PHISHING_PAGE, 37 CANT_SIGN_IN, 38 CHROME_MISBEHAVES, 39 SOMETHING_MISSING, 40 BROWSER_CRASH, 41 OTHER_PROBLEM 42 }; 43 #endif 44 45 46 // SetOSVersion copies the maj.minor.build + servicePack_string 47 // into a string. We currently have: 48 // base::win::GetVersion returns WinVersion, which is just 49 // an enum of 2000, XP, 2003, or VISTA. Not enough detail for 50 // bug reports. 51 // base::SysInfo::OperatingSystemVersion returns an std::string 52 // but doesn't include the build or service pack. That function 53 // is probably the right one to extend, but will require changing 54 // all the call sites or making it a wrapper around another util. 55 static void SetOSVersion(std::string *os_version); 56 57 // This sets the address of the feedback server to be used by SendReport 58 static void SetFeedbackServer(const std::string& server); 59 60 // Send the feedback report after the specified delay 61 static void DispatchFeedback(Profile* profile, std::string* feedback_data, 62 int64 delay); 63 64 65 // Generates bug report data. 66 static void SendReport(Profile* profile, 67 int problem_type, 68 const std::string& page_url_text, 69 const std::string& description, 70 const char* png_data, 71 int png_data_length, 72 int png_width, 73 #if defined(OS_CHROMEOS) 74 int png_height, 75 const std::string& user_email_text, 76 const char* zipped_logs_data, 77 int zipped_logs_length, 78 const chromeos::LogDictionaryType* const sys_info); 79 #else 80 int png_height); 81 #endif 82 83 // Redirects the user to Google's phishing reporting page. 84 static void ReportPhishing(TabContents* currentTab, 85 const std::string& phishing_url); 86 87 class PostCleanup; 88 89 private: 90 // Add a key value pair to the feedback object 91 static void AddFeedbackData( 92 userfeedback::ExternalExtensionSubmit* feedback_data, 93 const std::string& key, const std::string& value); 94 95 // Send the feedback report 96 static void SendFeedback(Profile* profile, std::string* feedback_data, 97 int64 previous_delay); 98 99 #if defined(OS_CHROMEOS) 100 static bool ValidFeedbackSize(const std::string& content); 101 #endif 102 103 static std::string feedback_server_; 104 105 DISALLOW_IMPLICIT_CONSTRUCTORS(BugReportUtil); 106 }; 107 108 #endif // CHROME_BROWSER_BUG_REPORT_UTIL_H_ 109