• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "components/autofill/core/common/save_password_progress_logger.h"
6 
7 #include <limits>
8 
9 #include "base/bind.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"
16 #include "url/gurl.h"
17 
18 using base::UTF8ToUTF16;
19 
20 namespace autofill {
21 
22 namespace {
23 
24 const char kTestString[] = "Message";  // Corresponds to STRING_MESSAGE.
25 
26 class TestLogger : public SavePasswordProgressLogger {
27  public:
LogsContainSubstring(const std::string & substring)28   bool LogsContainSubstring(const std::string& substring) {
29     return accumulated_log_.find(substring) != std::string::npos;
30   }
31 
accumulated_log()32   std::string accumulated_log() { return accumulated_log_; }
33 
34  private:
SendLog(const std::string & log)35   virtual void SendLog(const std::string& log) OVERRIDE {
36     accumulated_log_.append(log);
37   }
38 
39   std::string accumulated_log_;
40 };
41 
42 };  // namespace
43 
TEST(SavePasswordProgressLoggerTest,LogPasswordForm)44 TEST(SavePasswordProgressLoggerTest, LogPasswordForm) {
45   TestLogger logger;
46   PasswordForm form;
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"));
58 }
59 
TEST(SavePasswordProgressLoggerTest,LogPasswordFormElementID)60 TEST(SavePasswordProgressLoggerTest, LogPasswordFormElementID) {
61   // Test filtering element IDs.
62   TestLogger logger;
63   PasswordForm form;
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.old_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));
83 }
84 
TEST(SavePasswordProgressLoggerTest,LogHTMLForm)85 TEST(SavePasswordProgressLoggerTest, LogHTMLForm) {
86   TestLogger logger;
87   logger.LogHTMLForm(SavePasswordProgressLogger::STRING_MESSAGE,
88                      "form_name",
89                      "post",
90                      GURL("http://example.org/verysecret?verysecret"));
91   SCOPED_TRACE(testing::Message() << "Log string = ["
92                                   << logger.accumulated_log() << "]");
93   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
94   EXPECT_TRUE(logger.LogsContainSubstring("form_name"));
95   EXPECT_TRUE(logger.LogsContainSubstring("POST"));
96   EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
97   EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
98 }
99 
TEST(SavePasswordProgressLoggerTest,LogURL)100 TEST(SavePasswordProgressLoggerTest, LogURL) {
101   TestLogger logger;
102   logger.LogURL(SavePasswordProgressLogger::STRING_MESSAGE,
103                 GURL("http://example.org/verysecret?verysecret"));
104   SCOPED_TRACE(testing::Message() << "Log string = ["
105                                   << logger.accumulated_log() << "]");
106   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
107   EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
108   EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
109 }
110 
TEST(SavePasswordProgressLoggerTest,LogBooleanTrue)111 TEST(SavePasswordProgressLoggerTest, LogBooleanTrue) {
112   TestLogger logger;
113   logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, true);
114   SCOPED_TRACE(testing::Message() << "Log string = ["
115                                   << logger.accumulated_log() << "]");
116   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
117   EXPECT_TRUE(logger.LogsContainSubstring("true"));
118 }
119 
TEST(SavePasswordProgressLoggerTest,LogBooleanFalse)120 TEST(SavePasswordProgressLoggerTest, LogBooleanFalse) {
121   TestLogger logger;
122   logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, false);
123   SCOPED_TRACE(testing::Message() << "Log string = ["
124                                   << logger.accumulated_log() << "]");
125   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
126   EXPECT_TRUE(logger.LogsContainSubstring("false"));
127 }
128 
TEST(SavePasswordProgressLoggerTest,LogSignedNumber)129 TEST(SavePasswordProgressLoggerTest, LogSignedNumber) {
130   TestLogger logger;
131   int signed_number = -12345;
132   logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, signed_number);
133   SCOPED_TRACE(testing::Message() << "Log string = ["
134                                   << logger.accumulated_log() << "]");
135   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
136   EXPECT_TRUE(logger.LogsContainSubstring("-12345"));
137 }
138 
TEST(SavePasswordProgressLoggerTest,LogUnsignedNumber)139 TEST(SavePasswordProgressLoggerTest, LogUnsignedNumber) {
140   TestLogger logger;
141   size_t unsigned_number = 654321;
142   logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, unsigned_number);
143   SCOPED_TRACE(testing::Message() << "Log string = ["
144                                   << logger.accumulated_log() << "]");
145   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
146   EXPECT_TRUE(logger.LogsContainSubstring("654321"));
147 }
148 
TEST(SavePasswordProgressLoggerTest,LogMessage)149 TEST(SavePasswordProgressLoggerTest, LogMessage) {
150   TestLogger logger;
151   logger.LogMessage(SavePasswordProgressLogger::STRING_MESSAGE);
152   SCOPED_TRACE(testing::Message() << "Log string = ["
153                                   << logger.accumulated_log() << "]");
154   EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
155 }
156 
157 }  // namespace autofill
158