Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(496)

Unified Diff: components/password_manager/core/browser/form_fetcher_impl.cc

Issue 2912783002: Measure how often PSL and same-organization name credentials are suppressed. (Closed)
Patch Set: Addressed comments from kolos@. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/password_manager/core/browser/form_fetcher_impl.cc
diff --git a/components/password_manager/core/browser/form_fetcher_impl.cc b/components/password_manager/core/browser/form_fetcher_impl.cc
index 8b7b55f52f0c5807f1925298dccb62cf476aa79c..c8127b0ebd5dbb63263dd04ec277a0243ad658d2 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl.cc
@@ -15,6 +15,7 @@
#include "components/password_manager/core/browser/password_manager_client.h"
#include "components/password_manager/core/browser/password_manager_util.h"
#include "components/password_manager/core/browser/password_store.h"
+#include "components/password_manager/core/browser/psl_matching_helper.h"
#include "components/password_manager/core/browser/statistics_table.h"
using autofill::PasswordForm;
@@ -46,6 +47,43 @@ std::vector<std::unique_ptr<PasswordForm>> SplitFederatedMatches(
return federated_matches;
}
+void SplitSuppressedFormsAndAssignTo(
+ const PasswordStore::FormDigest& observed_form_digest,
+ std::vector<std::unique_ptr<PasswordForm>> suppressed_forms,
+ std::vector<std::unique_ptr<PasswordForm>>* same_origin_https_forms,
+ std::vector<std::unique_ptr<PasswordForm>>* psl_matching_forms,
+ std::vector<std::unique_ptr<PasswordForm>>* same_organization_name_forms) {
+ DCHECK(same_origin_https_forms);
+ DCHECK(psl_matching_forms);
+ DCHECK(same_organization_name_forms);
+ same_origin_https_forms->clear();
+ psl_matching_forms->clear();
+ same_organization_name_forms->clear();
+ for (auto& form : suppressed_forms) {
+ switch (GetMatchResult(*form, observed_form_digest)) {
+ case MatchResult::PSL_MATCH:
+ psl_matching_forms->push_back(std::move(form));
+ break;
+ case MatchResult::NO_MATCH:
+ if (form->origin.host() != observed_form_digest.origin.host()) {
+ same_organization_name_forms->push_back(std::move(form));
+ } else if (form->origin.SchemeIs(url::kHttpsScheme) &&
+ observed_form_digest.origin.SchemeIs(url::kHttpScheme)) {
+ same_origin_https_forms->push_back(std::move(form));
+ } else {
+ // HTTP form suppressed on HTTPS observed page: The HTTP->HTTPS
+ // migration can leave tons of such HTTP forms behind, ignore these.
+ }
+ break;
+ case MatchResult::EXACT_MATCH:
+ case MatchResult::FEDERATED_MATCH:
+ case MatchResult::FEDERATED_PSL_MATCH:
+ NOTREACHED() << "Suppressed match cannot be exact or federated.";
+ break;
+ }
+ }
+}
+
// Create a vector of const PasswordForm from a vector of
// unique_ptr<PasswordForm> by applying get() item-wise.
std::vector<const PasswordForm*> MakeWeakCopies(
@@ -74,12 +112,11 @@ std::vector<std::unique_ptr<PasswordForm>> MakeCopies(
FormFetcherImpl::FormFetcherImpl(PasswordStore::FormDigest form_digest,
const PasswordManagerClient* client,
bool should_migrate_http_passwords,
- bool should_query_suppressed_https_forms)
+ bool should_query_suppressed_forms)
: form_digest_(std::move(form_digest)),
client_(client),
should_migrate_http_passwords_(should_migrate_http_passwords),
- should_query_suppressed_https_forms_(
- should_query_suppressed_https_forms) {}
+ should_query_suppressed_forms_(should_query_suppressed_forms) {}
FormFetcherImpl::~FormFetcherImpl() = default;
@@ -111,11 +148,21 @@ const std::vector<const PasswordForm*>& FormFetcherImpl::GetFederatedMatches()
const std::vector<const PasswordForm*>&
FormFetcherImpl::GetSuppressedHTTPSForms() const {
- return weak_suppressed_https_forms_;
+ return weak_suppressed_same_origin_https_forms_;
+}
+
+const std::vector<const PasswordForm*>&
+FormFetcherImpl::GetSuppressedPSLMatchingForms() const {
+ return weak_suppressed_psl_matching_forms_;
}
-bool FormFetcherImpl::DidCompleteQueryingSuppressedHTTPSForms() const {
- return did_complete_querying_suppressed_https_forms_;
+const std::vector<const PasswordForm*>&
+FormFetcherImpl::GetSuppressedSameOrganizationNameForms() const {
+ return weak_suppressed_same_organization_name_forms_;
+}
+
+bool FormFetcherImpl::DidCompleteQueryingSuppressedForms() const {
+ return did_complete_querying_suppressed_forms_;
}
void FormFetcherImpl::OnGetPasswordStoreResults(
@@ -138,18 +185,15 @@ void FormFetcherImpl::OnGetPasswordStoreResults(
logger->LogNumber(Logger::STRING_NUMBER_RESULTS, results.size());
}
- // If this is a non-secure Web origin (i.e. HTTP), kick off the discovery of
- // credentials stored for the secure version of this origin (i.e. HTTPS),
- // regardless of whether there are some precisely matching |results|.
- //
- // These results are used only for recording metrics at PasswordFormManager
- // desctruction time, this is why they are requested so late.
- if (should_query_suppressed_https_forms_ &&
+ // Kick off the discovery of suppressed credentials, regardless of whether
+ // there are some precisely matching |results|. These results are used only
+ // for recording metrics at PasswordFormManager desctruction time, this is why
+ // they are requested this late.
+ if (should_query_suppressed_forms_ &&
form_digest_.scheme == PasswordForm::SCHEME_HTML &&
- form_digest_.origin.SchemeIs(url::kHttpScheme)) {
- suppressed_https_form_fetcher_ =
- base::MakeUnique<SuppressedHTTPSFormFetcher>(form_digest_.signon_realm,
- client_, this);
+ GURL(form_digest_.signon_realm).SchemeIsHTTPOrHTTPS()) {
+ suppressed_form_fetcher_ = base::MakeUnique<SuppressedFormFetcher>(
+ form_digest_.signon_realm, client_, this);
}
if (should_migrate_http_passwords_ && results.empty() &&
@@ -174,12 +218,19 @@ void FormFetcherImpl::ProcessMigratedForms(
ProcessPasswordStoreResults(std::move(forms));
}
-void FormFetcherImpl::ProcessSuppressedHTTPSForms(
+void FormFetcherImpl::ProcessSuppressedForms(
std::vector<std::unique_ptr<autofill::PasswordForm>> forms) {
- did_complete_querying_suppressed_https_forms_ = true;
-
- suppressed_https_forms_ = std::move(forms);
- weak_suppressed_https_forms_ = MakeWeakCopies(suppressed_https_forms_);
+ did_complete_querying_suppressed_forms_ = true;
+ SplitSuppressedFormsAndAssignTo(form_digest_, std::move(forms),
+ &suppressed_same_origin_https_forms_,
+ &suppressed_psl_matching_forms_,
+ &suppressed_same_organization_name_forms_);
+ weak_suppressed_same_origin_https_forms_ =
+ MakeWeakCopies(suppressed_same_origin_https_forms_);
+ weak_suppressed_psl_matching_forms_ =
+ MakeWeakCopies(suppressed_psl_matching_forms_);
+ weak_suppressed_same_organization_name_forms_ =
+ MakeWeakCopies(suppressed_same_organization_name_forms_);
}
void FormFetcherImpl::Fetch() {
@@ -223,17 +274,26 @@ std::unique_ptr<FormFetcher> FormFetcherImpl::Clone() {
// Create the copy without the "HTTPS migration" activated. If it was needed,
// then it was done by |this| already.
auto result = base::MakeUnique<FormFetcherImpl>(
- form_digest_, client_, false, should_query_suppressed_https_forms_);
+ form_digest_, client_, false, should_query_suppressed_forms_);
result->non_federated_ = MakeCopies(this->non_federated_);
result->federated_ = MakeCopies(this->federated_);
result->interactions_stats_ = this->interactions_stats_;
- result->suppressed_https_forms_ = MakeCopies(this->suppressed_https_forms_);
+ result->suppressed_same_origin_https_forms_ =
+ MakeCopies(this->suppressed_same_origin_https_forms_);
+ result->suppressed_psl_matching_forms_ =
+ MakeCopies(this->suppressed_psl_matching_forms_);
+ result->suppressed_same_organization_name_forms_ =
+ MakeCopies(this->suppressed_same_organization_name_forms_);
result->weak_non_federated_ = MakeWeakCopies(result->non_federated_);
result->weak_federated_ = MakeWeakCopies(result->federated_);
- result->weak_suppressed_https_forms_ =
- MakeWeakCopies(result->suppressed_https_forms_);
+ result->weak_suppressed_same_origin_https_forms_ =
+ MakeWeakCopies(result->suppressed_same_origin_https_forms_);
+ result->weak_suppressed_psl_matching_forms_ =
+ MakeWeakCopies(result->suppressed_psl_matching_forms_);
+ result->weak_suppressed_same_organization_name_forms_ =
+ MakeWeakCopies(result->suppressed_same_organization_name_forms_);
result->filtered_count_ = this->filtered_count_;
result->state_ = this->state_;

Powered by Google App Engine
This is Rietveld 408576698