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