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

Side by Side Diff: components/password_manager/core/browser/statistics_table.cc

Issue 2695233004: Implement PasswordStore::GetAllStats (Closed)
Patch Set: Add Mac Implementations Created 3 years, 10 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
OLDNEW
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 <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
11 #include <set> 11 #include <set>
12 12
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "sql/connection.h" 14 #include "sql/connection.h"
15 #include "sql/statement.h" 15 #include "sql/statement.h"
16 16
17 namespace password_manager { 17 namespace password_manager {
18 namespace { 18 namespace {
19 19
20 // Convenience enum for interacting with SQL queries that use all the columns. 20 // Convenience enum for interacting with SQL queries that use all the columns.
21 enum LoginTableColumns { 21 enum LoginTableColumns {
22 COLUMN_ORIGIN_DOMAIN = 0, 22 COLUMN_ORIGIN_DOMAIN = 0,
23 COLUMN_USERNAME, 23 COLUMN_USERNAME,
24 COLUMN_DISMISSALS, 24 COLUMN_DISMISSALS,
25 COLUMN_DATE, 25 COLUMN_DATE,
26 }; 26 };
27 27
28 // Iterates through all rows of s constructing a stats vector.
29 std::vector<InteractionsStats> StatementToInteractionsStats(sql::Statement* s) {
30 std::vector<InteractionsStats> results;
31 while (s->Step()) {
32 results.push_back(InteractionsStats());
33 results.back().origin_domain = GURL(s->ColumnString(COLUMN_ORIGIN_DOMAIN));
34 results.back().username_value = s->ColumnString16(COLUMN_USERNAME);
35 results.back().dismissal_count = s->ColumnInt(COLUMN_DISMISSALS);
36 results.back().update_time =
37 base::Time::FromInternalValue(s->ColumnInt64(COLUMN_DATE));
38 }
39
40 return results;
41 }
42
28 } // namespace 43 } // namespace
29 44
30 InteractionsStats::InteractionsStats() = default; 45 InteractionsStats::InteractionsStats() = default;
31 46
32 bool operator==(const InteractionsStats& lhs, const InteractionsStats& rhs) { 47 bool operator==(const InteractionsStats& lhs, const InteractionsStats& rhs) {
33 return lhs.origin_domain == rhs.origin_domain && 48 return lhs.origin_domain == rhs.origin_domain &&
34 lhs.username_value == rhs.username_value && 49 lhs.username_value == rhs.username_value &&
35 lhs.dismissal_count == rhs.dismissal_count && 50 lhs.dismissal_count == rhs.dismissal_count &&
36 lhs.update_time == rhs.update_time; 51 lhs.update_time == rhs.update_time;
37 } 52 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 bool StatisticsTable::RemoveRow(const GURL& domain) { 114 bool StatisticsTable::RemoveRow(const GURL& domain) {
100 if (!domain.is_valid()) 115 if (!domain.is_valid())
101 return false; 116 return false;
102 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, 117 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE,
103 "DELETE FROM stats WHERE " 118 "DELETE FROM stats WHERE "
104 "origin_domain = ? ")); 119 "origin_domain = ? "));
105 s.BindString(0, domain.spec()); 120 s.BindString(0, domain.spec());
106 return s.Run(); 121 return s.Run();
107 } 122 }
108 123
124 std::vector<InteractionsStats> StatisticsTable::GetAllRows() {
125 static constexpr char query[] =
126 "SELECT origin_domain, username_value, "
127 "dismissal_count, update_time FROM stats";
128 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query));
129 return StatementToInteractionsStats(&s);
130 }
131
109 std::vector<InteractionsStats> StatisticsTable::GetRows(const GURL& domain) { 132 std::vector<InteractionsStats> StatisticsTable::GetRows(const GURL& domain) {
110 if (!domain.is_valid()) 133 if (!domain.is_valid())
111 return std::vector<InteractionsStats>(); 134 return std::vector<InteractionsStats>();
112 const char query[] = 135 const char query[] =
113 "SELECT origin_domain, username_value, " 136 "SELECT origin_domain, username_value, "
114 "dismissal_count, update_time FROM stats WHERE origin_domain == ?"; 137 "dismissal_count, update_time FROM stats WHERE origin_domain == ?";
115 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query)); 138 sql::Statement s(db_->GetCachedStatement(SQL_FROM_HERE, query));
116 s.BindString(0, domain.spec()); 139 s.BindString(0, domain.spec());
117 std::vector<InteractionsStats> result; 140 return StatementToInteractionsStats(&s);
118 while (s.Step()) {
119 result.push_back(InteractionsStats());
120 result.back().origin_domain = GURL(s.ColumnString(COLUMN_ORIGIN_DOMAIN));
121 result.back().username_value = s.ColumnString16(COLUMN_USERNAME);
122 result.back().dismissal_count = s.ColumnInt(COLUMN_DISMISSALS);
123 result.back().update_time =
124 base::Time::FromInternalValue(s.ColumnInt64(COLUMN_DATE));
125 }
126 return result;
127 } 141 }
128 142
129 bool StatisticsTable::RemoveStatsByOriginAndTime( 143 bool StatisticsTable::RemoveStatsByOriginAndTime(
130 const base::Callback<bool(const GURL&)>& origin_filter, 144 const base::Callback<bool(const GURL&)>& origin_filter,
131 base::Time delete_begin, 145 base::Time delete_begin,
132 base::Time delete_end) { 146 base::Time delete_end) {
133 if (delete_end.is_null()) 147 if (delete_end.is_null())
134 delete_end = base::Time::Max(); 148 delete_end = base::Time::Max();
135 149
136 // All origins. 150 // All origins.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 origin_delete_statement.BindString(0, origin); 184 origin_delete_statement.BindString(0, origin);
171 origin_delete_statement.BindInt64(1, delete_begin.ToInternalValue()); 185 origin_delete_statement.BindInt64(1, delete_begin.ToInternalValue());
172 origin_delete_statement.BindInt64(2, delete_end.ToInternalValue()); 186 origin_delete_statement.BindInt64(2, delete_end.ToInternalValue());
173 success = success && origin_delete_statement.Run(); 187 success = success && origin_delete_statement.Run();
174 } 188 }
175 189
176 return success; 190 return success;
177 } 191 }
178 192
179 } // namespace password_manager 193 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698