Chromium Code Reviews| Index: components/autofill/content/renderer/password_form_conversion_utils.cc |
| diff --git a/components/autofill/content/renderer/password_form_conversion_utils.cc b/components/autofill/content/renderer/password_form_conversion_utils.cc |
| index 825f44621b91938fe3c784629d38498141d2b701..c47feeb6fe4f8ba505f2e82111bed5580be60cc3 100644 |
| --- a/components/autofill/content/renderer/password_form_conversion_utils.cc |
| +++ b/components/autofill/content/renderer/password_form_conversion_utils.cc |
| @@ -740,31 +740,37 @@ std::unique_ptr<PasswordForm> CreatePasswordFormFromUnownedInputElements( |
| } |
| bool HasAutocompleteAttributeValue(const blink::WebInputElement& element, |
| - const char* value_in_lowercase) { |
| - std::string autocomplete_value_lowercase = base::ToLowerASCII( |
| - base::UTF16ToUTF8(element.GetAttribute("autocomplete").Utf16())); |
| - |
| - std::vector<base::StringPiece> tokens = base::SplitStringPiece( |
| - autocomplete_value_lowercase, base::kWhitespaceASCII, |
| - base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| - |
| - return base::ContainsValue(tokens, value_in_lowercase); |
| + base::StringPiece value_in_lowercase) { |
| + CR_DEFINE_STATIC_LOCAL(WebString, kAutocomplete, ("autocomplete")); |
| + const std::string autocomplete_value = |
| + element.GetAttribute(kAutocomplete) |
| + .Utf8(WebString::UTF8ConversionMode::kStrictReplacingErrorsWithFFFD); |
| + |
| + std::vector<base::StringPiece> tokens = |
| + base::SplitStringPiece(autocomplete_value, base::kWhitespaceASCII, |
| + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| + return std::find_if(tokens.begin(), tokens.end(), |
| + [value_in_lowercase](base::StringPiece token) { |
|
dvadym
2017/06/09 11:39:48
Nit: it looks that you can avoid copying value_in_
pkalinnikov
2017/06/09 11:53:23
I assume you mean [value_in_lowercase](base::Strin
dvadym
2017/06/09 11:59:25
Acknowledged
|
| + return base::LowerCaseEqualsASCII(token, |
| + value_in_lowercase); |
| + }) != tokens.end(); |
| } |
| bool HasCreditCardAutocompleteAttributes( |
| const blink::WebInputElement& element) { |
| - std::string autocomplete_value_lowercase = base::ToLowerASCII( |
| - base::UTF16ToUTF8(element.GetAttribute("autocomplete").Utf16())); |
| - |
| - for (const auto& token : base::SplitStringPiece( |
| - autocomplete_value_lowercase, base::kWhitespaceASCII, |
| - base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) { |
| - if (base::StartsWith(token, kAutocompleteCreditCardPrefix, |
| - base::CompareCase::SENSITIVE)) { |
| - return true; |
| - } |
| - } |
| - return false; |
| + CR_DEFINE_STATIC_LOCAL(WebString, kAutocomplete, ("autocomplete")); |
| + const std::string autocomplete_value = |
| + element.GetAttribute(kAutocomplete) |
| + .Utf8(WebString::UTF8ConversionMode::kStrictReplacingErrorsWithFFFD); |
| + |
| + std::vector<base::StringPiece> tokens = |
| + base::SplitStringPiece(autocomplete_value, base::kWhitespaceASCII, |
| + base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| + return std::find_if( |
| + tokens.begin(), tokens.end(), [](base::StringPiece token) { |
|
dvadym
2017/06/09 11:39:47
Nit: base::StringPiece -> const base::StringPiece&
pkalinnikov
2017/06/09 11:53:23
Same argument as above.
dvadym
2017/06/09 11:59:25
Acknowledged
|
| + return base::StartsWith(token, kAutocompleteCreditCardPrefix, |
| + base::CompareCase::INSENSITIVE_ASCII); |
| + }) != tokens.end(); |
| } |
| bool IsCreditCardVerificationPasswordField( |