From 3f3b8c2eabad1978674e14773ccb4f23bfe6b47b Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 25 Oct 2019 05:31:21 -0400 Subject: [PATCH] Tighten up [Serializable] and [Transferable] definitions * Spells out how when interitance gets involved, specs need to handle the whole object; we don't do any automatic inheritance-chain-crawling. * Removes the attempt at supporting mixins. Mixins have changed, so the text was no longer correct, and it was never very complete anyway. --- source | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/source b/source index 99890a263aa..140a2eb94fa 100644 --- a/source +++ b/source @@ -8061,7 +8061,7 @@ interface DOMStringList { serializable objects are necessarily preserved when they are serialized.

Platform objects can be serializable objects - if they implement only interfaces decorated with the primary interface is decorated with the [Serializable] IDL extended attribute. Such interfaces must also define the following algorithms:

@@ -8105,12 +8105,15 @@ interface DOMStringList { and deserialized by these steps. Typically the steps are very symmetric.

The [Serializable] extended attribute must take no - arguments, and must not appear on anything other than an interface. It must appear only once on an - interface. It must not be used on a callback interface. If it appears on a partial interface or an - interface that is really a mixin, then it must also appear on the original or mixed-in-to - interface, and any supplied serialization steps and deserialization - steps for the partial interface or mixin should be understood as being appended to those of - the original or mixed-in-to interface.

+ arguments, and must only appear on an interface. It must not appear more than once on an + interface.

+ +

For a given platform object, only the object's primary interface is + considered during the (de)serialization process. Thus, if inheritance is involved in defining the + interface, each [Serializable]-annotated interface in the + inheritance chain needs to define standalone serialization steps and + deserialization steps, including taking into account any important data that might + come from inherited interfaces.

Let's say we were defining a platform object Person, which had @@ -8178,7 +8181,7 @@ interface DOMStringList { been transferred, it cannot be transferred, or indeed used, again.

Platform objects can be transferable objects - if they implement only interfaces decorated with the primary interface is decorated with the [Transferable] IDL extended attribute. Such interfaces must also define the following algorithms:

@@ -8210,12 +8213,15 @@ interface DOMStringList { by these steps. Typically the steps are very symmetric.

The [Transferable] extended attribute must take no - arguments, and must not appear on anything other than an interface. It must appear only once on an - interface. It must not be used on a callback interface. If it appears on a partial interface or an - interface that is really a mixin, then it must also appear on the original or mixed-in-to - interface, and any supplied transfer steps and transfer-receiving - steps for the partial interface or mixin should be understood as being appended to those of - the original or mixed-in-to interface.

+ arguments, and must only appear on an interface. It must not appear more than once on an + interface.

+ +

For a given platform object, only the object's primary interface is + considered during the transferring process. Thus, if inheritance is involved in defining the + interface, each [Transferable]-annotated interface in the + inheritance chain needs to define standalone transfer steps and + transfer-receiving steps, including taking into account any important data that might + come from inherited interfaces.

Platform objects that are transferable objects have a DOMStringList {

  • Otherwise, if value is a platform object that is a serializable object, then perform the appropriate - serialization steps given value, serialized, and - forStorage.

    + data-x="serializable objects">serializable object, then perform the serialization + steps for value's primary interface, given value, + serialized, and forStorage.

    The serialization steps may need to perform a sub-serialization. This is an operation which takes as input a value