1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_VIEWS_BUG_REPORT_VIEW_H_
#define CHROME_BROWSER_VIEWS_BUG_REPORT_VIEW_H_
#include "chrome/common/net/url_fetcher.h"
#include "gfx/rect.h"
#include "googleurl/src/gurl.h"
#include "views/controls/button/radio_button.h"
#include "views/controls/combobox/combobox.h"
#include "views/controls/textfield/textfield.h"
#include "views/controls/link.h"
#include "views/controls/image_view.h"
#include "views/view.h"
#include "views/window/dialog_delegate.h"
namespace views {
class Checkbox;
class Label;
class Throbber;
class Window;
class RadioButton;
class Link;
}
class Profile;
class TabContents;
class BugReportComboBoxModel;
// BugReportView draws the dialog that allows the user to report a
// bug in rendering a particular page (note: this is not a crash
// report, which are handled separately by Breakpad). It packages
// up the URL, a text description, and optionally a screenshot and/or
// the HTML page source, and submits them as an HTTP POST to the
// URL stored in the string resource IDS_BUGREPORT_POST_URL.
//
// Note: The UI team hasn't defined yet how the bug report UI will look like.
// So now use dialog as a placeholder.
class BugReportView : public views::View,
public views::DialogDelegate,
public views::Combobox::Listener,
#if defined(OS_CHROMEOS)
public views::LinkController,
#endif
public views::Textfield::Controller {
public:
explicit BugReportView(Profile* profile, TabContents* tab);
virtual ~BugReportView();
// NOTE: set_png_data takes ownership of the vector
void set_png_data(std::vector<unsigned char> *png_data) {
png_data_.reset(png_data);
};
void set_screenshot_size(const gfx::Rect& screenshot_size) {
screenshot_size_ = screenshot_size;
};
// Set all additional reporting controls to disabled
// if phishing report
void UpdateReportingControls(bool is_phishing_report);
// Overridden from views::View:
virtual gfx::Size GetPreferredSize();
// views::Textfield::Controller implementation:
virtual void ContentsChanged(views::Textfield* sender,
const string16& new_contents);
virtual bool HandleKeystroke(views::Textfield* sender,
const views::Textfield::Keystroke& key);
// views::Combobox::Listener implementation:
virtual void ItemChanged(views::Combobox* combobox, int prev_index,
int new_index);
#if defined(OS_CHROMEOS)
// Overridden from views::LinkController:
virtual void LinkActivated(views::Link* source, int event_flags);
#endif
// Overridden from views::DialogDelegate:
virtual std::wstring GetDialogButtonLabel(
MessageBoxFlags::DialogButton button) const;
virtual int GetDefaultDialogButton() const;
virtual bool CanResize() const;
virtual bool CanMaximize() const;
virtual bool IsAlwaysOnTop() const;
virtual bool HasAlwaysOnTopMenu() const;
virtual bool IsModal() const;
virtual std::wstring GetWindowTitle() const;
virtual bool Accept();
virtual views::View* GetContentsView();
private:
class PostCleanup;
// Set OS Version information in a string (maj.minor.build SP)
void SetOSVersion(std::string *os_version);
// Initializes the controls on the dialog.
void SetupControl();
// helper function to create a MIME part boundary string
void CreateMimeBoundary(std::string *out);
// Sends the data via an HTTP POST
void SendReport();
// Redirects the user to Google's phishing reporting page.
void ReportPhishing();
views::Label* bug_type_label_;
views::Combobox* bug_type_combo_;
views::Label* page_title_label_;
views::Label* page_title_text_;
views::Label* page_url_label_;
views::Textfield* page_url_text_;
views::Label* description_label_;
views::Textfield* description_text_;
views::Checkbox* include_page_source_checkbox_;
#if defined(OS_CHROMEOS)
views::RadioButton* include_last_screen_image_radio_;
views::ImageView* last_screenshot_iv_;
views::RadioButton* include_new_screen_image_radio_;
views::Checkbox* include_system_information_checkbox_;
views::Link* system_information_url_;
#endif
// TODO: #else this once the BugReport function is fixed up
views::Checkbox* include_page_image_checkbox_;
scoped_ptr<BugReportComboBoxModel> bug_type_model_;
Profile* profile_;
std::wstring version_;
gfx::Rect screenshot_size_;
scoped_ptr< std::vector<unsigned char> > png_data_;
TabContents* tab_;
// Used to distinguish the report type: Phishing or other.
int problem_type_;
// Save the description the user types in when we clear the dialog for the
// phishing option. If the user changes the report type back, we reinstate
// their original text so they don't have to type it again.
std::wstring old_report_text_;
DISALLOW_COPY_AND_ASSIGN(BugReportView);
};
#endif // CHROME_BROWSER_VIEWS_BUG_REPORT_VIEW_H_
|