- From: Anne van Kesteren <notifications@github.com>
- Date: Mon, 21 Sep 2020 07:07:07 -0700
- To: heycam/webidl <webidl@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <heycam/webidl/pull/883/review/492631821@github.com>
@annevk approved this pull request. Thanks this looks good. I rather not call things PowerfulFeature as that tends to create confusion. Are the 4 newlines before a `<h4>` intended? > +Note: This is because adding the [{{CrossOriginIsolated}}] [=extended attribute=] on a [=member=] +when its containing definition is also annotated with the [{{CrossOriginIsolated}}] +[=extended attribute=] does not further restrict the exposure of the [=member=]. + +An [=interface=] without the [{{CrossOriginIsolated}}] [=extended attribute=] +must not [=interface/inherit=] from another interface +that does specify [{{CrossOriginIsolated}}]. + +<div class="example"> + + The following [=IDL fragment=] defines an interface with one [=operation=] that is executable + from all contexts, and two which are executable only from cross-origin isolated contexts. + + <pre highlight="webidl"> + [Exposed=Window] + interface PowerfulFeature { ```suggestion interface ExampleFeature { ``` > +must not [=interface/inherit=] from another interface +that does specify [{{CrossOriginIsolated}}]. + +<div class="example"> + + The following [=IDL fragment=] defines an interface with one [=operation=] that is executable + from all contexts, and two which are executable only from cross-origin isolated contexts. + + <pre highlight="webidl"> + [Exposed=Window] + interface PowerfulFeature { + // This call will succeed in all contexts. + Promise <Result> calculateNotSoSecretResult(); + + // This operation will not be exposed to a non-isolated context. In such a context, + // there will be no "calculateSecretResult" property on PowerfulFeature.prototype. ```suggestion // there will be no "calculateSecretResult" property on ExampleFeature.prototype. ``` > + The following [=IDL fragment=] defines an interface with one [=operation=] that is executable + from all contexts, and two which are executable only from cross-origin isolated contexts. + + <pre highlight="webidl"> + [Exposed=Window] + interface PowerfulFeature { + // This call will succeed in all contexts. + Promise <Result> calculateNotSoSecretResult(); + + // This operation will not be exposed to a non-isolated context. In such a context, + // there will be no "calculateSecretResult" property on PowerfulFeature.prototype. + [CrossOriginIsolated] Promise<Result> calculateSecretResult(); + + // The same applies here: the attribute will not be exposed to a non-isolated context, + // and in a non-secure context there will be no "secretBoolean" property on + // PowerfulFeature.prototype. ```suggestion // ExampleFeature.prototype. ``` > + // and in a non-secure context there will be no "secretBoolean" property on + // PowerfulFeature.prototype. + [CrossOriginIsolated] readonly attribute boolean secretBoolean; + }; + + // HighResolutionTimer will not be exposed in a non-isolated context, nor will its members. + // In such a context, there will be no "HighResolutionTimer" property on Window. + [CrossOriginIsolated] + interface HighResolutionTimer { + DOMHighResTimeStamp getHighResolutionTime(); + }; + + // The interface mixin members defined below will never be exposed in a non-isolated context, + // regardless of whether the interface that includes them is. + // In a non-isolated context, there will be no "snap" property on + // PowerfulFeature.prototype. ```suggestion // ExampleFeature.prototype. ``` > + // HighResolutionTimer will not be exposed in a non-isolated context, nor will its members. + // In such a context, there will be no "HighResolutionTimer" property on Window. + [CrossOriginIsolated] + interface HighResolutionTimer { + DOMHighResTimeStamp getHighResolutionTime(); + }; + + // The interface mixin members defined below will never be exposed in a non-isolated context, + // regardless of whether the interface that includes them is. + // In a non-isolated context, there will be no "snap" property on + // PowerfulFeature.prototype. + [CrossOriginIsolated] + interface mixin Snapshotable { + Promise<boolean> snap(); + }; + PowerfulFeature includes Snapshotable; ```suggestion ExampleFeature includes Snapshotable; ``` > + + // The interface mixin members defined below will never be exposed in a non-isolated context, + // regardless of whether the interface that includes them is. + // In a non-isolated context, there will be no "snap" property on + // PowerfulFeature.prototype. + [CrossOriginIsolated] + interface mixin Snapshotable { + Promise<boolean> snap(); + }; + PowerfulFeature includes Snapshotable; + + // On the other hand, the following interface mixin members will be exposed + // to a non-isolated context when included by a host interface + // that doesn't have the [CrossOriginIsolated] extended attribute. + // In a non-secure context, there will be a "log" property on + // PowerfulFeatures.prototype. ```suggestion // ExampleFeatures.prototype. ``` > + // PowerfulFeature.prototype. + [CrossOriginIsolated] + interface mixin Snapshotable { + Promise<boolean> snap(); + }; + PowerfulFeature includes Snapshotable; + + // On the other hand, the following interface mixin members will be exposed + // to a non-isolated context when included by a host interface + // that doesn't have the [CrossOriginIsolated] extended attribute. + // In a non-secure context, there will be a "log" property on + // PowerfulFeatures.prototype. + interface mixin Loggable { + Promise<boolean> log(); + }; + PowerfulFeatures includes Loggable; ```suggestion ExampleFeatures includes Loggable; ``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/heycam/webidl/pull/883#pullrequestreview-492631821
Received on Monday, 21 September 2020 14:07:20 UTC