blob: 0de91ac06225003fe6420c685ece2a4a6c4b0295 [file] [log] [blame]
// Copyright 2014 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/core/common/save_password_progress_logger.h"
#include <limits>
#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/common/password_form.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
using base::UTF8ToUTF16;
namespace autofill {
namespace {
const char kTestString[] = "Message"; // Corresponds to STRING_MESSAGE.
class TestLogger : public SavePasswordProgressLogger {
public:
bool LogsContainSubstring(const std::string& substring) {
return accumulated_log_.find(substring) != std::string::npos;
}
std::string accumulated_log() { return accumulated_log_; }
private:
virtual void SendLog(const std::string& log) OVERRIDE {
accumulated_log_.append(log);
}
std::string accumulated_log_;
};
}; // namespace
TEST(SavePasswordProgressLoggerTest, LogPasswordForm) {
TestLogger logger;
PasswordForm form;
form.action = GURL("http://example.org/verysecret?verysecret");
form.password_element = UTF8ToUTF16("pwdelement");
form.password_value = UTF8ToUTF16("verysecret");
form.username_value = UTF8ToUTF16("verysecret");
logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("pwdelement"));
EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
}
TEST(SavePasswordProgressLoggerTest, LogPasswordFormElementID) {
// Test filtering element IDs.
TestLogger logger;
PasswordForm form;
const std::string kHTMLInside("Username <script> element");
const std::string kHTMLInsideExpected("username script element");
const std::string kIPAddressInside("y128.0.0.1Y");
const std::string kIPAddressInsideExpected("y128 0 0 1y");
const std::string kSpecialCharsInside("X@#a$%B&*c()D;:e+!x");
const std::string kSpecialCharsInsideExpected("x a b c d e x");
form.username_element = UTF8ToUTF16(kHTMLInside);
form.password_element = UTF8ToUTF16(kIPAddressInside);
form.new_password_element = UTF8ToUTF16(kSpecialCharsInside);
logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_FALSE(logger.LogsContainSubstring(kHTMLInside));
EXPECT_TRUE(logger.LogsContainSubstring(kHTMLInsideExpected));
EXPECT_FALSE(logger.LogsContainSubstring(kIPAddressInside));
EXPECT_TRUE(logger.LogsContainSubstring(kIPAddressInsideExpected));
EXPECT_FALSE(logger.LogsContainSubstring(kSpecialCharsInside));
EXPECT_TRUE(logger.LogsContainSubstring(kSpecialCharsInsideExpected));
}
TEST(SavePasswordProgressLoggerTest, LogHTMLForm) {
TestLogger logger;
logger.LogHTMLForm(SavePasswordProgressLogger::STRING_MESSAGE,
"form_name",
GURL("http://example.org/verysecret?verysecret"));
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("form_name"));
EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
}
TEST(SavePasswordProgressLoggerTest, LogURL) {
TestLogger logger;
logger.LogURL(SavePasswordProgressLogger::STRING_MESSAGE,
GURL("http://example.org/verysecret?verysecret"));
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
}
TEST(SavePasswordProgressLoggerTest, LogBooleanTrue) {
TestLogger logger;
logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, true);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("true"));
}
TEST(SavePasswordProgressLoggerTest, LogBooleanFalse) {
TestLogger logger;
logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, false);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("false"));
}
TEST(SavePasswordProgressLoggerTest, LogSignedNumber) {
TestLogger logger;
int signed_number = -12345;
logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, signed_number);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("-12345"));
}
TEST(SavePasswordProgressLoggerTest, LogUnsignedNumber) {
TestLogger logger;
size_t unsigned_number = 654321;
logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, unsigned_number);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
EXPECT_TRUE(logger.LogsContainSubstring("654321"));
}
TEST(SavePasswordProgressLoggerTest, LogMessage) {
TestLogger logger;
logger.LogMessage(SavePasswordProgressLogger::STRING_MESSAGE);
SCOPED_TRACE(testing::Message() << "Log string = ["
<< logger.accumulated_log() << "]");
EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
}
} // namespace autofill