@@ -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 onvalidstatechange=] 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 onvalidstatechange=] 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 onvalidstatechange=] on [=this=] .
566573
567574ISSUE: Do I need to define dictionary equality?
568575</div>
@@ -598,18 +605,20 @@ 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
602- event</dfn> for |element|:
608+ To <dfn for=HTMLPermissionElement>maybe dispatch onvalidstatechange</dfn> for |element|:
603609
6046101. Let |old| be {{[[LastNotifiedValidState]]}} .
6056111. Let |new| be whether |element|’s [=blocker=] is Nothing.
6066121. Set {{[[LastNotifiedValidState]]}} to |new|.
6076131. If |old| != |new|, then:
608614 1. Let |event| be a new {{Event}} .
609615 1. [=Event/Initialize=] |event| with
610- type "{{HTMLPermissionElement/onvalidationstatuschange}} ",
611- bubbles as true, and
612- canceable as true.
616+ <a argument for="Event/initEvent(type, bubbles, cancelable)">type</a>
617+ "{{HTMLPermissionElement/onvalidationstatuschange}} ",
618+ <a argument for="Event/initEvent(type, bubbles, cancelable)">bubbles</a>
619+ true, and
620+ <a argument for="Event/initEvent(type, bubbles, cancelable)">cancelable</a>
621+ true.
613622 1. [=/Dispatch=] |event| to |element|.
614623
615624</div>
@@ -618,8 +627,28 @@ event</dfn> for |element|:
618627To <dfn for=HTMLPermisssionElement>dispatch onresolve</dfn> for |element|:
619628
6206291. Let |event| be a new {{Event}} .
621- 1. [=Event/Initialize=] |event| with type "{{HTMLPermissionElement/onresolve}} ",
622- bubbles as true, and canceable as true.
630+ 1. [=Event/Initialize=] |event| with
631+ <a argument for="Event/initEvent(type, bubbles, cancelable)">type</a>
632+ "{{HTMLPermissionElement/onresolve}} ",
633+ <a argument for="Event/initEvent(type, bubbles, cancelable)">bubbles</a>
634+ true, and
635+ <a argument for="Event/initEvent(type, bubbles, cancelable)">cancelable</a>
636+ true.
637+ 1. [=/Dispatch=] |event| to |element|.
638+
639+ </div>
640+
641+ <div algorithm>
642+ To <dfn for=HTMLPermisssionElement>dispatch ondismiss</dfn> for |element|:
643+
644+ 1. Let |event| be a new {{Event}} .
645+ 1. [=Event/Initialize=] |event| with
646+ <a argument for="Event/initEvent(type, bubbles, cancelable)">type</a>
647+ "{{HTMLPermissionElement/ondismiss}} ",
648+ <a argument for="Event/initEvent(type, bubbles, cancelable)">bubbles</a>
649+ true, and
650+ <a argument for="Event/initEvent(type, bubbles, cancelable)">cancelable</a>
651+ true.
6236521. [=/Dispatch=] |event| to |element|.
624653
625654</div>
0 commit comments