Index: chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
index 00a4f7f27770f7109240ad446ad66cd3dac5de49..f7890f3d1931bfcd4bf7983a42fb2351022a50f9 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
@@ -4,6 +4,7 @@ |
#include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
+#include "base/json/json_writer.h" |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/browsing_data/browsing_data_helper.h" |
#include "chrome/browser/password_manager/password_store_factory.h" |
@@ -15,8 +16,11 @@ |
#include "chrome/browser/ui/passwords/manage_passwords_icon.h" |
#include "chrome/browser/ui/passwords/password_bubble_experiment.h" |
#include "chrome/common/url_constants.h" |
+#include "components/feedback/feedback_data.h" |
+#include "components/feedback/feedback_util.h" |
#include "components/password_manager/content/common/credential_manager_types.h" |
#include "components/password_manager/core/browser/password_form_manager.h" |
+#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/navigation_details.h" |
#if defined(OS_ANDROID) |
@@ -24,6 +28,7 @@ |
#endif |
using autofill::PasswordFormMap; |
+using feedback::FeedbackData; |
using password_manager::PasswordFormManager; |
namespace { |
@@ -58,6 +63,49 @@ void DeepCopyMap(const autofill::PasswordFormMap& map, |
} // namespace |
+class ManagePasswordsUIController::URLCollectionFeedbackSender { |
+ public: |
+ explicit URLCollectionFeedbackSender(ManagePasswordsUIController* parent); |
+ ~URLCollectionFeedbackSender() = default; |
+ |
+ void SendFeedback(); |
+ |
+ private: |
+ std::string FormReport(); |
+ static constexpr char kPasswordManagerURLCollectionBucket[] = |
+ "PasswordManagerURLCollection"; |
+ ManagePasswordsUIController* parent_; |
+}; |
+constexpr char ManagePasswordsUIController::URLCollectionFeedbackSender:: |
+ kPasswordManagerURLCollectionBucket[]; |
+ |
+ManagePasswordsUIController::URLCollectionFeedbackSender:: |
+ URLCollectionFeedbackSender(ManagePasswordsUIController* parent) |
+ : parent_(parent) { |
+} |
+ |
+void ManagePasswordsUIController::URLCollectionFeedbackSender::SendFeedback() { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ scoped_refptr<FeedbackData> feedback_data = new FeedbackData(); |
+ feedback_data->set_category_tag(kPasswordManagerURLCollectionBucket); |
+ feedback_data->set_description(FormReport()); |
+ |
+ feedback_data->set_image(make_scoped_ptr(new std::string)); |
+ |
+ feedback_data->set_page_url(""); |
+ feedback_data->set_user_email(""); |
+ feedback_data->set_context(parent_->web_contents()->GetBrowserContext()); |
+ feedback_util::SendReport(feedback_data); |
+} |
+ |
+std::string |
+ManagePasswordsUIController::URLCollectionFeedbackSender::FormReport() { |
+ base::DictionaryValue dict; |
+ dict.SetString("url", parent_->origin().GetAsReferrer().spec()); |
+ std::string json; |
+ base::JSONWriter::Write(&dict, &json); |
+ return json; |
+} |
DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController); |
ManagePasswordsUIController::ManagePasswordsUIController( |
@@ -196,6 +244,12 @@ void ManagePasswordsUIController::SavePassword() { |
UpdateBubbleAndIconVisibility(); |
} |
+void ManagePasswordsUIController::SendURLFeedback() { |
+ ManagePasswordsUIController::URLCollectionFeedbackSender feedback_sender( |
+ this); |
+ feedback_sender.SendFeedback(); |
+} |
+ |
void ManagePasswordsUIController::ChooseCredential( |
bool was_chosen, |
const autofill::PasswordForm& form) { |