summaryrefslogtreecommitdiff
path: root/chromium/components/autofill/core/common
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/autofill/core/common')
-rw-r--r--chromium/components/autofill/core/common/BUILD.gn1
-rw-r--r--chromium/components/autofill/core/common/DEPS3
-rw-r--r--chromium/components/autofill/core/common/form_data.cc15
-rw-r--r--chromium/components/autofill/core/common/form_data.h2
-rw-r--r--chromium/components/autofill/core/common/form_data_unittest.cc35
-rw-r--r--chromium/components/autofill/core/common/signatures_util.cc33
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