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

Unified Diff: ios/chrome/browser/reading_list/reading_list_web_state_observer.mm

Issue 2578973002: Reload offline version on load failure (Closed)
Patch Set: clean 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
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 b4aa9c0983e0990ab5f7f49a9064cd8bef3b5f2b..016ee6f40a7352af0aa4872aa27648fb61468029 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
@@ -9,7 +9,7 @@
#include "base/memory/ptr_util.h"
#include "components/reading_list/ios/reading_list_model.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/reading_list/reading_list_entry_loading_util.h"
+#include "ios/chrome/browser/reading_list/offline_url_utils.h"
#include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
#include "ios/web/public/navigation_item.h"
#include "ios/web/public/navigation_manager.h"
@@ -34,7 +34,8 @@ class ReadingListWebStateObserverUserDataWrapper
public:
static ReadingListWebStateObserverUserDataWrapper* FromWebState(
web::WebState* web_state,
- ReadingListModel* reading_list_model) {
+ ReadingListModel* reading_list_model,
+ ReadingListWebStateObserverDelegateType delegate) {
DCHECK(web_state);
ReadingListWebStateObserverUserDataWrapper* wrapper =
static_cast<ReadingListWebStateObserverUserDataWrapper*>(
@@ -42,7 +43,7 @@ class ReadingListWebStateObserverUserDataWrapper
if (!wrapper) {
auto newDataWrapper =
base::MakeUnique<ReadingListWebStateObserverUserDataWrapper>(
- web_state, reading_list_model);
+ web_state, reading_list_model, delegate);
wrapper = newDataWrapper.get();
web_state->SetUserData(kObserverKey, newDataWrapper.release());
}
@@ -51,8 +52,9 @@ class ReadingListWebStateObserverUserDataWrapper
ReadingListWebStateObserverUserDataWrapper(
web::WebState* web_state,
- ReadingListModel* reading_list_model)
- : observer_(web_state, reading_list_model) {
+ ReadingListModel* reading_list_model,
+ ReadingListWebStateObserverDelegateType delegate)
+ : observer_(web_state, reading_list_model, delegate) {
DCHECK(web_state);
}
@@ -66,9 +68,10 @@ class ReadingListWebStateObserverUserDataWrapper
ReadingListWebStateObserver* ReadingListWebStateObserver::FromWebState(
web::WebState* web_state,
- ReadingListModel* reading_list_model) {
+ ReadingListModel* reading_list_model,
+ ReadingListWebStateObserverDelegateType delegate) {
return ReadingListWebStateObserverUserDataWrapper::FromWebState(
- web_state, reading_list_model)
+ web_state, reading_list_model, delegate)
->observer();
}
@@ -76,22 +79,50 @@ ReadingListWebStateObserver::~ReadingListWebStateObserver() {}
ReadingListWebStateObserver::ReadingListWebStateObserver(
web::WebState* web_state,
- ReadingListModel* reading_list_model)
+ ReadingListModel* reading_list_model,
+ ReadingListWebStateObserverDelegateType delegate)
: web::WebStateObserver(web_state),
- reading_list_model_(reading_list_model) {
+ reading_list_model_(reading_list_model),
+ delegate_(delegate) {
DCHECK(web_state);
DCHECK(reading_list_model_);
}
-void ReadingListWebStateObserver::DidStopLoading() {
- StopCheckingProgress();
+void ReadingListWebStateObserver::DidStartLoading() {
+ if (!reading_list_model_->loaded() || !web_state() ||
+ !web_state()->GetNavigationManager() ||
+ !web_state()->GetNavigationManager()->GetPendingItem()) {
+ StopCheckingProgress();
+ return;
+ }
+ GURL url =
+ web_state()->GetNavigationManager()->GetPendingItem()->GetVirtualURL();
+ const ReadingListEntry* entry = reading_list_model_->GetEntryByURL(url);
+ if (!entry || (entry->DistilledState() != ReadingListEntry::PROCESSED)) {
+ StopCheckingProgress();
+ return;
+ }
+ StartCheckingProgress(url);
}
void ReadingListWebStateObserver::PageLoaded(
web::PageLoadCompletionStatus load_completion_status) {
- if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS &&
- pending_url_.is_valid()) {
+ if (!reading_list_model_->loaded() || !web_state() ||
+ !web_state()->GetNavigationManager() ||
+ !web_state()->GetNavigationManager()->GetLastCommittedItem() ||
+ !pending_url_.is_valid()) {
+ StopCheckingProgress();
+ return;
+ }
+
+ if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS) {
reading_list_model_->SetReadStatus(pending_url_, true);
+ } else {
+ const ReadingListEntry* entry =
+ reading_list_model_->GetEntryByURL(pending_url_);
+ if (entry) {
+ LoadReadingListDistilled();
+ }
}
StopCheckingProgress();
}
@@ -133,11 +164,20 @@ void ReadingListWebStateObserver::VerifyIfReadingListEntryStartedLoading() {
double progress = web_state()->GetLoadingProgress();
const double kMinimumExpectedProgressPerStep = 0.25;
if (progress < try_number_ * kMinimumExpectedProgressPerStep) {
- reading_list::LoadReadingListDistilled(*entry, reading_list_model_,
- web_state());
+ LoadReadingListDistilled();
}
if (try_number_ >= 3) {
// Loading reached 75%, let the page finish normal loading.
timer_->Stop();
}
}
+
+void ReadingListWebStateObserver::LoadReadingListDistilled() {
+ const ReadingListEntry* entry =
+ reading_list_model_->GetEntryByURL(pending_url_);
+ DCHECK(entry->DistilledState() == ReadingListEntry::PROCESSED);
+ GURL url =
+ reading_list::DistilledURLForPath(entry->DistilledPath(), entry->URL());
+ [delegate_ displayOfflineVersionForURL:url];
Eugene But (OOO till 7-30) 2016/12/15 19:10:03 Is this a call of CRWWebController method?
+ reading_list_model_->SetReadStatus(entry->URL(), true);
+}

Powered by Google App Engine
This is Rietveld 408576698