| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/password_manager/core/browser/statistics_table.h" | 5 #include "components/password_manager/core/browser/statistics_table.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 | 54 |
| 55 private: | 55 private: |
| 56 base::ScopedTempDir temp_dir_; | 56 base::ScopedTempDir temp_dir_; |
| 57 std::unique_ptr<sql::Connection> connection_; | 57 std::unique_ptr<sql::Connection> connection_; |
| 58 std::unique_ptr<StatisticsTable> db_; | 58 std::unique_ptr<StatisticsTable> db_; |
| 59 InteractionsStats test_data_; | 59 InteractionsStats test_data_; |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 TEST_F(StatisticsTableTest, Sanity) { | 62 TEST_F(StatisticsTableTest, Sanity) { |
| 63 EXPECT_TRUE(db()->AddRow(test_data())); | 63 EXPECT_TRUE(db()->AddRow(test_data())); |
| 64 EXPECT_THAT(db()->GetAllRows(), ElementsAre(test_data())); |
| 64 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 65 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
| 65 ElementsAre(test_data())); | 66 ElementsAre(test_data())); |
| 66 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 67 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 68 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
| 67 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 69 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
| 68 } | 70 } |
| 69 | 71 |
| 70 TEST_F(StatisticsTableTest, Reload) { | 72 TEST_F(StatisticsTableTest, Reload) { |
| 71 EXPECT_TRUE(db()->AddRow(test_data())); | 73 EXPECT_TRUE(db()->AddRow(test_data())); |
| 72 | 74 |
| 73 ReloadDatabase(); | 75 ReloadDatabase(); |
| 74 | 76 |
| 77 EXPECT_THAT(db()->GetAllRows(), ElementsAre(test_data())); |
| 75 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 78 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
| 76 ElementsAre(test_data())); | 79 ElementsAre(test_data())); |
| 77 } | 80 } |
| 78 | 81 |
| 79 TEST_F(StatisticsTableTest, DoubleOperation) { | 82 TEST_F(StatisticsTableTest, DoubleOperation) { |
| 80 EXPECT_TRUE(db()->AddRow(test_data())); | 83 EXPECT_TRUE(db()->AddRow(test_data())); |
| 81 test_data().dismissal_count++; | 84 test_data().dismissal_count++; |
| 82 EXPECT_TRUE(db()->AddRow(test_data())); | 85 EXPECT_TRUE(db()->AddRow(test_data())); |
| 83 | 86 |
| 87 EXPECT_THAT(db()->GetAllRows(), ElementsAre(test_data())); |
| 84 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 88 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
| 85 ElementsAre(test_data())); | 89 ElementsAre(test_data())); |
| 86 | 90 |
| 87 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 91 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 92 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
| 88 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 93 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
| 89 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 94 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 90 } | 95 } |
| 91 | 96 |
| 92 TEST_F(StatisticsTableTest, DifferentUsernames) { | 97 TEST_F(StatisticsTableTest, DifferentUsernames) { |
| 93 InteractionsStats stats1 = test_data(); | 98 InteractionsStats stats1 = test_data(); |
| 94 InteractionsStats stats2 = test_data(); | 99 InteractionsStats stats2 = test_data(); |
| 95 stats2.username_value = base::ASCIIToUTF16(kUsername2); | 100 stats2.username_value = base::ASCIIToUTF16(kUsername2); |
| 96 | 101 |
| 97 EXPECT_TRUE(db()->AddRow(stats1)); | 102 EXPECT_TRUE(db()->AddRow(stats1)); |
| 98 EXPECT_TRUE(db()->AddRow(stats2)); | 103 EXPECT_TRUE(db()->AddRow(stats2)); |
| 104 EXPECT_THAT(db()->GetAllRows(), UnorderedElementsAre(stats1, stats2)); |
| 99 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 105 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
| 100 UnorderedElementsAre(stats1, stats2)); | 106 UnorderedElementsAre(stats1, stats2)); |
| 101 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 107 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 108 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
| 102 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 109 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
| 103 } | 110 } |
| 104 | 111 |
| 105 TEST_F(StatisticsTableTest, RemoveStatsByOriginAndTime) { | 112 TEST_F(StatisticsTableTest, RemoveStatsByOriginAndTime) { |
| 106 InteractionsStats stats1 = test_data(); | 113 InteractionsStats stats1 = test_data(); |
| 107 stats1.update_time = base::Time::FromTimeT(1); | 114 stats1.update_time = base::Time::FromTimeT(1); |
| 108 InteractionsStats stats2 = test_data(); | 115 InteractionsStats stats2 = test_data(); |
| 109 stats2.update_time = base::Time::FromTimeT(2); | 116 stats2.update_time = base::Time::FromTimeT(2); |
| 110 stats2.origin_domain = GURL(kTestDomain2); | 117 stats2.origin_domain = GURL(kTestDomain2); |
| 111 InteractionsStats stats3 = test_data(); | 118 InteractionsStats stats3 = test_data(); |
| 112 stats3.update_time = base::Time::FromTimeT(2); | 119 stats3.update_time = base::Time::FromTimeT(2); |
| 113 stats3.origin_domain = GURL(kTestDomain3); | 120 stats3.origin_domain = GURL(kTestDomain3); |
| 114 InteractionsStats stats4 = test_data(); | 121 InteractionsStats stats4 = test_data(); |
| 115 stats4.update_time = base::Time::FromTimeT(2); | 122 stats4.update_time = base::Time::FromTimeT(2); |
| 116 stats4.origin_domain = GURL(kTestDomain4); | 123 stats4.origin_domain = GURL(kTestDomain4); |
| 117 | 124 |
| 118 EXPECT_TRUE(db()->AddRow(stats1)); | 125 EXPECT_TRUE(db()->AddRow(stats1)); |
| 119 EXPECT_TRUE(db()->AddRow(stats2)); | 126 EXPECT_TRUE(db()->AddRow(stats2)); |
| 120 EXPECT_TRUE(db()->AddRow(stats3)); | 127 EXPECT_TRUE(db()->AddRow(stats3)); |
| 121 EXPECT_TRUE(db()->AddRow(stats4)); | 128 EXPECT_TRUE(db()->AddRow(stats4)); |
| 129 EXPECT_THAT(db()->GetAllRows(), |
| 130 UnorderedElementsAre(stats1, stats2, stats3, stats4)); |
| 122 EXPECT_THAT(db()->GetRows(stats1.origin_domain), ElementsAre(stats1)); | 131 EXPECT_THAT(db()->GetRows(stats1.origin_domain), ElementsAre(stats1)); |
| 123 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); | 132 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); |
| 124 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); | 133 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); |
| 125 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); | 134 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); |
| 126 | 135 |
| 127 // Remove the entry with the timestamp 1 with no origin filter. | 136 // Remove the entry with the timestamp 1 with no origin filter. |
| 128 EXPECT_TRUE( | 137 EXPECT_TRUE( |
| 129 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), | 138 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), |
| 130 base::Time(), base::Time::FromTimeT(2))); | 139 base::Time(), base::Time::FromTimeT(2))); |
| 140 EXPECT_THAT(db()->GetAllRows(), UnorderedElementsAre(stats2, stats3, stats4)); |
| 131 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); | 141 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); |
| 132 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); | 142 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); |
| 133 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); | 143 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); |
| 134 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); | 144 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); |
| 135 | 145 |
| 136 // Remove the entries with the timestamp 2 that are NOT matching | 146 // Remove the entries with the timestamp 2 that are NOT matching |
| 137 // |kTestDomain3|. | 147 // |kTestDomain3|. |
| 138 EXPECT_TRUE(db()->RemoveStatsByOriginAndTime( | 148 EXPECT_TRUE(db()->RemoveStatsByOriginAndTime( |
| 139 base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator!=), | 149 base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator!=), |
| 140 stats3.origin_domain), | 150 stats3.origin_domain), |
| 141 base::Time::FromTimeT(2), base::Time())); | 151 base::Time::FromTimeT(2), base::Time())); |
| 152 EXPECT_THAT(db()->GetAllRows(), ElementsAre(stats3)); |
| 142 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); | 153 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); |
| 143 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); | 154 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); |
| 144 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); | 155 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); |
| 145 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); | 156 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); |
| 146 | 157 |
| 147 // Remove the entries with the timestamp 2 with no origin filter. | 158 // Remove the entries with the timestamp 2 with no origin filter. |
| 148 // This should delete the remaining entry. | 159 // This should delete the remaining entry. |
| 149 EXPECT_TRUE( | 160 EXPECT_TRUE( |
| 150 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), | 161 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), |
| 151 base::Time::FromTimeT(2), base::Time())); | 162 base::Time::FromTimeT(2), base::Time())); |
| 163 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
| 152 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); | 164 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); |
| 153 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); | 165 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); |
| 154 EXPECT_THAT(db()->GetRows(stats3.origin_domain), IsEmpty()); | 166 EXPECT_THAT(db()->GetRows(stats3.origin_domain), IsEmpty()); |
| 155 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); | 167 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); |
| 156 } | 168 } |
| 157 | 169 |
| 158 TEST_F(StatisticsTableTest, BadURL) { | 170 TEST_F(StatisticsTableTest, BadURL) { |
| 159 test_data().origin_domain = GURL("trash"); | 171 test_data().origin_domain = GURL("trash"); |
| 160 EXPECT_FALSE(db()->AddRow(test_data())); | 172 EXPECT_FALSE(db()->AddRow(test_data())); |
| 173 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
| 161 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 174 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
| 162 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); | 175 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); |
| 163 } | 176 } |
| 164 | 177 |
| 165 TEST_F(StatisticsTableTest, EmptyURL) { | 178 TEST_F(StatisticsTableTest, EmptyURL) { |
| 166 test_data().origin_domain = GURL(); | 179 test_data().origin_domain = GURL(); |
| 167 EXPECT_FALSE(db()->AddRow(test_data())); | 180 EXPECT_FALSE(db()->AddRow(test_data())); |
| 181 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
| 168 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 182 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
| 169 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); | 183 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); |
| 170 } | 184 } |
| 171 | 185 |
| 172 } // namespace | 186 } // namespace |
| 173 } // namespace password_manager | 187 } // namespace password_manager |
| OLD | NEW |