Skip to content

fix: use InvalidStateError for non-fully-active document checks#1056

Open
marcoscaceres wants to merge 3 commits intogh-pagesfrom
fix-non-fully-active-error-type
Open

fix: use InvalidStateError for non-fully-active document checks#1056
marcoscaceres wants to merge 3 commits intogh-pagesfrom
fix-non-fully-active-error-type

Conversation

@marcoscaceres
Copy link
Member

@marcoscaceres marcoscaceres commented Mar 2, 2026

Per TAG Design Principles §3.2.2, InvalidStateError should be used for document state issues, while AbortError is reserved for user-initiated and developer-initiated aborts (e.g., navigating or removing a traversable).

See: https://www.w3.org/TR/design-principles/#handle-non-fully-active-documents

part of #1040

The following tasks have been completed:

Implementation commitment:

Optional, impact on Payment Handler spec?


Preview | Diff

Per TAG Design Principles §3.2.2, InvalidStateError should be used
for document state issues, while AbortError is reserved for
user-initiated aborts.

See: https://www.w3.org/TR/design-principles/#handle-non-fully-active-documents
@ianbjacobs
Copy link
Collaborator

I don't have any comments on this and defer to @stephenmcgruer

@stephenmcgruer
Copy link
Collaborator

LGTM; can you file implementation bugs against the various browsers, and also file an issue (or even update?) the relevant WPTs (if any exist) ?

@marcoscaceres
Copy link
Member Author

Filed WebKit bug and will update the tests. However, unfortunately I'm having issues filing the Chromium bug :(

@marcoscaceres
Copy link
Member Author

Tests - web-platform-tests/wpt#58210

@stephenmcgruer
Copy link
Collaborator

Chrome bug filed - https://crbug.com/489361935

marcoscaceres added a commit to marcoscaceres/WebKit that referenced this pull request Mar 4, 2026
…ully active

rdar://171593464
https://bugs.webkit.org/show_bug.cgi?id=309027

Reviewed by NOBODY (OOPS!).

Uses InvalidStateError for when the API is called from a detatched document,
and AbortError if script itself destroyed the script execution context/document.

Spec change:
w3c/payment-request#1056

Upstream WPT commit: web-platform-tests/wpt@c1c52b4

Test: imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https.html

* LayoutTests/TestExpectations:
* LayoutTests/http/tests/paymentrequest/page-cache-created-payment-response.https-expected.txt:
* LayoutTests/http/tests/paymentrequest/page-cache-created-payment-response.https.html:
* LayoutTests/http/tests/paymentrequest/page-cache-retried-payment-response.https-expected.txt:
* LayoutTests/http/tests/paymentrequest/page-cache-retried-payment-response.https.html:
* LayoutTests/http/tests/paymentrequest/payment-response-rejects-if-not-active.https.html:
* LayoutTests/http/tests/paymentrequest/rejects_if_not_active.https.html:
* LayoutTests/imported/w3c/resources/resource-files.json:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-allowed-by-feature-policy-attribute.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-allowed-by-feature-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-default-feature-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-disabled-by-feature-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/META.yml:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/WEB_FEATURES.yml: Added.
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-is-showing.https-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-is-showing.https.html:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-request-abort-method.https-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-request-show-method.https-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https.html:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/w3c-import.log:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-allowed-by-permissions-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-allowed-by-permissions-policy.https.sub.html:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-disabled-by-permissions-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-disabled-by-permissions-policy.https.sub.html:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-extension-allowed-by-permissions-policy-attribute.https.sub.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-supported-by-permissions-policy.tentative.html:
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac-wk2/TestExpectations:
* LayoutTests/tests-options.json:
* Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:
(WebCore::PaymentRequest::show):
(WebCore::PaymentRequest::canMakePayment):
* Source/WebCore/Modules/paymentrequest/PaymentResponse.cpp:
(WebCore::PaymentResponse::complete):
(WebCore::PaymentResponse::retry):
* Source/WebCore/Modules/paymentrequest/PaymentResponse.h:
* Source/WebCore/Modules/paymentrequest/PaymentResponse.idl:
@marcoscaceres
Copy link
Member Author

Sent a PR to patch WebKit ... and fixed a bunch of WPTs!!! web-platform-tests/wpt#58210

Worthwhile change. 🕺

marcoscaceres added a commit to marcoscaceres/WebKit that referenced this pull request Mar 4, 2026
…ully active

rdar://171593464
https://bugs.webkit.org/show_bug.cgi?id=309027

Reviewed by NOBODY (OOPS!).

Uses InvalidStateError for when the API is called from a detatched document,
and AbortError if script itself destroyed the script execution context/document.

Spec change:
w3c/payment-request#1056

Upstream WPT commit: web-platform-tests/wpt@c1c52b4

Test: imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https.html

* LayoutTests/TestExpectations:
* LayoutTests/http/tests/paymentrequest/page-cache-created-payment-response.https-expected.txt:
* LayoutTests/http/tests/paymentrequest/page-cache-created-payment-response.https.html:
* LayoutTests/http/tests/paymentrequest/page-cache-retried-payment-response.https-expected.txt:
* LayoutTests/http/tests/paymentrequest/page-cache-retried-payment-response.https.html:
* LayoutTests/http/tests/paymentrequest/payment-response-rejects-if-not-active.https.html:
* LayoutTests/http/tests/paymentrequest/rejects_if_not_active.https-expected.txt:
* LayoutTests/http/tests/paymentrequest/rejects_if_not_active.https.html:
* LayoutTests/imported/w3c/resources/resource-files.json:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-allowed-by-feature-policy-attribute-redirect-on-load.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-allowed-by-feature-policy-attribute.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-allowed-by-feature-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-default-feature-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/feature-policy/payment-disabled-by-feature-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/META.yml:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/WEB_FEATURES.yml: Added.
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-is-showing.https-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-is-showing.https.html:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-request-abort-method.https-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/payment-request/payment-request-show-method.https-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https.html:
* LayoutTests/imported/w3c/web-platform-tests/payment-request/w3c-import.log:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-allowed-by-permissions-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-allowed-by-permissions-policy.https.sub.html:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-disabled-by-permissions-policy.https.sub-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-disabled-by-permissions-policy.https.sub.html:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-extension-allowed-by-permissions-policy-attribute.https.sub.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-supported-by-permissions-policy.tentative-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/permissions-policy/payment-supported-by-permissions-policy.tentative.html:
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/mac-wk2/TestExpectations:
* LayoutTests/tests-options.json:
* Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp:
(WebCore::PaymentRequest::show):
(WebCore::PaymentRequest::canMakePayment):
* Source/WebCore/Modules/paymentrequest/PaymentResponse.cpp:
(WebCore::PaymentResponse::complete):
(WebCore::PaymentResponse::retry):
* Source/WebCore/Modules/paymentrequest/PaymentResponse.h:
* Source/WebCore/Modules/paymentrequest/PaymentResponse.idl:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants