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

Unified Diff: components/reading_list/ios/reading_list_entry.cc

Issue 2558183004: Add merge rules for first read time (Closed)
Patch Set: =0 Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/reading_list/ios/reading_list_entry_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/reading_list/ios/reading_list_entry.cc
diff --git a/components/reading_list/ios/reading_list_entry.cc b/components/reading_list/ios/reading_list_entry.cc
index 490827493b74dfbecb3f183b15798ec2d9c3e82d..b3fc0e0e033219e3e259a8ce3db976911efe7831 100644
--- a/components/reading_list/ios/reading_list_entry.cc
+++ b/components/reading_list/ios/reading_list_entry.cc
@@ -324,7 +324,7 @@ std::unique_ptr<ReadingListEntry> ReadingListEntry::FromReadingListSpecifics(
int64_t first_read_time_us = 0;
if (pb_entry.has_first_read_time_us()) {
- creation_time_us = pb_entry.first_read_time_us();
+ first_read_time_us = pb_entry.first_read_time_us();
}
int64_t update_time_us = 0;
@@ -368,22 +368,27 @@ void ReadingListEntry::MergeWithEntry(const ReadingListEntry& other) {
}
if (creation_time_us_ < other.creation_time_us_) {
creation_time_us_ = std::move(other.creation_time_us_);
- }
- if (state_ == UNSEEN) {
- state_ = std::move(other.state_);
- } else if (other.state_ != UNSEEN) {
- // Both are not UNSEEN, take the newer one.
- if (update_time_us_ < other.update_time_us_) {
- state_ = std::move(other.state_);
- } else if (update_time_us_ == other.update_time_us_) {
- // Both states are likely the same, but if they are not, READ should win.
- if (other.state_ == READ) {
- state_ = std::move(other.state_);
- }
+ first_read_time_us_ = std::move(other.first_read_time_us_);
+ } else if (creation_time_us_ == other.creation_time_us_) {
+ // The first_time_read_us from |other| is used if
+ // - this.first_time_read_us == 0: the entry was never read in this device.
+ // - this.first_time_read_us > other.first_time_read_us: the entry was
+ // first read on another device.
+ if (first_read_time_us_ == 0 ||
+ (other.first_read_time_us_ != 0 &&
+ other.first_read_time_us_ < first_read_time_us_)) {
+ first_read_time_us_ = std::move(other.first_read_time_us_);
}
}
if (update_time_us_ < other.update_time_us_) {
update_time_us_ = std::move(other.update_time_us_);
+ state_ = std::move(other.state_);
+ } else if (update_time_us_ == other.update_time_us_) {
+ if (state_ == UNSEEN) {
+ state_ = std::move(other.state_);
+ } else if (other.state_ == READ) {
+ state_ = std::move(other.state_);
+ }
}
#if !defined(NDEBUG)
std::unique_ptr<sync_pb::ReadingListSpecifics> new_this_pb(
« no previous file with comments | « no previous file | components/reading_list/ios/reading_list_entry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698