diff options
Diffstat (limited to 'chrome/browser/views/bug_report_view.h')
-rw-r--r-- | chrome/browser/views/bug_report_view.h | 172 |
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_ |