blob: 1c40aae9916aea62b03f9a2b70669c8270bc6088 [file] [log] [blame]
// Copyright 2018 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 "components/autofill/content/renderer/field_data_manager.h"
#include "base/strings/utf_string_conversions.h"
#include "content/public/test/render_view_test.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_element_collection.h"
#include "third_party/blink/public/web/web_form_control_element.h"
#include "third_party/blink/public/web/web_local_frame.h"
namespace autofill {
class FieldDataManagerTest : public content::RenderViewTest {
public:
FieldDataManagerTest() {}
~FieldDataManagerTest() override {}
protected:
void SetUp() override {
RenderViewTest::SetUp();
LoadHTML(
"<input type='text' id='name1' value='first'>"
"<input type='password' id='name2' value=''>");
blink::WebLocalFrame* web_frame = GetMainFrame();
blink::WebElementCollection inputs =
web_frame->GetDocument().GetElementsByHTMLTagName("input");
for (blink::WebElement element = inputs.FirstItem(); !element.IsNull();
element = inputs.NextItem()) {
control_elements_.push_back(element.To<blink::WebFormControlElement>());
}
}
void TearDown() override {
control_elements_.clear();
RenderViewTest::TearDown();
}
std::vector<blink::WebFormControlElement> control_elements_;
};
TEST_F(FieldDataManagerTest, UpdateFieldDataMap) {
FieldDataManager field_data_manager;
field_data_manager.UpdateFieldDataMap(control_elements_[0],
control_elements_[0].Value().Utf16(),
FieldPropertiesFlags::USER_TYPED);
const uint32_t id = control_elements_[0].UniqueRendererFormControlId();
EXPECT_TRUE(field_data_manager.HasFieldData(id));
EXPECT_EQ(base::UTF8ToUTF16("first"),
field_data_manager.GetUserTypedValue(id));
EXPECT_EQ(FieldPropertiesFlags::USER_TYPED,
field_data_manager.GetFieldPropertiesMask(id));
field_data_manager.UpdateFieldDataMap(control_elements_[0],
base::UTF8ToUTF16("newvalue"),
FieldPropertiesFlags::AUTOFILLED);
EXPECT_EQ(base::UTF8ToUTF16("newvalue"),
field_data_manager.GetUserTypedValue(id));
FieldPropertiesMask mask =
FieldPropertiesFlags::USER_TYPED | FieldPropertiesFlags::AUTOFILLED;
EXPECT_EQ(mask, field_data_manager.GetFieldPropertiesMask(id));
field_data_manager.UpdateFieldDataMap(control_elements_[1],
control_elements_[1].Value().Utf16(),
FieldPropertiesFlags::AUTOFILLED);
EXPECT_EQ(FieldPropertiesFlags::NO_FLAGS,
field_data_manager.GetFieldPropertiesMask(
control_elements_[1].UniqueRendererFormControlId()));
field_data_manager.ClearData();
EXPECT_FALSE(field_data_manager.HasFieldData(id));
}
TEST_F(FieldDataManagerTest, UpdateFieldDataMapWithNullValue) {
FieldDataManager field_data_manager;
field_data_manager.UpdateFieldDataMapWithNullValue(
control_elements_[0], FieldPropertiesFlags::USER_TYPED);
const uint32_t id = control_elements_[0].UniqueRendererFormControlId();
EXPECT_TRUE(field_data_manager.HasFieldData(id));
EXPECT_EQ(base::string16(), field_data_manager.GetUserTypedValue(id));
EXPECT_EQ(FieldPropertiesFlags::USER_TYPED,
field_data_manager.GetFieldPropertiesMask(id));
field_data_manager.UpdateFieldDataMapWithNullValue(
control_elements_[0], FieldPropertiesFlags::AUTOFILLED);
EXPECT_EQ(base::string16(), field_data_manager.GetUserTypedValue(id));
FieldPropertiesMask mask =
FieldPropertiesFlags::USER_TYPED | FieldPropertiesFlags::AUTOFILLED;
EXPECT_EQ(mask, field_data_manager.GetFieldPropertiesMask(id));
field_data_manager.UpdateFieldDataMap(control_elements_[0],
control_elements_[0].Value().Utf16(),
FieldPropertiesFlags::AUTOFILLED);
EXPECT_EQ(base::UTF8ToUTF16("first"),
field_data_manager.GetUserTypedValue(id));
}
TEST_F(FieldDataManagerTest, FindMachedValue) {
FieldDataManager field_data_manager;
field_data_manager.UpdateFieldDataMap(control_elements_[0],
control_elements_[0].Value().Utf16(),
FieldPropertiesFlags::USER_TYPED);
EXPECT_TRUE(
field_data_manager.FindMachedValue(base::UTF8ToUTF16("first_element")));
EXPECT_FALSE(
field_data_manager.FindMachedValue(base::UTF8ToUTF16("second_element")));
}
} // namespace autofill