Skip to content

"create an event" does not work with required members #600

Open

Description

@annevk

In particular as defined today step 3

Let defaultEventInitDict be the result of converting the JavaScript value undefined to the dictionary type accepted by eventInterface’s constructor. (This dictionary type will either be EventInit or a dictionary that inherits from it.)

would throw, which is a problem as https://searchfox.org/mozilla-central/search?q=required&path=Event.webidl suggests there's various events out there that have a required dictionary member.

We can deal with it failing, but that does seem to suggest that if you have a required dictionary member, you need to supply defaults in some other way than IDL. Alternatively we need to allow passing these members in some way to "fire an event" et al which would be the second refactoring to that whole operation within a rather sad short time period.

Activity

  1. marcoscaceres commented on Aug 27, 2018

    @marcoscaceres
    Member

    Why not let "create an event" just take a dictionary override:

    1. let initDict be a new SomeKindOfEventInitDict.
    2. Set initDict["requiredThing"] be "the required thing".
    3. "Create an event" with MyEventInteface ... deal with optional realm ... and initDict, and set ev to the resulting event.

    And then change:

    If dictionary was not passed, let dictionary be the result of converting the JavaScript value undefined to the dictionary type accepted by eventInterface’s constructor. (This dictionary type will either be EventInit or a dictionary that inherits from it.)

    So then it just use the passes dictionary?

  2. annevk commented on Aug 27, 2018

    @annevk
    MemberAuthor

    That would probably work, but then you can't use "fire an event" for those events. And if we wanted to enable that, which would make sense, we'd have to redefine how the IDL attributes are initialized and refactor all callers.

    (Multiple optional arguments also gets a little ugly and might warrant some refactoring of the callers.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions