| 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) {
|
|
|