- From: Daniel Vogelheim <notifications@github.com>
- Date: Thu, 13 Feb 2025 06:00:59 -0800
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/pull/1268/c2656686537@github.com>
otherdaniel left a comment (whatwg/dom#1268)
The solution outlined here is correct & self-consistent, and if all implementations agree I'll be happy.
I still think we can be simpler, though: The default policy introduces a seemingly concurrent operation. All operations, on all three categories of APIs outlined above, can be explained by serializing these operations.
Consider setAttributeNode:
As spec'ed here: First check structure; then run TT check; then re-check structure.
- TT error => throws TypeException
- structure error but no TT error => DOMException AttributeInUseError
- structure error created in TT callback => DOMException AttributeInUseError
- TT error *and* structure error =>TypeException
If instead, we spec it like so:
1. Let verifiedValue be value.
2. If verify is true: [... TT check; assign to verifiedValue ...]
3. If attr’s element is neither null nor element, throw an "InUseAttributeError" DOMException
4. [... old spec, but verifiedValue instead of value ...]
I think this would get us all of the same error conditions, but fewer operations. And IMHO easier to understand. And I like it, because explaining this behaviour in terms of serializing the checks and running the TT check gives us a guideline which we can apply to all similar cases.
There is one observable difference I can think of: If we have a structure error, and if the TT policy itself throws an exception, then in the first case we'd get AttributeInUseError, and in the second we'd get TypeException. I think that's okay.
--
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/pull/1268#issuecomment-2656686537
You are receiving this because you are subscribed to this thread.
Message ID: <whatwg/dom/pull/1268/c2656686537@github.com>
Received on Thursday, 13 February 2025 14:01:04 UTC