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

Side by Side Diff: components/autofill/browser/webdata/autofill_entry.cc

Issue 17392006: In components/autofill, move browser/ to core/browser/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to fix conflicts Created 7 years, 6 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
(Empty)
1 // Copyright (c) 2012 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/browser/webdata/autofill_entry.h"
6
7 #include <algorithm>
8 #include <set>
9
10 #include "base/logging.h"
11 #include "base/strings/utf_string_conversions.h"
12
13 namespace autofill {
14 namespace {
15
16 // The period after which Autofill entries should expire in days.
17 const int64 kExpirationPeriodInDays = 60;
18
19 } // namespace
20
21 AutofillKey::AutofillKey() {}
22
23 AutofillKey::AutofillKey(const base::string16& name,
24 const base::string16& value)
25 : name_(name),
26 value_(value) {
27 }
28
29 AutofillKey::AutofillKey(const char* name, const char* value)
30 : name_(UTF8ToUTF16(name)),
31 value_(UTF8ToUTF16(value)) {
32 }
33
34 AutofillKey::AutofillKey(const AutofillKey& key)
35 : name_(key.name()),
36 value_(key.value()) {
37 }
38
39 AutofillKey::~AutofillKey() {}
40
41 bool AutofillKey::operator==(const AutofillKey& key) const {
42 return name_ == key.name() && value_ == key.value();
43 }
44
45 bool AutofillKey::operator<(const AutofillKey& key) const {
46 int diff = name_.compare(key.name());
47 if (diff < 0) {
48 return true;
49 } else if (diff == 0) {
50 return value_.compare(key.value()) < 0;
51 } else {
52 return false;
53 }
54 }
55
56 AutofillEntry::AutofillEntry(const AutofillKey& key,
57 const std::vector<base::Time>& timestamps)
58 : key_(key) {
59 timestamps_culled_ = CullTimeStamps(timestamps, &timestamps_);
60 }
61
62 AutofillEntry::~AutofillEntry() {}
63
64 bool AutofillEntry::operator==(const AutofillEntry& entry) const {
65 if (!(key_ == entry.key()))
66 return false;
67
68 if (timestamps_.size() != entry.timestamps().size())
69 return false;
70
71 std::set<base::Time> other_timestamps(entry.timestamps().begin(),
72 entry.timestamps().end());
73 for (size_t i = 0; i < timestamps_.size(); i++) {
74 if (other_timestamps.count(timestamps_[i]) == 0)
75 return false;
76 }
77
78 return true;
79 }
80
81 bool AutofillEntry::operator<(const AutofillEntry& entry) const {
82 return key_ < entry.key();
83 }
84
85 bool AutofillEntry::IsExpired() const {
86 base::Time time = ExpirationTime();
87 // TODO(georgey): add DCHECK(!timestamps_.empty()) after conversion of the db
88 // is complete.
89 return (timestamps_.empty() || timestamps_.back() < time);
90 }
91
92 // static
93 base::Time AutofillEntry::ExpirationTime() {
94 return base::Time::Now() - base::TimeDelta::FromDays(kExpirationPeriodInDays);
95 }
96
97 // Culls the list of timestamps to the first and last used.
98 // If sync is enabled, at every browser restart, sync will do a match up of all
99 // autofill items on the server with all items on the web db. When webdb loads
100 // all the items in memory(for sync to process. The method is
101 // |GetAllAutofillEntries|) they will pass through this method for culling. If
102 // sync finds any of these items were culled it will updates the server AND the
103 // web db with these new timestamps. However after restart if an autofill item
104 // exceeds the |kMaxAutofillTimeStamps| it will NOT be written to web db until
105 // restart. But sync when uploading to the server will only upload this culled
106 // list. Meaning until restart there will be mis-match in timestamps but
107 // it should correct itself at startup.
108 bool AutofillEntry::CullTimeStamps(const std::vector<base::Time>& source,
109 std::vector<base::Time>* result) {
110 DCHECK(result);
111 DCHECK(&source != result);
112
113 // First copy the source to result.
114 result->clear();
115
116 if (source.size() <= 2) {
117 result->insert(result->begin(), source.begin(), source.end());
118 return false;
119 }
120
121 result->push_back(source.front());
122 result->push_back(source.back());
123
124 DVLOG(1) << "Culling timestamps. Current count is : " << source.size();
125
126 return true;
127 }
128
129 } // namespace autofill
OLDNEW
« no previous file with comments | « components/autofill/browser/webdata/autofill_entry.h ('k') | components/autofill/browser/webdata/autofill_entry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698