add safari redirect loop special error page#2728
Conversation
[Beta] Generated file diffTime updated: Fri, 29 May 2026 10:22:45 GMT Apple
File has changed Integration
File has changed Windows
File has changed |
There was a problem hiding this comment.
Stale comment
Web Compatibility Assessment
No findings. The changes are scoped to the
special-errorspecial page UI, schema/types, sample data, integration tests, and locale strings. They do not touch injected runtime code, browser API wrappers/shims, prototype patches, page DOM mutation observers, or platform entry points.Security Assessment
No findings. The new Safari redirect-loop path reuses the existing paramless
visitSitenotification, so it does not forward page-derived objects or introduce anativeDataleakage path. The addederrorData.urlfield is not rendered, echoed back to native, used for network requests, or passed topostMessage.Risk Level
Low Risk: special-page presentation and schema additions only, with no changes to injected API surface, captured globals, message transports, origin validation, or bridge security checks.
Recommendations
- Run the targeted
special-errorintegration coverage for the newsafariRedirectLooppath on the intended Apple project/build artifact before merge.- Optional cleanup: remove the trailing space from the new
safariRedirectLoopPageHeadingsource string if it is not intentional.Sent by Cursor Automation: Web compat and sec
|
This PR requires a manual review and approval from a member of one of the following teams:
|
…-SSL kind (including safariRedirectLoop).
Build Branch
Static preview entry points
QR codes (mobile preview)
Integration commandsnpm (Android / Extension): Swift Package Manager (Apple): .package(url: "https://github.com/duckduckgo/content-scope-scripts.git", branch: "pr-releases/brindy/special-error-page-for-x-safari-https-scheme-loop")git submodule (Windows): git -C submodules/content-scope-scripts fetch origin pr-releases/brindy/special-error-page-for-x-safari-https-scheme-loop
git -C submodules/content-scope-scripts checkout origin/pr-releases/brindy/special-error-page-for-x-safari-https-scheme-loopPin to exact commitnpm (Android / Extension): Swift Package Manager (Apple): .package(url: "https://github.com/duckduckgo/content-scope-scripts.git", revision: "688fbae6afcbc7eeae15040d832746141f835cb6")git submodule (Windows): git -C submodules/content-scope-scripts fetch origin pr-releases/brindy/special-error-page-for-x-safari-https-scheme-loop
git -C submodules/content-scope-scripts checkout 688fbae6afcbc7eeae15040d832746141f835cb6 |
There was a problem hiding this comment.
Stale comment
Web Compatibility Assessment
No findings. The latest diff remains scoped to the
special-errorspecial-page UI, schema/types, sample data, locale strings, and integration coverage. It does not touch injected runtime code, browser API wrappers/shims, prototype patches, DOM observers, or platform entry points.Security Assessment
No findings. The new Safari redirect-loop path reuses the existing paramless
visitSitenotification, so it does not forward page-derived objects or introduce anativeDataleakage path. The addederrorData.urlfield is not rendered, echoed to native, used for network requests, or sent viapostMessage.Risk Level
Low Risk: special-page presentation and message-schema additions only, with no changes to injected API surface, captured globals, message transports, origin validation, or bridge security checks.
Recommendations
No blocking recommendations. The prior trailing-space copy concern is addressed in the latest sync.
Validation:
npm run build --workspace=special-pagesandnpm run test-int --workspace=special-pages -- pages/special-error/integration-tests/special-error.spec.js --grep "safari redirect loop|opens site in safari" --reporter listpassed.Sent by Cursor Automation: Web compat and sec
Dismissing stale approval — new commits pushed, awaiting Cursor re-review.
There was a problem hiding this comment.
Stale comment
Web Compatibility Assessment
No findings. The current diff is isolated to the
special-errorspecial page UI, schema/types, locale copy, and integration tests. It does not touch injected runtime code, browser API wrappers/shims, prototype patches, page-world DOM observers, or platform entry points.Security Assessment
No findings. The new
generalPageProblempath sends a paramlessopenInBrowsernotification, so it does not forward page-derived objects or introduce anativeDataleakage path. Native-providedtitle/message/buttoncopy is rendered as text through Preact, and the requiredurlfield is not rendered, fetched, posted, or echoed back to native.Risk Level
Medium Risk: this adds a user-facing special-error path and a new native notification contract, but the scope is limited to the special page and does not alter injected API surface, captured globals, message transports, origin validation, or bridge security checks.
Recommendations
No blocking recommendations. Keep the existing
visitSitenotification for Advanced/accept-risk flows and the newopenInBrowsernotification only on thegeneralPageProblemprimary action, as the latest head does.Validation:
git diff --check,npm run build --workspace=special-pages, andnpm run test-int --workspace=special-pages -- pages/special-error/integration-tests/special-error.spec.js --reporter listpassed.Sent by Cursor Automation: Web compat and sec
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7830c71. Configure here.
There was a problem hiding this comment.
Stale comment
Web Compatibility Assessment
No findings. The current diff is isolated to the
special-errorspecial page UI, schema/types, locale copy, and integration tests. It does not touch injected runtime code, browser API wrappers/shims, prototype patches, page-world DOM observers, or platform entry points. The latest sync only extracts duplicated primary-button variant mapping intogetPrimaryActionButtonVariant().Security Assessment
No findings. The new
generalPageProblempath sends a paramlessopenInBrowsernotification, so it does not forward page-derived objects or introduce anativeDataleakage path. Native-providedtitle/message/buttoncopy is rendered as text through Preact, and the requiredurlfield is not rendered, fetched, posted, or echoed back to native.Risk Level
Medium Risk: this adds a user-facing special-error path and a new native notification contract, but the scope is limited to the special page and does not alter injected API surface, captured globals, message transports, origin validation, or bridge security checks.
Recommendations
No blocking recommendations. Keep the existing
visitSitenotification for Advanced/accept-risk flows and the newopenInBrowsernotification only on thegeneralPageProblemprimary action.Validation:
git diff --checkandnpm run build --workspace=special-pagespassed.Sent by Cursor Automation: Web compat and sec
| @@ -69,16 +69,55 @@ test.describe('special-error', () => { | |||
| await special.showsScamPage(); | |||
| }); | |||
|
|
|||
There was a problem hiding this comment.
Let's try something out...
@cursoragent Add two screenshot test cases in special-pages/pages/special-error/integration-tests/special-error-screenshots.spec.js :
- For GeneralErrorPage without overrides
- For GeneralErrorPage with title, message and button overrides
edit: @ddg-cursor maybe? Bugbot, who do I tag for this?
There was a problem hiding this comment.
LGTM and preview looks good too https://rawcdn.githack.com/duckduckgo/content-scope-scripts/a3f7c08ee414db36e6b623c2e42cb7e91e6413ac/build/integration/pages/special-error/index.html?errorId=generalPageProblem
Left a request for Cursor to generate screenshot cases as they are great for spotting regressions on copy and styling. First time trying it, not sure it's gonna work.
Dismissing stale approval — new commits pushed, awaiting Cursor re-review.
There was a problem hiding this comment.
Web Compatibility Assessment
No findings. The current diff is scoped to the special-error special page UI, message schema/types, locale copy, docs, and integration/screenshot coverage. It does not touch injected runtime code, browser API wrappers/shims, prototype patches, page-world DOM observers, platform entry points, or cross-frame behavior.
Latest sync note: the only runtime change since the previous automation review is a JSDoc type relaxation in Warning.jsx; the rest adds generalPageProblem screenshot tests and snapshots.
Security Assessment
No findings. The generalPageProblem path sends a paramless openInBrowser notification, so it does not forward page-derived objects or introduce a nativeData leakage path. Native-provided title / message / button values are rendered as text through Preact, and the required url field is not rendered, fetched, posted, or echoed back to native.
Risk Level
Medium Risk: this adds a user-facing special-error path and a new native notification contract, but it remains limited to the special page and does not alter injected API surface, captured globals, message transports, origin validation, or bridge security checks.
Recommendations
No blocking recommendations. Keep visitSite reserved for the existing Advanced/accept-risk flow and openInBrowser only for the generalPageProblem primary action.
Validation: I reviewed the full PR diff plus the incremental diff since the prior automation review. GitHub checks showed build/unit/injected jobs passing; special-pages integration and snapshot jobs were still pending at review time.
Sent by Cursor Automation: Web compat and sec



Asana Task/Github Issue: https://app.asana.com/1/137249556945/project/392891325557410/task/1215121749144047?focus=true
Description
New special error page for Safari redirect loop, as a generic general page problem with parameterised title, etc.
Testing Steps
npm run buildthis branchChecklist
Please tick all that apply:
Note
Low Risk
User-facing special-page UX and a new native messaging hook; no auth or sensitive data handling changes.
Overview
Adds a
generalPageProblemspecial-error variant for pages that cannot load in-app (e.g. Safari redirect loops), with optional nativetitle,message, andbuttonoverrides and default copy via new locale keys.For this kind, the UI hides Advanced and shows a primary Open in Browser action that sends a new
openInBrowsernotification (existingvisitSiteremains for the advanced “accept risk” flow on other errors). Tab title, headings, and styling aligngeneralPageProblemwith SSL-style shield treatment.Schema, types, docs, sample data, and Playwright/screenshot tests cover the new flow and overrides.
Reviewed by Cursor Bugbot for commit 493338d. Bugbot is set up for automated code reviews on this repo. Configure here.