- 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