// https://github.com/wicg/trusted-types

typedef (DOMString or TrustedHTML) HTMLString;
typedef (DOMString or TrustedScript) ScriptString;
typedef (DOMString or TrustedScriptURL) ScriptURLString;
typedef (USVString or TrustedURL) URLString;

[Exposed=(Window, Worker)]
interface TrustedHTML {
    stringifier;
};

[Exposed=(Window, Worker)]
interface TrustedScript {
    stringifier;
};

[Exposed=(Window, Worker)]
interface TrustedScriptURL {
    stringifier;
};

[Exposed=(Window, Worker)]
interface TrustedURL {
    stringifier;
};

[Exposed=(Window, Worker)]
interface TrustedTypePolicyFactory {
    [Unforgeable] TrustedTypePolicy createPolicy(DOMString policyName, TrustedTypePolicyOptions policyOptions);
    // All the policy object names that have been created
    [Unforgeable] sequence<DOMString> getPolicyNames();
};

[Exposed=(Window, Worker)]
interface TrustedTypePolicy {
    [Unforgeable] readonly attribute DOMString name;
    [Unforgeable] TrustedHTML createHTML(DOMString input);
    [Unforgeable] TrustedScript createScript(DOMString input);
    [Unforgeable] TrustedScriptURL createScriptURL(DOMString input);
    [Unforgeable] TrustedURL createURL(DOMString input);
};

dictionary TrustedTypePolicyOptions {
   CreateHTMLCallback createHTML;
   CreateScriptCallback createScript;
   CreateURLCallback createScriptURL;
   CreateURLCallback createURL;
};

callback CreateHTMLCallback = DOMString (DOMString input);
callback CreateScriptCallback = DOMString (DOMString input);
callback CreateURLCallback = USVString (DOMString input);
