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 26class Profile; 27class TabContents; 28 29class 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