@@ -493,7 +493,7 @@ The {{HTMLPermissionElement}} [=insertion steps=] are:
493493 [=this=]
494494 is a [=fenced navigable=] , then [=add a permanent blocker=]
495495 with {{PermissionElementBlockerReason/illegal_subframe}} .
496- 1. [=Maybe trigger an onvalidstatechange event=] on [=this=] .
496+ 1. [=Maybe dispatch an onvalidstatechange event=] on [=this=] .
497497
498498</div>
499499
@@ -502,7 +502,7 @@ The {{HTMLPermissionElement}} [=removing steps=] are:
502502
5035031. [=list/Remove=] [=this=] from [=node navigable=] 's {{[[PermissionElements]]}} .
5045041. [=Recheck type permissibility=] for [=this=] 's [=node navigable=] .
505- 1. [=Maybe trigger an onvalidstatechange event=] on [=this=] .
505+ 1. [=Maybe dispatch an onvalidstatechange event=] on [=this=] .
506506
507507</div>
508508
@@ -528,14 +528,21 @@ A <{permission}> |element|'s [=EventTarget/activation behavior=] given |event| i
5285281. If |element|'s {{[[Types]]}} [=list/is empty=] , then return.
5295291. If |event|.{{Event/isTrusted}} is false, then return.
5305301. If |element|.{{HTMLPermissionElement/isValid}} is false, then return.
531- 1. [=Request permission to use=] the [=powerful features=] named in
532- |element|'s {{[[Types]]}} .
533- 1. [=Dispatch onresolve=] on [=this=] .
531+ 1. Let |result| be the result of [=request permission to use=] the
532+ [=powerful features=] named in |element|'s {{[[Types]]}} .
533+ 1. If |result| is `cancel`, [=dispatch ondismiss=] on [=this=] and return.
534+
535+ Issue: The [[PERMISSIONS]] spec assumes that [=request permission to use=]
536+ will always succeed. That is, it assumed that the user will always make a
537+ choice and that the algorithm will always deliver a `grant`/`deny`
538+ answer corresponding to that choice. But you can't force a user to do that.
539+ Some (or all?) [=user agents=] will allow a user to just close the dialog
540+ box without making a choice.
541+ Here, we will pretend this non-choice result is represented by the result
542+ `cancel`.
534543
535- Issue: What about event handlers?
544+ 1. [=Dispatch onresolve=] on [=this=] .
536545
537- Issue: What about dismissal? The Permission spec doesn't seem to know about
538- dismissals.
539546</div>
540547
541548<div algorithm="HTMLPermissionElement/IntersectionObserver callback">
@@ -562,7 +569,7 @@ The HTMLPermissionElement's <dfn for="HTMLPermissionElement">IntersectionObserve
562569 {{PermissionElementBlockerReason/intersection_changed}} .
5635701. Set {{[[IntersectionRect]]}} to
564571 |entry|.{{IntersectionObserverEntry/intersectionRect}}
565- 1. [=Maybe trigger an onvalidstatechange event=] on [=this=] .
572+ 1. [=Maybe dispatch an onvalidstatechange event=] on [=this=] .
566573
567574ISSUE: Do I need to define dictionary equality?
568575</div>
@@ -598,7 +605,7 @@ To <dfn for="HTMLPermissionElement">recheck type permissibility</dfn> for a
598605## <{permission}> element event algorithms ## {#events}
599606
600607<div algorithm>
601- To <dfn for=HTMLPermissionElement>maybe trigger an onvalidstatechange
608+ To <dfn for=HTMLPermissionElement>maybe dispatch an onvalidstatechange
602609event</dfn> for |element|:
603610
6046111. Let |old| be {{[[LastNotifiedValidState]]}} .
@@ -607,9 +614,12 @@ event</dfn> for |element|:
6076141. If |old| != |new|, then:
608615 1. Let |event| be a new {{Event}} .
609616 1. [=Event/Initialize=] |event| with
610- type "{{HTMLPermissionElement/onvalidationstatuschange}} ",
611- bubbles as true, and
612- canceable as true.
617+ <a argument for="Event/initEvent(type, bubbles, cancelable)">type</a>
618+ "{{HTMLPermissionElement/onvalidationstatuschange}} ",
619+ <a argument for="Event/initEvent(type, bubbles, cancelable)">bubbles</a>
620+ true, and
621+ <a argument for="Event/initEvent(type, bubbles, cancelable)">cancelable</a>
622+ true.
613623 1. [=/Dispatch=] |event| to |element|.
614624
615625</div>
@@ -618,8 +628,28 @@ event</dfn> for |element|:
618628To <dfn for=HTMLPermisssionElement>dispatch onresolve</dfn> for |element|:
619629
6206301. Let |event| be a new {{Event}} .
621- 1. [=Event/Initialize=] |event| with type "{{HTMLPermissionElement/onresolve}} ",
622- bubbles as true, and canceable as true.
631+ 1. [=Event/Initialize=] |event| with
632+ <a argument for="Event/initEvent(type, bubbles, cancelable)">type</a>
633+ "{{HTMLPermissionElement/onresolve}} ",
634+ <a argument for="Event/initEvent(type, bubbles, cancelable)">bubbles</a>
635+ true, and
636+ <a argument for="Event/initEvent(type, bubbles, cancelable)">cancelable</a>
637+ true.
638+ 1. [=/Dispatch=] |event| to |element|.
639+
640+ </div>
641+
642+ <div algorithm>
643+ To <dfn for=HTMLPermisssionElement>dispatch ondismiss</dfn> for |element|:
644+
645+ 1. Let |event| be a new {{Event}} .
646+ 1. [=Event/Initialize=] |event| with
647+ <a argument for="Event/initEvent(type, bubbles, cancelable)">type</a>
648+ "{{HTMLPermissionElement/ondismiss}} ",
649+ <a argument for="Event/initEvent(type, bubbles, cancelable)">bubbles</a>
650+ true, and
651+ <a argument for="Event/initEvent(type, bubbles, cancelable)">cancelable</a>
652+ true.
6236531. [=/Dispatch=] |event| to |element|.
624654
625655</div>
0 commit comments