Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(376)

Side by Side Diff: components/autofill/core/common/save_password_progress_logger_unittest.cc

Issue 235623002: Password manager internals page: Improve security (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: innerHTML -> innerText Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/autofill/core/common/save_password_progress_logger.h" 5 #include "components/autofill/core/common/save_password_progress_logger.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "components/autofill/core/common/password_form.h" 14 #include "components/autofill/core/common/password_form.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/gurl.h" 16 #include "url/gurl.h"
17 17
18 using base::UTF8ToUTF16; 18 using base::UTF8ToUTF16;
19 19
20 namespace autofill { 20 namespace autofill {
21 21
22 namespace { 22 namespace {
23 23
24 const char kTestString[] = "Test"; 24 const char kTestString[] = "Message"; // Corresponds to STRING_MESSAGE.
25 25
26 class TestLogger : public SavePasswordProgressLogger { 26 class TestLogger : public SavePasswordProgressLogger {
27 public: 27 public:
28 bool LogsContainSubstring(const std::string& substring) { 28 bool LogsContainSubstring(const std::string& substring) {
29 return accumulated_log_.find(substring) != std::string::npos; 29 return GetAccumulatedLog().find(substring) != std::string::npos;
30 } 30 }
31 31
32 std::string accumulated_log() { return accumulated_log_; } 32 std::string GetAccumulatedLog() {
33 return SanitizeStructuredLogs(accumulated_logs_);
34 }
35
36 std::vector<SavePasswordProgressLogger::StructuredLog> accumulated_logs() {
37 return accumulated_logs_;
38 }
33 39
34 private: 40 private:
35 virtual void SendLog(const std::string& log) OVERRIDE { 41 virtual void SendLog(const std::vector<StructuredLog>& logs) OVERRIDE {
36 accumulated_log_.append(log); 42 accumulated_logs_ = logs;
37 } 43 }
38 44
39 std::string accumulated_log_; 45 std::vector<SavePasswordProgressLogger::StructuredLog> accumulated_logs_;
40 }; 46 };
41 47
42 }; // namespace 48 }; // namespace
43 49
44 TEST(SavePasswordProgressLoggerTest, LogPasswordForm) { 50 TEST(SavePasswordProgressLoggerTest, LogPasswordForm) {
45 TestLogger logger; 51 TestLogger logger;
46 PasswordForm form; 52 PasswordForm form;
47 form.action = GURL("http://example.org/verysecret?verysecret"); 53 form.action = GURL("http://example.org/verysecret?verysecret");
54 form.password_element = UTF8ToUTF16("pwdelement");
48 form.password_value = UTF8ToUTF16("verysecret"); 55 form.password_value = UTF8ToUTF16("verysecret");
49 form.username_value = UTF8ToUTF16("verysecret"); 56 form.username_value = UTF8ToUTF16("verysecret");
50 logger.LogPasswordForm(kTestString, form); 57 logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
51 SCOPED_TRACE(testing::Message() << "Log string = [" 58 SCOPED_TRACE(testing::Message() << "Log string = ["
52 << logger.accumulated_log() << "]"); 59 << logger.GetAccumulatedLog() << "]");
53 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 60 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
61 EXPECT_TRUE(logger.LogsContainSubstring("pwdelement"));
54 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org")); 62 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
55 EXPECT_FALSE(logger.LogsContainSubstring("verysecret")); 63 EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
56 } 64 }
57 65
58 TEST(SavePasswordProgressLoggerTest, LogHTMLForm) { 66 TEST(SavePasswordProgressLoggerTest, LogHTMLForm) {
59 TestLogger logger; 67 TestLogger logger;
60 logger.LogHTMLForm(kTestString, 68 logger.LogHTMLForm(SavePasswordProgressLogger::STRING_MESSAGE,
61 "form_name", 69 "formname",
62 "form_method", 70 "post",
63 GURL("http://example.org/verysecret?verysecret")); 71 GURL("http://example.org/verysecret?verysecret"));
64 SCOPED_TRACE(testing::Message() << "Log string = [" 72 SCOPED_TRACE(testing::Message() << "Log string = ["
65 << logger.accumulated_log() << "]"); 73 << logger.GetAccumulatedLog() << "]");
66 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 74 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
67 EXPECT_TRUE(logger.LogsContainSubstring("form_name")); 75 EXPECT_TRUE(logger.LogsContainSubstring("formname"));
68 EXPECT_TRUE(logger.LogsContainSubstring("form_method")); 76 EXPECT_TRUE(logger.LogsContainSubstring("POST"));
69 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org")); 77 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
70 EXPECT_FALSE(logger.LogsContainSubstring("verysecret")); 78 EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
71 } 79 }
72 80
73 TEST(SavePasswordProgressLoggerTest, LogURL) { 81 TEST(SavePasswordProgressLoggerTest, LogURL) {
74 TestLogger logger; 82 TestLogger logger;
75 logger.LogURL(kTestString, GURL("http://example.org/verysecret?verysecret")); 83 logger.LogURL(SavePasswordProgressLogger::STRING_MESSAGE,
84 GURL("http://example.org/verysecret?verysecret"));
76 SCOPED_TRACE(testing::Message() << "Log string = [" 85 SCOPED_TRACE(testing::Message() << "Log string = ["
77 << logger.accumulated_log() << "]"); 86 << logger.GetAccumulatedLog() << "]");
78 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 87 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
79 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org")); 88 EXPECT_TRUE(logger.LogsContainSubstring("http://example.org"));
80 EXPECT_FALSE(logger.LogsContainSubstring("verysecret")); 89 EXPECT_FALSE(logger.LogsContainSubstring("verysecret"));
81 } 90 }
82 91
83 TEST(SavePasswordProgressLoggerTest, LogBooleanTrue) { 92 TEST(SavePasswordProgressLoggerTest, LogBooleanTrue) {
84 TestLogger logger; 93 TestLogger logger;
85 logger.LogBoolean(kTestString, true); 94 logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, true);
86 SCOPED_TRACE(testing::Message() << "Log string = [" 95 SCOPED_TRACE(testing::Message() << "Log string = ["
87 << logger.accumulated_log() << "]"); 96 << logger.GetAccumulatedLog() << "]");
88 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 97 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
89 EXPECT_TRUE(logger.LogsContainSubstring("true")); 98 EXPECT_TRUE(logger.LogsContainSubstring("true"));
90 } 99 }
91 100
92 TEST(SavePasswordProgressLoggerTest, LogBooleanFalse) { 101 TEST(SavePasswordProgressLoggerTest, LogBooleanFalse) {
93 TestLogger logger; 102 TestLogger logger;
94 logger.LogBoolean(kTestString, false); 103 logger.LogBoolean(SavePasswordProgressLogger::STRING_MESSAGE, false);
95 SCOPED_TRACE(testing::Message() << "Log string = [" 104 SCOPED_TRACE(testing::Message() << "Log string = ["
96 << logger.accumulated_log() << "]"); 105 << logger.GetAccumulatedLog() << "]");
97 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 106 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
98 EXPECT_TRUE(logger.LogsContainSubstring("false")); 107 EXPECT_TRUE(logger.LogsContainSubstring("false"));
99 } 108 }
100 109
101 TEST(SavePasswordProgressLoggerTest, LogSignedNumber) { 110 TEST(SavePasswordProgressLoggerTest, LogSignedNumber) {
102 TestLogger logger; 111 TestLogger logger;
103 int signed_number = -12345; 112 int signed_number = -12345;
104 logger.LogNumber(kTestString, signed_number); 113 logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, signed_number);
105 SCOPED_TRACE(testing::Message() << "Log string = [" 114 SCOPED_TRACE(testing::Message() << "Log string = ["
106 << logger.accumulated_log() << "]"); 115 << logger.GetAccumulatedLog() << "]");
107 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 116 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
108 EXPECT_TRUE(logger.LogsContainSubstring("-12345")); 117 EXPECT_TRUE(logger.LogsContainSubstring("-12345"));
109 } 118 }
110 119
111 TEST(SavePasswordProgressLoggerTest, LogUnsignedNumber) { 120 TEST(SavePasswordProgressLoggerTest, LogUnsignedNumber) {
112 TestLogger logger; 121 TestLogger logger;
113 size_t unsigned_number = 654321; 122 size_t unsigned_number = 654321;
114 logger.LogNumber(kTestString, unsigned_number); 123 logger.LogNumber(SavePasswordProgressLogger::STRING_MESSAGE, unsigned_number);
115 SCOPED_TRACE(testing::Message() << "Log string = [" 124 SCOPED_TRACE(testing::Message() << "Log string = ["
116 << logger.accumulated_log() << "]"); 125 << logger.GetAccumulatedLog() << "]");
117 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 126 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
118 EXPECT_TRUE(logger.LogsContainSubstring("654321")); 127 EXPECT_TRUE(logger.LogsContainSubstring("654321"));
119 } 128 }
120 129
121 TEST(SavePasswordProgressLoggerTest, LogFinalDecisionSave) {
122 TestLogger logger;
123 logger.LogFinalDecision(SavePasswordProgressLogger::DECISION_SAVE);
124 SCOPED_TRACE(testing::Message() << "Log string = ["
125 << logger.accumulated_log() << "]");
126 EXPECT_TRUE(logger.LogsContainSubstring("SAVE"));
127 }
128
129 TEST(SavePasswordProgressLoggerTest, LogFinalDecisionAsk) {
130 TestLogger logger;
131 logger.LogFinalDecision(SavePasswordProgressLogger::DECISION_ASK);
132 SCOPED_TRACE(testing::Message() << "Log string = ["
133 << logger.accumulated_log() << "]");
134 EXPECT_TRUE(logger.LogsContainSubstring("ASK"));
135 }
136
137 TEST(SavePasswordProgressLoggerTest, LogFinalDecisionDrop) {
138 TestLogger logger;
139 logger.LogFinalDecision(SavePasswordProgressLogger::DECISION_DROP);
140 SCOPED_TRACE(testing::Message() << "Log string = ["
141 << logger.accumulated_log() << "]");
142 EXPECT_TRUE(logger.LogsContainSubstring("DROP"));
143 }
144
145 TEST(SavePasswordProgressLoggerTest, LogMessage) { 130 TEST(SavePasswordProgressLoggerTest, LogMessage) {
146 TestLogger logger; 131 TestLogger logger;
147 logger.LogMessage(kTestString); 132 logger.LogMessage(SavePasswordProgressLogger::STRING_MESSAGE);
148 SCOPED_TRACE(testing::Message() << "Log string = [" 133 SCOPED_TRACE(testing::Message() << "Log string = ["
149 << logger.accumulated_log() << "]"); 134 << logger.GetAccumulatedLog() << "]");
150 EXPECT_TRUE(logger.LogsContainSubstring(kTestString)); 135 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
151 } 136 }
152 137
138 TEST(SavePasswordProgressLoggerTest, SanitizeStructuredLogs) {
139 // The sanitizing method actually letting safe content through is tested in
140 // the rest of this file. The same goes for scrubbing URLs. Here we test that
141 // element IDs, the only source of free strings, is properly filtered.
142 TestLogger logger;
143 PasswordForm form;
144 const std::string kHTMLInside("Username <script> element");
145 const std::string kHTMLInsideExpected("username script element");
146 const std::string kIPAddressInside("y128.0.0.1Y");
147 const std::string kIPAddressInsideExpected("y128 0 0 1y");
148 const std::string kSpecialCharsInside("X@#a$%B&*c()D;:e+-x");
149 const std::string kSpecialCharsInsideExpected("x a b c d e x");
150 form.username_element = UTF8ToUTF16(kHTMLInside);
151 form.password_element = UTF8ToUTF16(kIPAddressInside);
152 form.old_password_element = UTF8ToUTF16(kSpecialCharsInside);
153 logger.LogPasswordForm(SavePasswordProgressLogger::STRING_MESSAGE, form);
154 SCOPED_TRACE(testing::Message() << "Log string = ["
155 << logger.GetAccumulatedLog() << "]");
156 EXPECT_TRUE(logger.LogsContainSubstring(kTestString));
157 EXPECT_FALSE(logger.LogsContainSubstring(kHTMLInside));
158 EXPECT_TRUE(logger.LogsContainSubstring(kHTMLInsideExpected));
159 EXPECT_FALSE(logger.LogsContainSubstring(kIPAddressInside));
160 EXPECT_TRUE(logger.LogsContainSubstring(kIPAddressInsideExpected));
161 EXPECT_FALSE(logger.LogsContainSubstring(kSpecialCharsInside));
162 EXPECT_TRUE(logger.LogsContainSubstring(kSpecialCharsInsideExpected));
163 }
153 } // namespace autofill 164 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698