Commit a50e7914 authored by Mariia Shvedchenko's avatar Mariia Shvedchenko Committed by Commit Bot

[Autofill] Implementation of PatternProvider class

Making class singleton, added implementation for methods.

Change-Id: I85fd35dff65a809e6b486ced91f7899e140fc667
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2404850Reviewed-by: default avatarChristoph Schwering <schwering@google.com>
Reviewed-by: default avatarMatthias Körber <koerber@google.com>
Commit-Queue: Mariia Shvedchenko <mariiash@google.com>
Cr-Commit-Position: refs/heads/master@{#810187}
parent e85e2dad
...@@ -19,8 +19,8 @@ autofill::MatchingPattern GetCompanyPatternEn() { ...@@ -19,8 +19,8 @@ autofill::MatchingPattern GetCompanyPatternEn() {
m_p.positive_pattern = "company|business|organization|organisation"; m_p.positive_pattern = "company|business|organization|organisation";
m_p.positive_score = 1.1f; m_p.positive_score = 1.1f;
m_p.negative_pattern = ""; m_p.negative_pattern = "";
m_p.match_field_attributes = autofill::MATCH_NAME; m_p.match_field_attributes = MATCH_NAME;
m_p.match_field_input_types = autofill::MATCH_TEXT; m_p.match_field_input_types = MATCH_TEXT;
m_p.language = "en"; m_p.language = "en";
return m_p; return m_p;
...@@ -33,8 +33,8 @@ autofill::MatchingPattern GetCompanyPatternDe() { ...@@ -33,8 +33,8 @@ autofill::MatchingPattern GetCompanyPatternDe() {
m_p.positive_pattern = "|(?<!con)firma|firmenname"; m_p.positive_pattern = "|(?<!con)firma|firmenname";
m_p.positive_score = 1.1f; m_p.positive_score = 1.1f;
m_p.negative_pattern = ""; m_p.negative_pattern = "";
m_p.match_field_attributes = autofill::MATCH_LABEL | autofill::MATCH_NAME; m_p.match_field_attributes = MATCH_LABEL | MATCH_NAME;
m_p.match_field_input_types = autofill::MATCH_TEXT; m_p.match_field_input_types = MATCH_TEXT;
m_p.language = "de"; m_p.language = "de";
return m_p; return m_p;
......
...@@ -229,7 +229,7 @@ bool FormField::MatchAndAdvance(AutofillScanner* scanner, ...@@ -229,7 +229,7 @@ bool FormField::MatchAndAdvance(AutofillScanner* scanner,
return false; return false;
} }
// static. // static
bool FormField::MatchAndAdvance(AutofillScanner* scanner, bool FormField::MatchAndAdvance(AutofillScanner* scanner,
const base::string16& pattern, const base::string16& pattern,
int match_type, int match_type,
......
...@@ -11,22 +11,39 @@ ...@@ -11,22 +11,39 @@
#include "components/autofill/core/browser/autofill_type.h" #include "components/autofill/core/browser/autofill_type.h"
namespace autofill { namespace autofill {
PatternProvider::PatternProvider(autofill::ServerFieldType type) { PatternProvider::PatternProvider() {
autofill::MatchingPattern kCompanyPatternEn = autofill::GetCompanyPatternEn(); auto& company_patterns = patterns_[AutofillType(COMPANY_NAME).ToString()];
autofill::MatchingPattern kCompanyPatternDe = autofill::GetCompanyPatternDe(); company_patterns["EN"].push_back(GetCompanyPatternEn());
company_patterns["DE"].push_back(GetCompanyPatternDe());
patterns_[AutofillType(COMPANY_NAME).ToString()]["en"] = kCompanyPatternEn;
patterns_[AutofillType(COMPANY_NAME).ToString()]["de"] = kCompanyPatternDe;
} }
PatternProvider::~PatternProvider() { PatternProvider::~PatternProvider() {
patterns_.clear(); patterns_.clear();
} }
autofill::MatchingPattern PatternProvider::GetSingleMatchPattern( void PatternProvider::SetPatterns(
autofill::ServerFieldType type, const std::map<std::string,
std::map<std::string, std::vector<MatchingPattern>>>&
patterns) {
patterns_ = patterns;
}
const std::vector<MatchingPattern>& PatternProvider::GetMatchPatterns(
const std::string& pattern_name,
const std::string& page_language) { const std::string& page_language) {
base::StringPiece type_s = autofill::FieldTypeToStringPiece(type); return patterns_[pattern_name][page_language];
return patterns_[type_s.as_string()][page_language];
} }
const std::vector<MatchingPattern>& PatternProvider::GetMatchPatterns(
ServerFieldType type,
const std::string& page_language) {
std::string pattern_name = AutofillType(type).ToString();
return GetMatchPatterns(pattern_name, page_language);
}
PatternProvider* PatternProvider::getInstance() {
static base::NoDestructor<PatternProvider> instance;
return instance.get();
}
} // namespace autofill } // namespace autofill
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
#define COMPONENTS_AUTOFILL_CORE_BROWSER_PATTERN_PROVIDER_PATTERN_PROVIDER_H_ #define COMPONENTS_AUTOFILL_CORE_BROWSER_PATTERN_PROVIDER_PATTERN_PROVIDER_H_
#include <string> #include <string>
#include "base/macros.h" #include "base/macros.h"
#include "base/no_destructor.h"
#include "base/synchronization/lock.h" #include "base/synchronization/lock.h"
#include "components/autofill/core/browser/field_types.h" #include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/form_parsing/autofill_parsing_utils.h" #include "components/autofill/core/browser/form_parsing/autofill_parsing_utils.h"
...@@ -17,10 +19,13 @@ namespace autofill { ...@@ -17,10 +19,13 @@ namespace autofill {
class PatternProvider { class PatternProvider {
public: public:
PatternProvider(); static PatternProvider* getInstance();
PatternProvider(ServerFieldType type, const std::string& page_language);
explicit PatternProvider(ServerFieldType type); // Setter for loaded patterns from external storage.
~PatternProvider(); void SetPatterns(
const std::map<std::string,
std::map<std::string, std::vector<MatchingPattern>>>&
patterns);
// Provides us with all patterns that can match our field type and page // Provides us with all patterns that can match our field type and page
// language. // language.
...@@ -30,22 +35,25 @@ class PatternProvider { ...@@ -30,22 +35,25 @@ class PatternProvider {
const std::vector<MatchingPattern>& GetMatchPatterns( const std::vector<MatchingPattern>& GetMatchPatterns(
const std::string& pattern_name, const std::string& pattern_name,
const std::string& page_launguage); const std::string& page_language);
// Provides us with all patterns that can match our field type. // Provides us with all patterns that can match our field type.
const std::vector<MatchingPattern>& GetAllPatternsBaseOnType( const std::vector<MatchingPattern>& GetAllPatternsBaseOnType(
ServerFieldType type); ServerFieldType type);
// Function that returns pattern that match our field type and page language.
MatchingPattern GetSingleMatchPattern(ServerFieldType type,
const std::string& page_language);
private: private:
PatternProvider();
~PatternProvider();
// Func to sort the incoming map by score. // Func to sort the incoming map by score.
void SortPatternsByScore(std::vector<MatchingPattern>& patterns); void SortPatternsByScore(std::vector<MatchingPattern>& patterns);
// Local map to store patterns keyed by field type and page language. // Local map to store a vector of patterns keyed by field type and
std::map<std::string, std::map<std::string, MatchingPattern>> patterns_; // page language.
std::map<std::string, std::map<std::string, std::vector<MatchingPattern>>>
patterns_;
friend class base::NoDestructor<PatternProvider>;
}; };
} // namespace autofill } // namespace autofill
#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_PATTERN_PROVIDER_PATTERN_PROVIDER_H_ #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_PATTERN_PROVIDER_PATTERN_PROVIDER_H_
\ No newline at end of file
...@@ -28,11 +28,12 @@ bool operator==(const MatchingPattern& mp1, const MatchingPattern& mp2) { ...@@ -28,11 +28,12 @@ bool operator==(const MatchingPattern& mp1, const MatchingPattern& mp2) {
TEST(AutofillPatternProvider, Single_Match) { TEST(AutofillPatternProvider, Single_Match) {
MatchingPattern kCompanyPatternEn = GetCompanyPatternEn(); MatchingPattern kCompanyPatternEn = GetCompanyPatternEn();
MatchingPattern kCompanyPatternDe = GetCompanyPatternDe(); MatchingPattern kCompanyPatternDe = GetCompanyPatternDe();
PatternProvider pattern_provider(COMPANY_NAME); PatternProvider* pattern_provider = PatternProvider::getInstance();
EXPECT_EQ(pattern_provider.GetSingleMatchPattern(COMPANY_NAME, "en"),
ASSERT_TRUE(pattern_provider->GetMatchPatterns("COMPANY_NAME", "EN").size() >
0);
EXPECT_EQ(pattern_provider->GetMatchPatterns("COMPANY_NAME", "EN")[0],
kCompanyPatternEn); kCompanyPatternEn);
EXPECT_EQ(pattern_provider.GetSingleMatchPattern(COMPANY_NAME, "de"),
kCompanyPatternDe);
} }
} // namespace autofill } // namespace autofill
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment