- From: Anne van Kesteren <notifications@github.com>
- Date: Thu, 27 Oct 2022 07:50:51 -0700
- To: whatwg/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/webidl/pull/1211/review/1158414495@github.com>
@annevk commented on this pull request. I found a couple nits, looks great overall. > - [=error name=] for the {{DOMException}} case and optionally a string giving a user - agent-defined message: + 1. Let |ex| be a [=new=] instance of the [=interface=] identified by |type|, created in the + [=current realm=]. + + 1. Set |ex|'s [=DOMException/name=] to |type|. + + 1. Set |ex|'s [=DOMException/message=] to an [=implementation-defined=] message appropriate for + the exceptional situation. The calling specification may contain information to to help + implementations construct this message. + + Implementations need to be cautious not to leak sensitive or secured information when + constructing this message, e.g., by including the URL of a cross-origin frame, or + information which could identify the user. + + 1. Initialize |ex|'s additionally as described by the caller. I don't think this is English? > -<dfn id="dfn-exception-message" for="exception" export>message</dfn>, which is an optional, -user agent-defined value that provides human readable details of the error. - -There are two kinds of exceptions available to be thrown from specifications. -The first is a <dfn id="dfn-simple-exception" export>simple exception</dfn>, which -is identified by one of the following types: +An <dfn id="dfn-exception" export>exception</dfn> is a type of object that represents an error and +which can be thrown or treated as a first class value by implementations. Web IDL has a number of +pre-defined exceptions that specifications can reference and throw in their definition of +operations, attributes, and so on. Custom exception types can also be defined, as [=interfaces=] +that [=interface/inherit=] from {{DOMException}}. + +In addition to their type, which is either one of the [=simple exceptions=], {{DOMException}}, or a +derived interface of {{DOMException}}, all exceptions have a +<dfn id="dfn-exception-message" for="exception" export>message</dfn>, which is an +[=implementation-defined=] [=string=] that provides human readable details of the error. ```suggestion [=implementation-defined=] [=string=] that provides human-readable details of the error. ``` > -<p class="warning"> - The {{DOMException}} names marked as deprecated are kept for legacy purposes but their usage is discouraged. -</p> +The resulting behavior from creating and throwing an exception is language binding-specific. ```suggestion The resulting behavior from creating and throwing an exception is language-binding specific. ``` (Or maybe hyphens everywhere?) > -Note: If an error name is not listed here, please file a bug as indicated at the top of this specification and it will be addressed shortly. Thanks! +When [=exception/creating=] or [=exception/throwing=] a {{DOMException}}, specifications must use +one of these names. If a specification author believes none of these names are a good fit for their +case, they must +<a href="https://github.com/heycam/webidl/issues/new?title=DOMException%20name%20proposal">file an issue</a> ```suggestion <a href="https://github.com/whatwg/webidl/issues/new?title=DOMException%20name%20proposal">file an issue</a> ``` > - -There are two kinds of exceptions available to be thrown from specifications. -The first is a <dfn id="dfn-simple-exception" export>simple exception</dfn>, which -is identified by one of the following types: +An <dfn id="dfn-exception" export>exception</dfn> is a type of object that represents an error and +which can be thrown or treated as a first class value by implementations. Web IDL has a number of +pre-defined exceptions that specifications can reference and throw in their definition of +operations, attributes, and so on. Custom exception types can also be defined, as [=interfaces=] +that [=interface/inherit=] from {{DOMException}}. + +In addition to their type, which is either one of the [=simple exceptions=], {{DOMException}}, or a +derived interface of {{DOMException}}, all exceptions have a +<dfn id="dfn-exception-message" for="exception" export>message</dfn>, which is an +[=implementation-defined=] [=string=] that provides human readable details of the error. +{{DOMException}} instances also have an +<dfn id="dfn-exception-error-name" for="exception" export>error name</dfn> [=string=], which It's weird that we have error name here, but then for `DOMException` we also define an internal name field. I don't think we need both? Message seems similarly duplicated. > + [=deserialization steps=] preserve the additional information. + +<p class=note>These requirements mean that the inherited {{DOMException/code}} property of these +interfaces will always return 0. + +<div class=example id=example-domexception-derived-interface> + The definition for a {{DOMException}} derived interface which carries along an additional + "hardware error code", for interfacing with a hypothetical Widget hardware device, could look + something like this: + + <pre highlight=webidl> + [Exposed=Window] + interface WidgetError : DOMException { + constructor(optional DOMString message = "", WidgetErrorOptions options); + + readonly attribute unsigned long long hardwareErrorCode; Perhaps we ought to encourage an enum instead? -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/webidl/pull/1211#pullrequestreview-1158414495 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/webidl/pull/1211/review/1158414495@github.com>
Received on Thursday, 27 October 2022 14:51:04 UTC