| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/renderer/autofill/password_generation_test_utils.h" |
| |
| #include <base/strings/utf_string_conversions.h> |
| #include "base/strings/stringprintf.h" |
| #include "components/autofill/content/renderer/form_autofill_util.h" |
| #include "components/autofill/content/renderer/password_generation_agent.h" |
| #include "components/autofill/core/common/password_form_generation_data.h" |
| #include "components/autofill/core/common/renderer_id.h" |
| #include "components/autofill/core/common/signatures.h" |
| #include "net/base/escape.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/blink/public/platform/web_string.h" |
| #include "third_party/blink/public/web/web_document.h" |
| #include "third_party/blink/public/web/web_form_element.h" |
| |
| using blink::WebDocument; |
| using blink::WebElement; |
| using blink::WebFormControlElement; |
| using blink::WebFormElement; |
| using blink::WebString; |
| using blink::WebVector; |
| |
| namespace autofill { |
| |
| namespace { |
| |
| // Events that should be triggered when Chrome fills a field. |
| const char* const kEvents[] = {"focus", "keydown", "input", |
| "change", "keyup", "blur"}; |
| |
| // Returns renderer id of WebInput element with id attribute |input_id|. |
| autofill::FieldRendererId GetRendererId(WebDocument document, |
| const char* input_id) { |
| WebElement element = document.GetElementById(WebString::FromUTF8(input_id)); |
| auto* input = ToWebInputElement(&element); |
| return autofill::FieldRendererId(input->UniqueRendererFormControlId()); |
| } |
| |
| } // namespace |
| |
| void SetFoundFormEligibleForGeneration( |
| PasswordGenerationAgent* generation_agent, |
| WebDocument document, |
| const char* new_password_id, |
| const char* cofirm_password_id) { |
| PasswordFormGenerationData data; |
| data.new_password_renderer_id = GetRendererId(document, new_password_id); |
| if (cofirm_password_id) { |
| data.confirmation_password_renderer_id = |
| GetRendererId(document, cofirm_password_id); |
| } |
| |
| generation_agent->FoundFormEligibleForGeneration(data); |
| } |
| |
| // Creates script that registers event listeners for |element_name| field. To |
| // check whether the listeners are called, check that the variables from |
| // |variables_to_check| are set to 1. |
| std::string CreateScriptToRegisterListeners( |
| const char* const element_name, |
| std::vector<base::string16>* variables_to_check) { |
| DCHECK(variables_to_check); |
| std::string element = element_name; |
| |
| std::string all_scripts = "<script>"; |
| for (const char* const event : kEvents) { |
| std::string script = base::StringPrintf( |
| "%s_%s_event = 0;" |
| "document.getElementById('%s').on%s = function() {" |
| " %s_%s_event = 1;" |
| "};", |
| element_name, event, element_name, event, element_name, event); |
| all_scripts += script; |
| variables_to_check->push_back(base::UTF8ToUTF16( |
| base::StringPrintf("%s_%s_event", element_name, event))); |
| } |
| |
| all_scripts += "</script>"; |
| return all_scripts; |
| } |
| |
| } // namespace autofill |