1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/autofill/core/common/save_password_progress_logger.h"
10 #include "base/logging.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h"
14 #include "components/autofill/core/common/password_form.h"
15 #include "testing/gtest/include/gtest/gtest.h"
18 using base::UTF8ToUTF16;
24 const char kTestString[] = "Message"; // Corresponds to STRING_MESSAGE.
26 class TestLogger : public SavePasswordProgressLogger {
28 bool LogsContainSubstring(const std::string& substring) {
29 return accumulated_log_.find(substring) != std::string::npos;
32 std::string accumulated_log() { return accumulated_log_; }
35 void SendLog(const std::string& log) override {
36 accumulated_log_.append(log);
39 std::string accumulated_log_;
44 TEST(SavePasswordProgressLoggerTest, LogPasswordForm) {
47 form.action = GURL("http://example.org/verysecret?verysecret");
48 form.password_element = UTF8ToUTF16("pwdelement");
49 form.password_value = UTF8ToUTF16("verysecret");
50 form.username_value = UTF8ToUTF16("verysecret");
51 logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
52 SCOPED_TRACE(testing::Message() << "Log string = ["
53 << logger.accumulated_log() << "]");
54 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
55 EXPECT_TRUE(logger.LogsContainSubstring("pwdelement"));
56 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
57 EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
60 TEST(SavePasswordProgressLoggerTest, LogPasswordFormElementID) {
61 // Test filtering element IDs.
64 const std::string kHTMLInside("Username <script> element");
65 const std::string kHTMLInsideExpected("username script element");
66 const std::string kIPAddressInside("y128.0.0.1Y");
67 const std::string kIPAddressInsideExpected("y128 0 0 1y");
68 const std::string kSpecialCharsInside("X@#a$%B&*c()D;:e+!x");
69 const std::string kSpecialCharsInsideExpected("x a b c d e x");
70 form.username_element = UTF8ToUTF16(kHTMLInside);
71 form.password_element = UTF8ToUTF16(kIPAddressInside);
72 form.new_password_element = UTF8ToUTF16(kSpecialCharsInside);
73 logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
74 SCOPED_TRACE(testing::Message() << "Log string = ["
75 << logger.accumulated_log() << "]");
76 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
77 EXPECT_FALSE(logger.LogsContainSubstring(kHTMLInside));
78 EXPECT_TRUE(logger.LogsContainSubstring(kHTMLInsideExpected));
79 EXPECT_FALSE(logger.LogsContainSubstring(kIPAddressInside));
80 EXPECT_TRUE(logger.LogsContainSubstring(kIPAddressInsideExpected));
81 EXPECT_FALSE(logger.LogsContainSubstring(kSpecialCharsInside));
82 EXPECT_TRUE(logger.LogsContainSubstring(kSpecialCharsInsideExpected));
85 TEST(SavePasswordProgressLoggerTest, LogHTMLForm) {
87 logger.LogHTMLForm(SavePasswordProgressLogger::STRING_MESSAGE,
89 GURL("http://example.org/verysecret?verysecret"));
90 SCOPED_TRACE(testing::Message() << "Log string = ["
91 << logger.accumulated_log() << "]");
92 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
93 EXPECT_TRUE(logger.LogsContainSubstring("form_name"));
94 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
95 EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
98 TEST(SavePasswordProgressLoggerTest, LogURL) {
100 logger.LogURL(SavePasswordProgressLogger::STRING_MESSAGE,
101 GURL("http://example.org/verysecret?verysecret"));
102 SCOPED_TRACE(testing::Message() << "Log string = ["
103 << logger.accumulated_log() << "]");
104 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
105 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
106 EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
109 TEST(SavePasswordProgressLoggerTest, LogBooleanTrue) {
111 logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, true);
112 SCOPED_TRACE(testing::Message() << "Log string = ["
113 << logger.accumulated_log() << "]");
114 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
115 EXPECT_TRUE(logger.LogsContainSubstring("true"));
118 TEST(SavePasswordProgressLoggerTest, LogBooleanFalse) {
120 logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, false);
121 SCOPED_TRACE(testing::Message() << "Log string = ["
122 << logger.accumulated_log() << "]");
123 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
124 EXPECT_TRUE(logger.LogsContainSubstring("false"));
127 TEST(SavePasswordProgressLoggerTest, LogSignedNumber) {
129 int signed_number = -12345;
130 logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, signed_number);
131 SCOPED_TRACE(testing::Message() << "Log string = ["
132 << logger.accumulated_log() << "]");
133 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
134 EXPECT_TRUE(logger.LogsContainSubstring("-12345"));
137 TEST(SavePasswordProgressLoggerTest, LogUnsignedNumber) {
139 size_t unsigned_number = 654321;
140 logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, unsigned_number);
141 SCOPED_TRACE(testing::Message() << "Log string = ["
142 << logger.accumulated_log() << "]");
143 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
144 EXPECT_TRUE(logger.LogsContainSubstring("654321"));
147 TEST(SavePasswordProgressLoggerTest, LogMessage) {
149 logger.LogMessage(SavePasswordProgressLogger::STRING_MESSAGE);
150 SCOPED_TRACE(testing::Message() << "Log string = ["
151 << logger.accumulated_log() << "]");
152 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
155 } // namespace autofill