Index: ios/chrome/browser/reading_list/reading_list_web_state_observer.mm |
diff --git a/ios/chrome/browser/reading_list/reading_list_web_state_observer.mm b/ios/chrome/browser/reading_list/reading_list_web_state_observer.mm |
index db32a0a30bbac4bdd1c5c70d9026a9762d333981..c58d76e1fc92bed10d25bd951754a7c3ad0c8055 100644 |
--- a/ios/chrome/browser/reading_list/reading_list_web_state_observer.mm |
+++ b/ios/chrome/browser/reading_list/reading_list_web_state_observer.mm |
@@ -125,7 +125,7 @@ void ReadingListWebStateObserver::ReadingListModelLoaded( |
const GURL& currentURL = item->GetVirtualURL(); |
if (IsUrlAvailableOffline(currentURL)) { |
pending_url_ = currentURL; |
- LoadOfflineReadingListEntry(item); |
+ LoadOfflineReadingListEntry(); |
StopCheckingProgress(); |
} |
} |
@@ -203,7 +203,7 @@ void ReadingListWebStateObserver::PageLoaded( |
reading_list_model_->SetReadStatus(pending_url_, true); |
UMA_HISTOGRAM_BOOLEAN("ReadingList.OfflineVersionDisplayed", false); |
} else { |
- LoadOfflineReadingListEntry(item); |
+ LoadOfflineReadingListEntry(); |
} |
StopCheckingProgress(); |
} |
@@ -245,7 +245,7 @@ void ReadingListWebStateObserver::VerifyIfReadingListEntryStartedLoading() { |
double progress = web_state()->GetLoadingProgress(); |
const double kMinimumExpectedProgressPerStep = 0.25; |
if (progress < try_number_ * kMinimumExpectedProgressPerStep) { |
- LoadOfflineReadingListEntry(item); |
+ LoadOfflineReadingListEntry(); |
StopCheckingProgress(); |
return; |
} |
@@ -258,9 +258,7 @@ void ReadingListWebStateObserver::VerifyIfReadingListEntryStartedLoading() { |
} |
} |
-void ReadingListWebStateObserver::LoadOfflineReadingListEntry( |
- web::NavigationItem* item) { |
- DCHECK(item); |
+void ReadingListWebStateObserver::LoadOfflineReadingListEntry() { |
DCHECK(reading_list_model_); |
if (!pending_url_.is_valid() || !IsUrlAvailableOffline(pending_url_)) { |
return; |
@@ -270,9 +268,20 @@ void ReadingListWebStateObserver::LoadOfflineReadingListEntry( |
DCHECK(entry->DistilledState() == ReadingListEntry::PROCESSED); |
GURL url = |
reading_list::DistilledURLForPath(entry->DistilledPath(), entry->URL()); |
- item->SetURL(url); |
- item->SetVirtualURL(pending_url_); |
- web_state()->GetNavigationManager()->Reload(false); |
+ web::NavigationManager* manager = web_state()->GetNavigationManager(); |
+ web::NavigationItem* item = manager->GetPendingItem(); |
+ if (item) { |
+ web_state()->Stop(); |
+ web::WebState::OpenURLParams params(url, item->GetReferrer(), |
+ WindowOpenDisposition::CURRENT_TAB, |
+ item->GetTransitionType(), NO); |
+ web_state()->OpenURL(params); |
+ } else { |
+ item = manager->GetLastCommittedItem(); |
+ item->SetURL(url); |
+ item->SetVirtualURL(pending_url_); |
+ web_state()->GetNavigationManager()->Reload(false); |
+ } |
reading_list_model_->SetReadStatus(entry->URL(), true); |
UMA_HISTOGRAM_BOOLEAN("ReadingList.OfflineVersionDisplayed", true); |
} |