| Index: pdf/pdfium/pdfium_engine.cc
 | 
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
 | 
| index 72a1c646b444db9515a67ac1c9edb1651572c90c..5bd7fed6e85d7b4df98c989425b57f25564d5d53 100644
 | 
| --- a/pdf/pdfium/pdfium_engine.cc
 | 
| +++ b/pdf/pdfium/pdfium_engine.cc
 | 
| @@ -2077,19 +2077,6 @@ void PDFiumEngine::StartFind(const std::string& text, bool case_sensitive) {
 | 
|    if (end_of_search) {
 | 
|      // Send the final notification.
 | 
|      client_->NotifyNumberOfFindResultsChanged(find_results_.size(), true);
 | 
| -
 | 
| -    // When searching is complete, resume finding at a particular index.
 | 
| -    // Assuming the user has not clicked the find button in the meanwhile.
 | 
| -    if (resume_find_index_.valid() && !current_find_index_.valid()) {
 | 
| -      size_t resume_index = resume_find_index_.GetIndex();
 | 
| -      if (resume_index >= find_results_.size()) {
 | 
| -        // This might happen if the PDF has some dynamically generated text?
 | 
| -        resume_index = 0;
 | 
| -      }
 | 
| -      current_find_index_.SetIndex(resume_index);
 | 
| -      client_->NotifySelectedFindResultChanged(resume_index);
 | 
| -    }
 | 
| -    resume_find_index_.Invalidate();
 | 
|    } else {
 | 
|      pp::CompletionCallback callback =
 | 
|          find_factory_.NewCallback(&PDFiumEngine::ContinueFind);
 | 
| @@ -2198,18 +2185,6 @@ void PDFiumEngine::AddFindResult(const PDFiumRange& result) {
 | 
|    }
 | 
|    find_results_.insert(find_results_.begin() + result_index, result);
 | 
|    UpdateTickMarks();
 | 
| -
 | 
| -  if (current_find_index_.valid()) {
 | 
| -    if (result_index <= current_find_index_.GetIndex()) {
 | 
| -      // Update the current match index
 | 
| -      size_t find_index = current_find_index_.IncrementIndex();
 | 
| -      DCHECK_LT(find_index, find_results_.size());
 | 
| -      client_->NotifySelectedFindResultChanged(current_find_index_.GetIndex());
 | 
| -    }
 | 
| -  } else if (!resume_find_index_.valid()) {
 | 
| -    // Both indices are invalid. Select the first match.
 | 
| -    SelectFindResult(true);
 | 
| -  }
 | 
|    client_->NotifyNumberOfFindResultsChanged(find_results_.size(), false);
 | 
|  }
 | 
|  
 | 
| @@ -2224,13 +2199,28 @@ bool PDFiumEngine::SelectFindResult(bool forward) {
 | 
|    // Move back/forward through the search locations we previously found.
 | 
|    size_t new_index;
 | 
|    const size_t last_index = find_results_.size() - 1;
 | 
| -  if (current_find_index_.valid()) {
 | 
| +
 | 
| +  if (resume_find_index_.valid()) {
 | 
| +    new_index = resume_find_index_.GetIndex();
 | 
| +    resume_find_index_.Invalidate();
 | 
| +  } else if (current_find_index_.valid()) {
 | 
|      size_t current_index = current_find_index_.GetIndex();
 | 
|      if (forward) {
 | 
| -      new_index = (current_index >= last_index) ? 0 : current_index + 1;
 | 
| +      if (current_index >= last_index) {
 | 
| +        current_find_index_.Invalidate();
 | 
| +        client_->NotifySelectedFindResultChanged(-1);
 | 
| +        client_->NotifyNumberOfFindResultsChanged(find_results_.size(), true);
 | 
| +        return true;
 | 
| +      }
 | 
| +      new_index = current_index + 1;
 | 
|      } else {
 | 
| -      new_index = (current_find_index_.GetIndex() == 0) ? last_index
 | 
| -                                                        : current_index - 1;
 | 
| +      if (current_find_index_.GetIndex() == 0) {
 | 
| +        current_find_index_.Invalidate();
 | 
| +        client_->NotifySelectedFindResultChanged(-1);
 | 
| +        client_->NotifyNumberOfFindResultsChanged(find_results_.size(), true);
 | 
| +        return true;
 | 
| +      }
 | 
| +      new_index = current_index - 1;
 | 
|      }
 | 
|    } else {
 | 
|      new_index = forward ? 0 : last_index;
 | 
| 
 |