diff options
Diffstat (limited to 'chromium/components/autofill/core/common')
6 files changed, 69 insertions, 20 deletions
diff --git a/chromium/components/autofill/core/common/BUILD.gn b/chromium/components/autofill/core/common/BUILD.gn index e58160d0360..24f45074e60 100644 --- a/chromium/components/autofill/core/common/BUILD.gn +++ b/chromium/components/autofill/core/common/BUILD.gn @@ -49,7 +49,6 @@ static_library("common") { "//base", "//base:i18n", "//components/variations", - "//third_party/re2", "//url", ] diff --git a/chromium/components/autofill/core/common/DEPS b/chromium/components/autofill/core/common/DEPS deleted file mode 100644 index 0de07bbaf08..00000000000 --- a/chromium/components/autofill/core/common/DEPS +++ /dev/null @@ -1,3 +0,0 @@ -include_rules = [ - "+third_party/re2", -] diff --git a/chromium/components/autofill/core/common/form_data.cc b/chromium/components/autofill/core/common/form_data.cc index 81de550a22b..11c651377c7 100644 --- a/chromium/components/autofill/core/common/form_data.cc +++ b/chromium/components/autofill/core/common/form_data.cc @@ -5,7 +5,6 @@ #include "components/autofill/core/common/form_data.h" #include <stddef.h> - #include <tuple> #include "base/base64.h" @@ -18,7 +17,7 @@ namespace autofill { namespace { -const int kPickleVersion = 5; +const int kPickleVersion = 6; bool ReadGURL(base::PickleIterator* iter, GURL* url) { std::string spec; @@ -66,6 +65,7 @@ FormData::FormData(const FormData& data) : name(data.name), origin(data.origin), action(data.action), + main_frame_origin(data.main_frame_origin), is_form_tag(data.is_form_tag), is_formless_checkout(data.is_formless_checkout), fields(data.fields) {} @@ -119,7 +119,8 @@ bool FormData::operator<(const FormData& form) const { std::ostream& operator<<(std::ostream& os, const FormData& form) { os << base::UTF16ToUTF8(form.name) << " " << form.origin << " " << form.action - << " " << form.is_form_tag << " " << form.is_formless_checkout << " " + << " " << form.main_frame_origin << " " << form.is_form_tag << " " + << form.is_formless_checkout << " " << "Fields:"; for (size_t i = 0; i < form.fields.size(); ++i) { os << form.fields[i] << ","; @@ -135,6 +136,7 @@ void SerializeFormData(const FormData& form_data, base::Pickle* pickle) { SerializeFormFieldDataVector(form_data.fields, pickle); pickle->WriteBool(form_data.is_form_tag); pickle->WriteBool(form_data.is_formless_checkout); + pickle->WriteString(form_data.main_frame_origin.spec()); } void SerializeFormDataToBase64String(const FormData& form_data, @@ -198,6 +200,13 @@ bool DeserializeFormData(base::PickleIterator* iter, FormData* form_data) { } } + if (version >= 6) { + if (!ReadGURL(iter, &temp_form_data.main_frame_origin)) { + LogDeserializationError(version); + return false; + } + } + *form_data = temp_form_data; return true; } diff --git a/chromium/components/autofill/core/common/form_data.h b/chromium/components/autofill/core/common/form_data.h index 5e5a42936f1..c7064803a12 100644 --- a/chromium/components/autofill/core/common/form_data.h +++ b/chromium/components/autofill/core/common/form_data.h @@ -41,6 +41,8 @@ struct FormData { GURL origin; // The action target of the form. GURL action; + // The URL of main frame containing this form. + GURL main_frame_origin; // True if this form is a form tag. bool is_form_tag; // True if the form is made of unowned fields in a non checkout flow. diff --git a/chromium/components/autofill/core/common/form_data_unittest.cc b/chromium/components/autofill/core/common/form_data_unittest.cc index ee174b715eb..c6dee3bec05 100644 --- a/chromium/components/autofill/core/common/form_data_unittest.cc +++ b/chromium/components/autofill/core/common/form_data_unittest.cc @@ -87,6 +87,21 @@ void SerializeInVersion5Format(const FormData& form_data, pickle->WriteBool(form_data.is_formless_checkout); } +void SerializeInVersion6Format(const FormData& form_data, + base::Pickle* pickle) { + pickle->WriteInt(6); + pickle->WriteString16(form_data.name); + pickle->WriteString(form_data.origin.spec()); + pickle->WriteString(form_data.action.spec()); + pickle->WriteInt(static_cast<int>(form_data.fields.size())); + for (size_t i = 0; i < form_data.fields.size(); ++i) { + SerializeFormFieldData(form_data.fields[i], pickle); + } + pickle->WriteBool(form_data.is_form_tag); + pickle->WriteBool(form_data.is_formless_checkout); + pickle->WriteString(form_data.main_frame_origin.spec()); +} + // This function serializes the form data into the pickle in incorrect format // (no version number). void SerializeIncorrectFormat(const FormData& form_data, base::Pickle* pickle) { @@ -102,8 +117,9 @@ void SerializeIncorrectFormat(const FormData& form_data, base::Pickle* pickle) { void FillInDummyFormData(FormData* data) { data->name = base::ASCIIToUTF16("name"); - data->origin = GURL("origin"); - data->action = GURL("action"); + data->origin = GURL("https://example.com"); + data->action = GURL("https://example.com/action"); + data->main_frame_origin = GURL("https://origin-example.com"); data->is_form_tag = true; // Default value. data->is_formless_checkout = false; // Default value. @@ -249,6 +265,21 @@ TEST(FormDataTest, Serialize_v5_Deserialize_vCurrent) { EXPECT_TRUE(actual.SameFormAs(data)); } +TEST(FormDataTest, Serialize_v6_Deserialize_vCurrent) { + FormData data; + FillInDummyFormData(&data); + data.is_formless_checkout = true; + + base::Pickle pickle; + SerializeInVersion6Format(data, &pickle); + + base::PickleIterator iter(pickle); + FormData actual; + EXPECT_TRUE(DeserializeFormData(&iter, &actual)); + + EXPECT_TRUE(actual.SameFormAs(data)); +} + TEST(FormDataTest, SerializeIncorrectFormatAndDeserialize) { FormData data; FillInDummyFormData(&data); diff --git a/chromium/components/autofill/core/common/signatures_util.cc b/chromium/components/autofill/core/common/signatures_util.cc index 8e7695eac75..df549b97d2a 100644 --- a/chromium/components/autofill/core/common/signatures_util.cc +++ b/chromium/components/autofill/core/common/signatures_util.cc @@ -4,30 +4,41 @@ #include "components/autofill/core/common/signatures_util.h" +#include <cctype> + #include "base/sha1.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/common/autofill_util.h" #include "components/autofill/core/common/form_data.h" #include "components/autofill/core/common/form_field_data.h" -#include "third_party/re2/src/re2/re2.h" -#include "third_party/re2/src/re2/stringpiece.h" #include "url/gurl.h" namespace autofill { namespace { -// Strip away >= 5 consecutive digits. -const char kIgnorePatternInFieldName[] = "\\d{5,}"; - -// Returns a copy of |input| without all occurrences of -// |kIgnorePatternInFieldName| +// Returns a copy of |input| without >= 5 consecutive digits. std::string StripDigitsIfRequired(const base::string16& input) { - std::string return_string = base::UTF16ToUTF8(input); - re2::RE2::GlobalReplace(&return_string, re2::RE2(kIgnorePatternInFieldName), - re2::StringPiece()); - return return_string; + std::string input_utf8 = base::UTF16ToUTF8(input); + std::string result; + result.reserve(input_utf8.length()); + + for (size_t i = 0; i < input_utf8.length();) { + if (std::isdigit(input_utf8[i])) { + size_t count = 0; + while (i < input_utf8.length() && std::isdigit(input_utf8[i])) { + i++; + count++; + } + if (count < 5) + result.append(input_utf8, i - count, count); + } else { + result.push_back(input_utf8[i]); + i++; + } + } + return result; } } // namespace |