Re: [w3c/manifest] Feat(events): add BeforeInstallPromptEvent (#520)

This is what the text is based on:
```
class BeforeInstallPromptEvent extends Event {
  constructor(typeArg, eventInit) {
    // WebIDL Guard. Not in spec, as it's all handled by WebIDL.
    if (arguments.length === 0) {
      throw new TypeError("Not enough arguments. Expected at least 1.");
    }
    const initType = typeof eventInit;
    if (arguments.length === 2 && initType !== "undefined" && initType !== "object") {
      throw new TypeError("Value can't be converted to a dictionary.");
    }
    super(typeArg, Object.assign({ cancelable: true }, eventInit));

    if (eventInit && !hasValidUserChoice(eventInit)) {
      const msg = `The provided value '${eventInit.userChoice}' is not a valid` +
        " enum value of type AppBannerPromptOutcome.";
      throw new TypeError(msg);
    }
    // End WebIDL guard.
    let outcome = null;
    const internal = {
      didPrompt: false,
    };
    internalSlots.set(this, internal);
    internal.userResponsePromise = new Promise((resolve, reject) => {
      const props = {
        "promptOutcome": {
          get() {
            return outcome;
          },
          set: function(value) {
            if (outcome) {
              return;
            }
            outcome = value;
            resolve(createUserResponseObject(this));
          }.bind(this), // 'this' is the BeforeInstallPromptEvent instance
        },
        "rejectPromptPromise": {
          value(domException) {
            reject(domException);
          },
        },
      };
      Object.defineProperties(internal, props);
    });
    if (eventInit && eventInit.userChoice) {
      internal.promptOutcome = eventInit.userChoice;
    }
  }
  /**
   * prompt() method
   *
   * @return {[Promise]} The internal [[\userResponsePromise]]
   * @see https://www.w3.org/TR/appmanifest/#prompt-method
   */
  async prompt() {
    const internal = internalSlots.get(this);
    if (internal.promptOutcome !== null) {
      return internal.userResponsePromise;
    }
    if (!this.isTrusted) {
      const msg = ".prompt() can only called by trusted events.";
      internal.rejectPromptPromise(new DOMException(msg, "NotAllowedError"));
    } else if (!internal.didPrompt) {
      await requestInstallPrompt(this);
    }
    return internal.userResponsePromise;
  }
}
```

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/manifest/pull/520#issuecomment-258789304

Received on Monday, 7 November 2016 09:43:42 UTC