fix(#281): preserve article reading position when returning from links#310
Merged
Conversation
Skip the redundant page load when a covered article's task restarts on pop-back, and ignore colorScheme changes fired while the scene is not active (app-switcher snapshot renders), reconciling a genuine appearance change on return to foreground. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #281 — tapping any link inside an article (external Safari or the inline pushed browser) reloaded the article and lost the reading position on return.
Root causes
ManagedWebView's.task(id: reloadTrigger)restarts when the covered article reappears and unconditionally re-ranperformLoad— a full URL load for articles, since they pass nocacheKey.colorSchemeonChangetwice — each flip triggeredpage?.reload()inMMWebViewplus a cookie-update + full reload inManagedWebView.Changes
WebViewLoadPolicy(new): pure decision logic — skip a load whose trigger already completed; ignore color-scheme changes while the scene is not active; reconcile only when the appearance genuinely changed while away.ManagedWebView: trackscompletedLoadTrigger(skips the redundant pop-back reload; cleared on.webContentProcessTerminatedso a jettisoned page recovers) andappliedColorScheme(snapshot flips ignored; a real appearance change is applied once on return to.active).MMWebView: same scenePhase gating + reconciliation aroundpage?.reload().isActivescenePhase crash-prevention gating and theremoveAdsreload path are untouched.Quality gates
xcodebuild test -testPlan MacMagazinepassed, including the newWebViewLoadPolicy TestsSwift Testing suite (9 cases)swiftlint lint --strict— 0 violations in 241 files🤖 Generated with Claude Code