summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/bug_report_view.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/bug_report_view.h')
-rw-r--r--chrome/browser/views/bug_report_view.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/chrome/browser/views/bug_report_view.h b/chrome/browser/views/bug_report_view.h
new file mode 100644
index 0000000..feeb0f3
--- /dev/null
+++ b/chrome/browser/views/bug_report_view.h
@@ -0,0 +1,172 @@
+// Copyright (c) 2010 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"
+
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/cros/syslogs_library.h"
+#include "chrome/browser/chromeos/cros/cros_library.h"
+#endif
+
+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, system information and optionally
+// a screenshot; then it submits the info through https to the google
+// feedback chrome end-point.
+//
+// Note: This UI is being used for the Chrome OS dogfood release only
+// In the very next iteration, this will be replaced by a HTML
+// based UI, which will be common for all platforms
+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:
+ BugReportView(Profile* profile, TabContents* tab);
+ virtual ~BugReportView();
+
+ // NOTE: set_captured_image takes ownership of the vector
+ void set_captured_image(std::vector<unsigned char>* png_data) {
+ captured_image_.reset(png_data);
+ }
+
+ void set_screen_size(const gfx::Rect& screen_size) {
+ screen_size_ = screen_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);
+
+ // Disable the include last image radio control
+ void DisableLastImageRadio() {
+ include_last_screen_image_radio_->SetEnabled(false);
+ }
+
+ // NOTE: set_last_image takes ownership of the vector
+ void set_last_image(std::vector<unsigned char>* png_data) {
+ last_image_.reset(png_data);
+ }
+#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::Label* user_email_label_;
+ views::Textfield* user_email_text_;
+ views::RadioButton* include_new_screen_image_radio_;
+ views::RadioButton* include_last_screen_image_radio_;
+ views::RadioButton* include_no_screen_image_radio_;
+ views::Link* system_information_url_control_;
+
+ scoped_ptr<chromeos::LogDictionaryType> sys_info_;
+ scoped_ptr< std::vector<unsigned char> > last_image_;
+#endif
+ views::Checkbox* include_page_image_checkbox_;
+
+
+ scoped_ptr<BugReportComboBoxModel> bug_type_model_;
+
+ Profile* profile_;
+
+ std::wstring version_;
+ gfx::Rect screen_size_;
+ scoped_ptr< std::vector<unsigned char> > captured_image_;
+
+ 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_