| Index: ios/chrome/browser/reading_list/reading_list_model_impl.cc | 
| diff --git a/ios/chrome/browser/reading_list/reading_list_model_impl.cc b/ios/chrome/browser/reading_list/reading_list_model_impl.cc | 
| index c3e068d65f0249a30a6ce1c36dbd381cdf56d260..a9d29cc59c014fb4b71034ed81194b2506d81abc 100644 | 
| --- a/ios/chrome/browser/reading_list/reading_list_model_impl.cc | 
| +++ b/ios/chrome/browser/reading_list/reading_list_model_impl.cc | 
| @@ -54,17 +54,35 @@ void ReadingListModelImpl::ResetUnseenEntries() { | 
| storageLayer_->SavePersistentHasUnseen(false); | 
| } | 
|  | 
| -// Returns a specific entry. | 
| -const ReadingListEntry& ReadingListModelImpl::GetUnreadEntryAtIndex( | 
| +const ReadingListEntry* ReadingListModelImpl::GetUnreadEntryAtIndex( | 
| size_t index) const { | 
| DCHECK(loaded()); | 
| -  return unread_[index]; | 
| +  if (index >= unread_.size()) | 
| +    return nullptr; | 
| +  return &unread_[index]; | 
| } | 
|  | 
| -const ReadingListEntry& ReadingListModelImpl::GetReadEntryAtIndex( | 
| +const ReadingListEntry* ReadingListModelImpl::GetReadEntryAtIndex( | 
| size_t index) const { | 
| DCHECK(loaded()); | 
| -  return read_[index]; | 
| +  if (index >= read_.size()) | 
| +    return nullptr; | 
| +  return &read_[index]; | 
| +} | 
| + | 
| +const ReadingListEntry* ReadingListModelImpl::GetEntryFromURL( | 
| +    const GURL& gurl) const { | 
| +  auto it = std::find_if( | 
| +      read_.begin(), read_.end(), | 
| +      [&gurl](const ReadingListEntry& entry) { return gurl == entry.URL(); }); | 
| +  if (it == read_.end()) { | 
| +    it = std::find_if( | 
| +        unread_.begin(), unread_.end(), | 
| +        [&gurl](const ReadingListEntry& entry) { return gurl == entry.URL(); }); | 
| +    if (it == unread_.end()) | 
| +      return nullptr; | 
| +  } | 
| +  return &(*it); | 
| } | 
|  | 
| bool ReadingListModelImpl::CallbackEntryURL( | 
|  |