| Index: ios/chrome/browser/reading_list/reading_list_entry.h | 
| diff --git a/ios/chrome/browser/reading_list/reading_list_entry.h b/ios/chrome/browser/reading_list/reading_list_entry.h | 
| index 3ed4903e8e6226a817acd367e997cb5fc1a8fa0b..ede55ed9adf71a0010dfa40ec097e6ab86a1e098 100644 | 
| --- a/ios/chrome/browser/reading_list/reading_list_entry.h | 
| +++ b/ios/chrome/browser/reading_list/reading_list_entry.h | 
| @@ -8,9 +8,21 @@ | 
| #include <string> | 
|  | 
| #include "base/macros.h" | 
| +#include "base/time/time.h" | 
| #include "net/base/backoff_entry.h" | 
| #include "url/gurl.h" | 
|  | 
| +namespace reading_list { | 
| +class ReadingListLocal; | 
| +} | 
| + | 
| +namespace sync_pb { | 
| +class ReadingListSpecifics; | 
| +} | 
| + | 
| +class ReadingListEntry; | 
| +using ReadingListEntries = std::vector<ReadingListEntry>; | 
| + | 
| // An entry in the reading list. The URL is a unique identifier for an entry, as | 
| // such it should not be empty and is the only thing considered when comparing | 
| // entries. | 
| @@ -48,9 +60,48 @@ class ReadingListEntry { | 
| // non-error state. | 
| int FailedDownloadCounter() const; | 
|  | 
| +  // The last update time of the entry. This value may be used to sort the | 
| +  // entries. The value is in microseconds since Jan 1st 1970. | 
| +  int64_t UpdateTime() const; | 
| + | 
| +  // The creation update time of the entry. The value is in microseconds since | 
| +  // Jan 1st 1970. | 
| +  int64_t CreationTime() const; | 
| + | 
| +  // Set the update time to now. | 
| +  void MarkEntryUpdated(); | 
| + | 
| +  // Returns a protobuf encoding the content of this ReadingListEntry for local | 
| +  // storage. | 
| +  std::unique_ptr<reading_list::ReadingListLocal> AsReadingListLocal( | 
| +      bool read) const; | 
| + | 
| +  // Returns a protobuf encoding the content of this ReadingListEntry for sync. | 
| +  std::unique_ptr<sync_pb::ReadingListSpecifics> AsReadingListSpecifics( | 
| +      bool read) const; | 
| + | 
| +  // Created a ReadingListEntry from the protobuf format. | 
| +  static std::unique_ptr<ReadingListEntry> FromReadingListLocal( | 
| +      const reading_list::ReadingListLocal& pb_entry); | 
| + | 
| +  // Created a ReadingListEntry from the protobuf format. | 
| +  static std::unique_ptr<ReadingListEntry> FromReadingListSpecifics( | 
| +      const sync_pb::ReadingListSpecifics& pb_entry); | 
| + | 
| +  // Merge the local data from |other| to this. | 
| +  // The local fields (distilled_state_, distilled_url_, backoff_, | 
| +  // failed_download_counter_) of |other| are moved to |this| and must not be | 
| +  // used after this call. | 
| +  void MergeLocalStateFrom(ReadingListEntry& other); | 
| + | 
| ReadingListEntry& operator=(ReadingListEntry&& other); | 
| + | 
| bool operator==(const ReadingListEntry& other) const; | 
|  | 
| +  // Returns whether |lhs| is more recent than |rhs|. | 
| +  static bool CompareEntryUpdateTime(const ReadingListEntry& lhs, | 
| +                                     const ReadingListEntry& rhs); | 
| + | 
| // Sets the title. | 
| void SetTitle(const std::string& title); | 
| // Sets the distilled URL and switch the state to PROCESSED and reset the time | 
| @@ -60,13 +111,28 @@ class ReadingListEntry { | 
| void SetDistilledState(DistillationState distilled_state); | 
|  | 
| private: | 
| +  ReadingListEntry(const GURL& url, | 
| +                   const std::string& title, | 
| +                   int64_t creation_time, | 
| +                   int64_t update_time, | 
| +                   DistillationState distilled_state, | 
| +                   const GURL& distilled_url, | 
| +                   int failed_download_counter, | 
| +                   std::unique_ptr<net::BackoffEntry> backoff); | 
| GURL url_; | 
| std::string title_; | 
| GURL distilled_url_; | 
| DistillationState distilled_state_; | 
| + | 
| std::unique_ptr<net::BackoffEntry> backoff_; | 
| int failed_download_counter_; | 
|  | 
| +  // These value are in microseconds since Jan 1st 1970. They are used for | 
| +  // sorting the entries from the database. They are kept in int64_t to avoid | 
| +  // conversion on each save/read event. | 
| +  int64_t creation_time_us_; | 
| +  int64_t update_time_us_; | 
| + | 
| DISALLOW_COPY_AND_ASSIGN(ReadingListEntry); | 
| }; | 
|  | 
|  |