diff --git a/dist/cjs/trustedtypes.api_only.js b/dist/cjs/trustedtypes.api_only.js index d7d6274c..740b68d5 100644 --- a/dist/cjs/trustedtypes.api_only.js +++ b/dist/cjs/trustedtypes.api_only.js @@ -629,6 +629,7 @@ const trustedTypesBuilderTestOnly = function() { getPropertyType, getTypeMapping, emptyHTML, + defaultPolicy, // Just to make the compiler happy, this is overridden below. TrustedHTML: TrustedHTML, TrustedURL: TrustedURL, @@ -636,6 +637,11 @@ const trustedTypesBuilderTestOnly = function() { TrustedScript: TrustedScript, }); + defineProperty(api, 'defaultPolicy', { + get: getDefaultPolicy, + set: () => {}, + }); + return { trustedTypes: freeze(api), setAllowedPolicyNames, @@ -697,6 +703,11 @@ function setupPolyfill() { 'emptyHTML': tt.emptyHTML, '_isPolyfill_': true, }); + Object.defineProperty( + publicApi, + 'defaultPolicy', + Object.getOwnPropertyDescriptor(tt, 'defaultPolicy') || {}); + window[rootProperty] = Object.freeze(publicApi); window['TrustedHTML'] = tt.TrustedHTML; diff --git a/dist/es5/trustedtypes.api_only.build.js b/dist/es5/trustedtypes.api_only.build.js index d8db8369..0ee41a36 100644 --- a/dist/es5/trustedtypes.api_only.build.js +++ b/dist/es5/trustedtypes.api_only.build.js @@ -8,22 +8,22 @@ */ function aa(a){var c=0;return function(){return c {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n",null,"/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n"]} \ No newline at end of file +{"version":3,"sources":[" [synthetic:es6/util/arrayiterator] "," [synthetic:util/defineproperty] "," [synthetic:util/global] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterator] "," [synthetic:util/objectcreate] "," [synthetic:es6/util/setprototypeof] "," [synthetic:es6/util/inherits] "," [synthetic:util/owns] "," [synthetic:util/polyfill] "," [synthetic:es6/weakmap] "," [synthetic:es6/util/assign] "," [synthetic:es6/object/assign] ","src/trustedtypes.js"," [synthetic:es6/util/arrayfromiterable] ","src/polyfill/api_only.js"],"names":["$jscomp.defineProperty","$jscomp.global","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SymbolClass","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIteratorImpl","$jscomp.objectCreate","$jscomp.setPrototypeOf","$jscomp.polyfill","$jscomp.makeIterator","$jscomp.owns","$jscomp.assign","rejectInputFn","TypeError","String","prototype","toLowerCase","toUpperCase","TrustedTypePolicy","TrustedTypePolicyFactory","trustedTypes","trustedTypesBuilderTestOnly","TrustedScript","TrustedHTML","TrustedScriptURL","TrustedURL","constructor","TrustedType","s","policyName","creatorSymbol","Error","defineProperty","value","enumerable","privates","obj","v","privateMap","get","undefined","create","set","selfContained","collection","proto","getPrototypeOf","ObjectPrototype","getOwnPropertyNames","key","lockdownTrustedType","SubClass","canonName","freeze","name","isTrustedTypeChecker","type","has","wrapPolicy","innerPolicy","creator","Ctor","methodName","method","policySpecificType","factory","args","result","$jscomp.arrayFromIterator","allowedValue","o","policy","createTypeMapping","writable","configurable","getTypeInternal_","tag","container","elNs","attrNs","canonicalTag","apply","ns","HTML_NS","map","hasOwnProperty","TYPE_MAP","getDefaultPolicy","defaultPolicy","Object","assign","Array","forEach","push","Symbol","WeakMap","policyNames","allowedNames","enforceNameWhitelist","toString","valueOf","$jscomp.inherits","emptyHTML","XLINK_NS","SVG_NS","ATTR_PROPERTY_MAP","HTMLIFrameElement","keys","attr","HTMLElement","slice","createFunctionAllowed","api","createPolicy","indexOf","call","console","warn","wrappedPolicy","DEFAULT_POLICY_NAME","getPolicyNames","isHTML","isURL","isScriptURL","isScript","getAttributeType","tagName","attribute","elementNs","attributeNs","canonicalAttr","getPropertyType","property","getTypeMapping","namespaceUri","document","documentElement","namespaceURI","e","JSON","parse","stringify","setAllowedPolicyNames","allowedPolicyNames","length","el","resetDefaultPolicy","splice","window","publicApi","tt","getOwnPropertyDescriptor"],"mappings":"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","file":"trustedtypes.api_only.build.js","sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n defaultPolicy, // Just to make the compiler happy, this is overridden below.\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n defineProperty(api, 'defaultPolicy', {\n get: getDefaultPolicy,\n set: () => {},\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n",null,"/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n Object.defineProperty(\n publicApi,\n 'defaultPolicy',\n Object.getOwnPropertyDescriptor(tt, 'defaultPolicy') || {});\n\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n"]} \ No newline at end of file diff --git a/dist/es5/trustedtypes.build.js b/dist/es5/trustedtypes.build.js index e288a355..f8ccd928 100644 --- a/dist/es5/trustedtypes.build.js +++ b/dist/es5/trustedtypes.build.js @@ -6,48 +6,48 @@ https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document */ -function aa(a){var b=0;return function(){return bc&&(c=Math.max(c+d,0));c"}}).childNodes.length}(document),Y(a,Range.prototype,"createContextualFragment",K.TrustedHTML,0),Y(a,Ta,"insertAdjacentHTML",K.TrustedHTML,1),Q(Document.prototype,"write")?(Y(a,Document.prototype,"write",K.TrustedHTML,0),Y(a,Document.prototype,"open",K.TrustedURL,0)): -(Y(a,HTMLDocument.prototype,"write",K.TrustedHTML,0),Y(a,HTMLDocument.prototype,"open",K.TrustedURL,0)),Y(a,Sa,"open",K.TrustedURL,0),"DOMParser"in window&&Y(a,DOMParser.prototype,"parseFromString",K.TrustedHTML,0),Y(a,window,"setInterval",K.TrustedScript,0),Y(a,window,"setTimeout",K.TrustedScript,0),ob(a),pb(a),qb(a)} +function aa(a){var b=0;return function(){return bc&&(c=Math.max(c+d,0));c"}}).childNodes.length}(document),Y(a,Range.prototype,"createContextualFragment",I.TrustedHTML,0),Y(a,Ta,"insertAdjacentHTML",I.TrustedHTML,1),L(Document.prototype,"write")?(Y(a,Document.prototype,"write",I.TrustedHTML,0),Y(a,Document.prototype,"open",I.TrustedURL,0)): +(Y(a,HTMLDocument.prototype,"write",I.TrustedHTML,0),Y(a,HTMLDocument.prototype,"open",I.TrustedURL,0)),Y(a,Sa,"open",I.TrustedURL,0),"DOMParser"in window&&Y(a,DOMParser.prototype,"parseFromString",I.TrustedHTML,0),Y(a,window,"setInterval",I.TrustedScript,0),Y(a,window,"setTimeout",I.TrustedScript,0),ob(a),pb(a),qb(a)} function pb(a){["appendChild","insertBefore","replaceChild"].forEach(function(b){Z(a,Node.prototype,b,function(c,e){for(var d=[],f=1;f} allowedPolicyNames Whitelisted policy names.\n * @param {?string} cspString String with the CSP policy.\n */\n constructor(isLoggingEnabled,\n isEnforcementEnabled,\n allowedPolicyNames,\n cspString = null) {\n /**\n * True if logging is enabled.\n * @type {boolean}\n */\n this.isLoggingEnabled = isLoggingEnabled;\n\n /**\n * True if enforcement is enabled.\n * @type {boolean}\n */\n this.isEnforcementEnabled = isEnforcementEnabled;\n\n /**\n * Allowed policy names.\n * @type {Array}\n */\n this.allowedPolicyNames = allowedPolicyNames;\n\n /**\n * CSP string that defined the policy.\n * @type {?string}\n */\n this.cspString = cspString;\n }\n\n /**\n * Parses a CSP policy.\n * @link https://www.w3.org/TR/CSP3/#parse-serialized-policy\n * @param {string} cspString String with a CSP definition.\n * @return {Object>} Parsed CSP, keyed by directive\n * names.\n */\n static parseCSP(cspString) {\n const SEMICOLON = /\\s*;\\s*/;\n const WHITESPACE = /\\s+/;\n return cspString.trim().split(SEMICOLON)\n .map((serializedDirective) => serializedDirective.split(WHITESPACE))\n .reduce(function(parsed, directive) {\n if (directive[0]) {\n parsed[directive[0]] = directive.slice(1).map((s) => s).sort();\n }\n return parsed;\n }, {});\n }\n\n /**\n * Creates a TrustedTypeConfig object from a CSP string.\n * @param {string} cspString\n * @return {!TrustedTypeConfig}\n */\n static fromCSP(cspString) {\n const isLoggingEnabled = true;\n const policy = TrustedTypeConfig.parseCSP(cspString);\n const enforce = DIRECTIVE_NAME in policy;\n let policies = ['*'];\n if (enforce) {\n policies = policy[DIRECTIVE_NAME].filter((p) => p.charAt(0) !== '\\'');\n }\n\n return new TrustedTypeConfig(\n isLoggingEnabled,\n enforce, /* isEnforcementEnabled */\n policies, /* allowedPolicyNames */\n cspString\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that enforces the types.\n */\nimport {TrustedTypesEnforcer} from '../enforcer.js';\nimport {TrustedTypeConfig} from '../data/trustedtypeconfig.js';\n/* eslint-disable no-unused-vars */\nimport TrustedTypes from './api_only.js';\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Tries to guess a CSP policy from:\n * - the current polyfill script element text content (if prefixed with\n * \"Content-Security-Policy:\")\n * - the data-csp attribute value of the current script element.\n * - meta header\n * @return {?string} Guessed CSP value, or null.\n */\nfunction detectPolicy() {\n try {\n const currentScript = document.currentScript || (function() {\n const scripts = document.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n })();\n\n const bodyPrefix = 'Content-Security-Policy:';\n if (currentScript &&\n currentScript.textContent.trim().substr(0, bodyPrefix.length) ==\n bodyPrefix) {\n return currentScript.textContent.trim().slice(bodyPrefix.length);\n }\n if (currentScript.dataset['csp']) {\n return currentScript.dataset['csp'];\n }\n const cspInMeta = document.head.querySelector(\n 'meta[http-equiv^=\"Content-Security-Policy\"]');\n if (cspInMeta) {\n return cspInMeta['content'].trim();\n }\n } catch (e) {\n return null;\n }\n return null;\n}\n\n/**\n * Bootstraps all trusted types polyfill and their enforcement.\n */\nexport function bootstrap() {\n const csp = detectPolicy();\n const config = csp ? TrustedTypeConfig.fromCSP(csp) : new TrustedTypeConfig(\n /* isLoggingEnabled */ false,\n /* isEnforcementEnabled */ false,\n /* allowedPolicyNames */ ['*']);\n\n const trustedTypesEnforcer = new TrustedTypesEnforcer(config);\n\n trustedTypesEnforcer.install();\n}\n\n/**\n * Determines if the enforcement should be enabled.\n * @return {boolean}\n */\nfunction shouldBootstrap() {\n for (const rootProperty of ['trustedTypes', 'TrustedTypes']) {\n if (window[rootProperty] && !window[rootProperty]['_isPolyfill_']) {\n // Native implementation exists\n return false;\n }\n }\n return true;\n}\n\n// Bootstrap only if native implementation is missing.\nif (shouldBootstrap()) {\n bootstrap();\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n",null,"/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst {\n defineProperty,\n} = Object;\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n */\nexport function installSetter(object, name, setter) {\n const descriptor = {\n set: setter,\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs a setter and getter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n * @param {function(*): *|undefined} getter A getter function}\n */\nexport function installSetterAndGetter(object, name, setter, getter) {\n const descriptor = {\n set: setter,\n get: getter,\n configurable: true, // This can get uninstalled, we need configurable: true\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} fn A function}\n */\nexport function installFunction(object, name, fn) {\n defineProperty(object, name, {\n value: fn,\n });\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/* eslint-disable no-unused-vars */\nimport {DIRECTIVE_NAME, TrustedTypeConfig} from './data/trustedtypeconfig.js';\nimport {\n trustedTypes as TrustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n HTML_NS,\n} from\n './trustedtypes.js';\n\n/* eslint-enable no-unused-vars */\nimport {installFunction, installSetter, installSetterAndGetter}\n from './utils/wrapper.js';\n\nconst {apply} = Reflect;\nconst {\n getOwnPropertyNames,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n} = Object;\n\nconst {\n hasOwnProperty,\n isPrototypeOf,\n} = Object.prototype;\n\nconst {slice} = String.prototype;\n\n// No URL in IE 11.\nconst UrlConstructor = typeof window.URL == 'function' ?\n URL.prototype.constructor :\n null;\n\nlet stringifyForRangeHack;\n\n/**\n * Return object constructor name\n * (their function.name is not available in IE 11).\n * @param {*} fn\n * @return {string}\n * @private\n */\nconst getConstructorName_ = document.createElement('div').constructor.name ?\n (fn) => fn.name :\n (fn) => ('' + fn).match(/^\\[object (\\S+)\\]$/)[1];\n\n// window.open on IE 11 is set on WindowPrototype\nconst windowOpenObject = getOwnPropertyDescriptor(window, 'open') ?\n window :\n window.constructor.prototype;\n\n// In IE 11, insertAdjacent(HTML|Text) is on HTMLElement prototype\nconst insertAdjacentObject = apply(hasOwnProperty, Element.prototype,\n ['insertAdjacentHTML']) ? Element.prototype : HTMLElement.prototype;\n\n// This is not available in release Firefox :(\n// https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1432523\nconst SecurityPolicyViolationEvent = window['SecurityPolicyViolationEvent'] ||\n null;\n\n/**\n * Parses URL, catching all the errors.\n * @param {string} url URL string to parse.\n * @return {URL|null}\n */\nfunction parseUrl_(url) {\n try {\n return new UrlConstructor(url, document.baseURI || undefined);\n } catch (e) {\n return null;\n }\n}\n\n// We don't actually need other namespaces.\n// setAttribute is hooked on Element.prototype, which all elements inherit from,\n// and all sensitive property wrappers are hooked directly on Element as well.\nconst typeMap = TrustedTypes.getTypeMapping(HTML_NS);\n\nconst STRING_TO_TYPE = {\n 'TrustedHTML': TrustedTypes.TrustedHTML,\n 'TrustedScript': TrustedTypes.TrustedScript,\n 'TrustedScriptURL': TrustedTypes.TrustedScriptURL,\n 'TrustedURL': TrustedTypes.TrustedURL,\n};\n\n/**\n * Converts an uppercase tag name to an element constructor function name.\n * Used for property setter hijacking only.\n * @param {string} tagName\n * @return {string}\n */\nfunction convertTagToConstructor(tagName) {\n if (tagName == '*') {\n return 'HTMLElement';\n }\n return getConstructorName_(document.createElement(tagName).constructor);\n}\n\nfor (const tagName of Object.keys(typeMap)) {\n const attrs = typeMap[tagName]['properties'];\n for (const [k, v] of Object.entries(attrs)) {\n attrs[k] = STRING_TO_TYPE[v];\n }\n}\n\n/**\n * Map of type names to type checking function.\n * @type {!Object}\n */\nconst TYPE_CHECKER_MAP = {\n 'TrustedHTML': TrustedTypes.isHTML,\n 'TrustedURL': TrustedTypes.isURL,\n 'TrustedScriptURL': TrustedTypes.isScriptURL,\n 'TrustedScript': TrustedTypes.isScript,\n};\n\n/**\n * Map of type names to type producing function.\n * @type {Object}\n */\nconst TYPE_PRODUCER_MAP = {\n 'TrustedHTML': 'createHTML',\n 'TrustedURL': 'createURL',\n 'TrustedScriptURL': 'createScriptURL',\n 'TrustedScript': 'createScript',\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypePolicy}\n * @property {function(string):TrustedHTML} createHTML\n * @property {function(string):TrustedURL} createURL\n * @property {function(string):TrustedScriptURL} createScriptURL\n * @property {function(string):TrustedScript} createScript\n */\nconst TrustedTypePolicy = {};\n/* eslint-enable no-unused-vars */\n\n\n/**\n * An object for enabling trusted type enforcement.\n */\nexport class TrustedTypesEnforcer {\n /**\n * @param {!TrustedTypeConfig} config The configuration for\n * trusted type enforcement.\n */\n constructor(config) {\n /**\n * A configuration for the trusted type enforcement.\n * @private {!TrustedTypeConfig}\n */\n this.config_ = config;\n /**\n * @private {Object}\n */\n this.originalSetters_ = {};\n }\n\n /**\n * Wraps HTML sinks with an enforcement setter, which will enforce\n * trusted types and do logging, if enabled.\n *\n */\n install() {\n setAllowedPolicyNames(this.config_.allowedPolicyNames);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.wrapSetter_(ShadowRoot.prototype, 'innerHTML',\n TrustedTypes.TrustedHTML);\n }\n stringifyForRangeHack = (function(doc) {\n const r = doc.createRange();\n // In IE 11 Range.createContextualFragment doesn't stringify its argument.\n const f = r.createContextualFragment(/** @type {string} */ (\n {toString: () => '
'}));\n return f.childNodes.length == 0;\n })(document);\n\n this.wrapWithEnforceFunction_(Range.prototype, 'createContextualFragment',\n TrustedTypes.TrustedHTML, 0);\n\n this.wrapWithEnforceFunction_(insertAdjacentObject,\n 'insertAdjacentHTML',\n TrustedTypes.TrustedHTML, 1);\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n // Chrome\n this.wrapWithEnforceFunction_(Document.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(Document.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n } else {\n // Firefox\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n }\n\n this.wrapWithEnforceFunction_(windowOpenObject, 'open',\n TrustedTypes.TrustedURL, 0);\n\n if ('DOMParser' in window) {\n this.wrapWithEnforceFunction_(DOMParser.prototype, 'parseFromString',\n TrustedTypes.TrustedHTML, 0);\n }\n this.wrapWithEnforceFunction_(window, 'setInterval',\n TrustedTypes.TrustedScript, 0);\n this.wrapWithEnforceFunction_(window, 'setTimeout',\n TrustedTypes.TrustedScript, 0);\n this.wrapSetAttribute_();\n this.installScriptMutatorGuards_();\n this.installPropertySetWrappers_();\n }\n\n /**\n * Removes the original setters.\n */\n uninstall() {\n setAllowedPolicyNames(['*']);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.restoreSetter_(ShadowRoot.prototype, 'innerHTML');\n }\n this.restoreFunction_(Range.prototype, 'createContextualFragment');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentHTML');\n this.restoreFunction_(Element.prototype, 'setAttribute');\n this.restoreFunction_(Element.prototype, 'setAttributeNS');\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n this.restoreFunction_(Document.prototype, 'write');\n this.restoreFunction_(Document.prototype, 'open');\n } else {\n this.restoreFunction_(HTMLDocument.prototype, 'write');\n this.restoreFunction_(HTMLDocument.prototype, 'open');\n }\n this.restoreFunction_(windowOpenObject, 'open');\n\n if ('DOMParser' in window) {\n this.restoreFunction_(DOMParser.prototype, 'parseFromString');\n }\n this.restoreFunction_(window, 'setTimeout');\n this.restoreFunction_(window, 'setInterval');\n this.uninstallPropertySetWrappers_();\n this.uninstallScriptMutatorGuards_();\n resetDefaultPolicy();\n }\n\n /**\n * Installs type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n installScriptMutatorGuards_() {\n const that = this;\n\n ['appendChild', 'insertBefore', 'replaceChild'].forEach((fnName) => {\n this.wrapFunction_(\n Node.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n this.wrapFunction_(\n insertAdjacentObject,\n 'insertAdjacentText',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.insertAdjacentTextWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ true, originalFn)\n .apply(that, args);\n });\n });\n ['append', 'prepend'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n }\n }\n\n /**\n * Uninstalls type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n uninstallScriptMutatorGuards_() {\n this.restoreFunction_(Node.prototype, 'appendChild');\n this.restoreFunction_(Node.prototype, 'insertBefore');\n this.restoreFunction_(Node.prototype, 'replaceChild');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentText');\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith', 'append', 'prepend'].forEach(\n (fnName) => this.restoreFunction_(Element.prototype, fnName));\n }\n }\n\n /**\n * Installs wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n installPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.wrapSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property,\n typeMap[tag]['properties'][property]);\n }\n }\n }\n\n /**\n * Uninstalls wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n uninstallPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.restoreSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property);\n }\n }\n }\n\n /** Wraps set attribute with an enforcement function. */\n wrapSetAttribute_() {\n const that = this;\n this.wrapFunction_(\n Element.prototype,\n 'setAttribute',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n this.wrapFunction_(\n Element.prototype,\n 'setAttributeNS',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeNSWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttribute.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttribute function.\n * @return {*}\n */\n setAttributeWrapper_(context, originalFn, ...args) {\n // Note(slekies): In a normal application constructor should never be null.\n // However, there are no guarantees. If the constructor is null, we cannot\n // determine whether a special type is required. In order to not break the\n // application, we will not do any further type checks and pass the call\n // to setAttribute.\n if (context.constructor !== null && context instanceof Element) {\n const attrName = (args[0] = String(args[0])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(\n context, 'setAttribute', STRING_TO_TYPE[requiredType],\n originalFn, 1, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttributeNS.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttributeNS function.\n * @return {*}\n */\n setAttributeNSWrapper_(context, originalFn, ...args) {\n // See the note from setAttributeWrapper_ above.\n if (context.constructor !== null && context instanceof Element) {\n const ns = args[0] ? String(args[0]) : null;\n args[0] = ns;\n const attrName = (args[1] = String(args[1])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI, ns);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(context, 'setAttributeNS',\n STRING_TO_TYPE[requiredType],\n originalFn, 2, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for DOM mutator functions that enforces type checks if the context\n * (or, optionally, its parent node) is a script node.\n * For each argument, it will make sure that text nodes pass through a\n * default policy, or generate a violation. To skip that check, pass\n * TrustedScript objects instead.\n * @param {!Object} context The context for the call to the original function.\n * @param {boolean} checkParent Check parent of context instead.\n * @param {!Function} originalFn The original mutator function.\n * @return {*}\n */\n enforceTypeInScriptNodes_(context, checkParent, originalFn, ...args) {\n const objToCheck = checkParent ? context.parentNode : context;\n if (objToCheck instanceof HTMLScriptElement && args.length > 0) {\n for (let argNumber = 0; argNumber < args.length; argNumber++) {\n let arg = args[argNumber];\n if (arg instanceof Node && arg.nodeType !== Node.TEXT_NODE) {\n continue; // Type is not interesting\n }\n if (arg instanceof Node && arg.nodeType == Node.TEXT_NODE) {\n arg = arg.textContent;\n } else if (TrustedTypes.isScript(arg)) {\n // TODO(koto): Consider removing this branch, as it's hard to spec.\n // Convert to text node and go on.\n args[argNumber] = document.createTextNode(arg);\n continue;\n }\n\n // Try to run a default policy on argsthe argument\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n 'TrustedScript', arg, 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, originalFn.name,\n TrustedTypes.TrustedScript, arg);\n }\n args[argNumber] = document.createTextNode('' + fallbackValue);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for Element.insertAdjacentText that enforces type checks for\n * inserting text into a script node.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original insertAdjacentText function.\n */\n insertAdjacentTextWrapper_(context, originalFn, ...args) {\n const riskyPositions = ['beforebegin', 'afterend'];\n if (context instanceof Element &&\n context.parentElement instanceof HTMLScriptElement &&\n args.length > 1 &&\n riskyPositions.includes(args[0]) &&\n !(TrustedTypes.isScript(args[1]))) {\n // Run a default policy on args[1]\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_('TrustedScript',\n args[1], 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, 'insertAdjacentText',\n TrustedTypes.TrustedScript, args[1]);\n }\n\n const textNode = document.createTextNode('' + fallbackValue);\n\n\n const insertBefore = /** @type function(this: Node) */(\n this.originalSetters_[this.getKey_(Node.prototype, 'insertBefore')]);\n\n switch (args[0]) {\n case riskyPositions[0]: // 'beforebegin'\n apply(insertBefore, context.parentElement,\n [textNode, context]);\n break;\n case riskyPositions[1]: // 'afterend'\n apply(insertBefore, context.parentElement,\n [textNode, context.nextSibling]);\n break;\n }\n return;\n }\n apply(originalFn, context, args);\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {number} argNumber Number of the argument to enforce the type of.\n * @private\n */\n wrapWithEnforceFunction_(object, name, type, argNumber) {\n const that = this;\n this.wrapFunction_(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforce_.call(that, this, name, type, originalFn,\n argNumber, args);\n });\n }\n\n\n /**\n * Wraps an existing function with a given function body and stores the\n * original function.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {function(!Function, ...*)} functionBody The wrapper function.\n */\n wrapFunction_(object, name, functionBody) {\n const descriptor = getOwnPropertyDescriptor(object, name);\n const originalFn = /** @type function(*):* */ (\n descriptor ? descriptor.value : null);\n\n if (!(originalFn instanceof Function)) {\n throw new TypeError(\n 'Property ' + name + ' on object' + object + ' is not a function');\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n installFunction(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @return {*}\n */\n function(...args) {\n return functionBody.bind(this, originalFn).apply(this, args);\n });\n this.originalSetters_[key] = originalFn;\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {!Object=} descriptorObject If present, will reuse the\n * setter/getter from this one, instead of object. Used for redefining\n * setters in subclasses.\n * @private\n */\n wrapSetter_(object, name, type, descriptorObject = undefined) {\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n\n let useObject = descriptorObject || object;\n let descriptor;\n let originalSetter;\n const stopAt = getPrototypeOf(Node.prototype);\n\n // Find the descriptor on the object or its prototypes, stopping at Node.\n do {\n descriptor = getOwnPropertyDescriptor(useObject, name);\n originalSetter = /** @type {function(*):*} */ (descriptor ?\n descriptor.set : null);\n if (!originalSetter) {\n useObject = getPrototypeOf(useObject) || stopAt;\n }\n } while (!(originalSetter || useObject === stopAt || !useObject));\n\n if (!(originalSetter instanceof Function)) {\n throw new TypeError(\n 'No setter for property ' + name + ' on object' + object);\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n const that = this;\n /**\n * @this {TrustedTypesEnforcer}\n * @param {*} value\n */\n const enforcingSetter = function(value) {\n that.enforce_.call(that, this, name, type, originalSetter, 0,\n [value]);\n };\n\n if (useObject === object) {\n installSetter(\n object,\n name,\n enforcingSetter);\n } else {\n // Since we're creating a new setter in subclass, we also need to\n // overwrite the getter.\n installSetterAndGetter(\n object,\n name,\n enforcingSetter,\n descriptor.get\n );\n }\n this.originalSetters_[key] = originalSetter;\n }\n\n /**\n * Restores the original setter for the property, as encountered during\n * install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Object=} descriptorObject If present, will restore the original\n * setter/getter from this one, instead of object.\n * @private\n */\n restoreSetter_(object, name, descriptorObject = undefined) {\n const key = this.getKey_(object, name);\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n if (descriptorObject) {\n // We have to also overwrite a getter.\n installSetterAndGetter(object, name, this.originalSetters_[key],\n getOwnPropertyDescriptor(descriptorObject, name).get);\n } else {\n installSetter(object, name, this.originalSetters_[key]);\n }\n delete this.originalSetters_[key];\n }\n\n /**\n * Restores the original method of an object, as encountered during install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @private\n */\n restoreFunction_(object, name) {\n const key = this.getKey_(object, name);\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n installFunction(object, name, this.originalSetters_[key]);\n delete this.originalSetters_[key];\n }\n\n /**\n * Returns the key name for caching original setters.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @return {string} Key name.\n * @private\n */\n getKey_(object, name) {\n // TODO(msamuel): Can we use Object.prototype.toString.call(object)\n // to get an unspoofable string here?\n // TODO(msamuel): fail on '-' in object.constructor.name?\n // No Function.name in IE 11\n const ctrName = '' + (\n object.constructor.name ?\n object.constructor.name :\n object.constructor);\n return ctrName + '-' + name;\n }\n\n\n /**\n * Calls a default policy.\n * @param {string} typeName Type name to attempt to produce from a value.\n * @param {*} value The value to pass to a default policy\n * @param {string} sink The sink name that the default policy will be called\n * with.\n * @throws {Error} If the default policy throws, or not exist.\n * @return {Function} The trusted value.\n */\n maybeCallDefaultPolicy_(typeName, value, sink = '') {\n // Apply a fallback policy, if it exists.\n const fallbackPolicy = getDefaultPolicy.call(TrustedTypes);\n if (!fallbackPolicy) {\n throw new Error('Default policy does not exist');\n }\n if (!TYPE_CHECKER_MAP.hasOwnProperty(typeName)) {\n throw new Error();\n }\n return fallbackPolicy[TYPE_PRODUCER_MAP[typeName]](value, '' + sink);\n }\n\n /**\n * Logs and enforces TrustedTypes depending on the given configuration.\n * @template T\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {function(?):T} originalSetter Original setter.\n * @param {number} argNumber Number of argument to enforce the type of.\n * @param {Array} args Arguments.\n * @return {T}\n * @private\n */\n enforce_(context, propertyName, typeToEnforce, originalSetter, argNumber,\n args) {\n const value = args[argNumber];\n const typeName = '' + typeToEnforce.name;\n // If typed value is given, pass through.\n if (TYPE_CHECKER_MAP.hasOwnProperty(typeName) &&\n TYPE_CHECKER_MAP[typeName](value)) {\n if (stringifyForRangeHack &&\n propertyName == 'createContextualFragment') {\n // IE 11 hack, somehow the value is not stringified implicitly.\n args[argNumber] = args[argNumber].toString();\n }\n return apply(originalSetter, context, args);\n }\n\n if (typeToEnforce === TrustedTypes.TrustedScript) {\n const isInlineEventHandler =\n propertyName == 'setAttribute' ||\n propertyName === 'setAttributeNS' ||\n apply(slice, propertyName, [0, 2]) === 'on';\n // If a function (instead of string) is passed to inline event attribute,\n // or set(Timeout|Interval), pass through.\n const propertyAcceptsFunctions =\n propertyName === 'setInterval' ||\n propertyName === 'setTimeout' ||\n isInlineEventHandler;\n if ((propertyAcceptsFunctions && typeof value === 'function') ||\n (isInlineEventHandler && value === null)) {\n return apply(originalSetter, context, args);\n }\n }\n\n // Apply a fallback policy, if it exists.\n let fallbackValue;\n let exceptionThrown;\n const objName = context instanceof Element ?\n context.localName :\n getConstructorName_(context ? context.constructor : window.constructor);\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n typeName, value, objName + '.' + propertyName);\n } catch (e) {\n exceptionThrown = true;\n }\n if (!exceptionThrown) {\n args[argNumber] = fallbackValue;\n return apply(originalSetter, context, args);\n }\n\n // This will throw a TypeError if enforcement is enabled.\n this.processViolation_(context, propertyName, typeToEnforce, value);\n\n return apply(originalSetter, context, args);\n }\n\n /**\n * Report a TT violation.\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {string} value The value that was violated the restrictions.\n * @throws {TypeError} if the enforcement is enabled.\n */\n processViolation_(context, propertyName, typeToEnforce, value) {\n const contextName = getConstructorName_(context.constructor) ||\n '' + context;\n const message = `Failed to set ${propertyName} on ${contextName}: `\n + `This property requires ${typeToEnforce.name}.`;\n\n if (this.config_.isLoggingEnabled) {\n // eslint-disable-next-line no-console\n console.warn(message, propertyName, context, typeToEnforce, value);\n }\n\n // Unconditionally dispatch an event.\n if (typeof SecurityPolicyViolationEvent == 'function') {\n let blockedURI = '';\n if (typeToEnforce === TrustedTypes.TrustedURL ||\n typeToEnforce === TrustedTypes.TrustedScriptURL) {\n blockedURI = parseUrl_(value) || '';\n if (blockedURI) {\n blockedURI = blockedURI.href;\n }\n }\n const valueSlice = apply(slice, '' + value, [0, 40]);\n const event = new SecurityPolicyViolationEvent(\n 'securitypolicyviolation',\n {\n 'bubbles': true,\n 'blockedURI': blockedURI,\n 'disposition': this.config_.isEnforcementEnabled ?\n 'enforce' : 'report',\n 'documentURI': document.location.href,\n 'effectiveDirective': DIRECTIVE_NAME,\n 'originalPolicy': this.config_.cspString,\n 'statusCode': 0,\n 'violatedDirective': DIRECTIVE_NAME,\n 'sample': `${contextName}.${propertyName} ${valueSlice}`,\n });\n if (context instanceof Node && context.isConnected) {\n context.dispatchEvent(event);\n } else { // Fallback - dispatch an event on base document.\n document.dispatchEvent(event);\n }\n }\n\n if (this.config_.isEnforcementEnabled) {\n throw new TypeError(message);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n"]} \ No newline at end of file +{"version":3,"sources":[" [synthetic:es6/util/arrayiterator] "," [synthetic:util/defineproperty] "," [synthetic:util/global] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterator] "," [synthetic:util/objectcreate] "," [synthetic:es6/util/setprototypeof] "," [synthetic:es6/util/inherits] "," [synthetic:util/owns] "," [synthetic:util/polyfill] "," [synthetic:es6/weakmap] "," [synthetic:es6/object/entries] "," [synthetic:es6/object/is] "," [synthetic:es6/array/includes] "," [synthetic:es6/util/assign] "," [synthetic:es6/object/assign] ","src/data/trustedtypeconfig.js","src/polyfill/full.js","src/trustedtypes.js"," [synthetic:es6/util/arrayfromiterable] ","src/utils/wrapper.js","src/enforcer.js","src/polyfill/api_only.js"],"names":["$jscomp.defineProperty","$jscomp.global","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SymbolClass","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIteratorImpl","$jscomp.objectCreate","$jscomp.setPrototypeOf","$jscomp.polyfill","$jscomp.makeIterator","$jscomp.owns","$jscomp.assign","constructor","TrustedTypeConfig","isLoggingEnabled","isEnforcementEnabled","allowedPolicyNames","cspString","parseCSP","WHITESPACE","trim","split","SEMICOLON","map","serializedDirective","reduce","parsed","directive","slice","s","sort","fromCSP","csp","policy","TrustedTypeConfig$$module$src$data$trustedtypeconfig.parseCSP","enforce","DIRECTIVE_NAME","policies","filter","p","charAt","rejectInputFn","TypeError","String","prototype","toLowerCase","toUpperCase","TrustedTypePolicy","TrustedTypePolicyFactory","trustedTypesBuilderTestOnly","TrustedScript","TrustedHTML","TrustedScriptURL","TrustedURL","TrustedType","policyName","creatorSymbol","Error","defineProperty","value","enumerable","privates","obj","v","privateMap","get","undefined","create","set","selfContained","collection","proto","getPrototypeOf","ObjectPrototype","getOwnPropertyNames","key","lockdownTrustedType","SubClass","canonName","freeze","name","isTrustedTypeChecker","type","has","wrapPolicy","innerPolicy","creator","Ctor","methodName","method","policySpecificType","factory","args","result","$jscomp.arrayFromIterator","allowedValue","o","createTypeMapping","writable","configurable","getTypeInternal_","tag","container","elNs","attrNs","canonicalTag","apply","ns","HTML_NS","hasOwnProperty","TYPE_MAP","getDefaultPolicy","defaultPolicy","Object","assign","Array","forEach","push","Symbol","WeakMap","policyNames","allowedNames","enforceNameWhitelist","toString","valueOf","$jscomp.inherits","emptyHTML","XLINK_NS","SVG_NS","ATTR_PROPERTY_MAP","HTMLIFrameElement","keys","attr","HTMLElement","createFunctionAllowed","api","createPolicy","indexOf","call","console","warn","wrappedPolicy","DEFAULT_POLICY_NAME","getPolicyNames","isHTML","isURL","isScriptURL","isScript","getAttributeType","tagName","attribute","elementNs","attributeNs","canonicalAttr","getPropertyType","property","getTypeMapping","namespaceUri","document","documentElement","namespaceURI","e","JSON","parse","stringify","trustedTypes","setAllowedPolicyNames","length","el","resetDefaultPolicy","splice","installFunction","object","fn","Reflect","getOwnPropertyDescriptor","UrlConstructor","window","URL","stringifyForRangeHack","getConstructorName_","createElement","match","windowOpenObject","insertAdjacentObject","Element","SecurityPolicyViolationEvent","typeMap","TrustedTypes","STRING_TO_TYPE","attrs","entries","k","TYPE_CHECKER_MAP","TYPE_PRODUCER_MAP","TrustedTypesEnforcer","config_","config","originalSetters_","install","trustedTypesEnforcer","wrapSetter_","ShadowRoot","doc","createRange","r","createContextualFragment","f","childNodes","wrapWithEnforceFunction_","Range","Document","HTMLDocument","DOMParser","wrapSetAttribute_","installScriptMutatorGuards_","installPropertySetWrappers_","fnName","wrapFunction_","Node","originalFn","that","enforceTypeInScriptNodes_","bind","insertAdjacentTextWrapper_","setAttributeWrapper_","setAttributeNSWrapper_","context","attrName","requiredType","enforce_","checkParent","objToCheck","parentNode","HTMLScriptElement","argNumber","arg","nodeType","TEXT_NODE","textContent","createTextNode","fallbackValue","exceptionThrown","maybeCallDefaultPolicy_","processViolation_","riskyPositions","parentElement","includes","textNode","insertBefore","getKey_","nextSibling","functionBody","descriptor","Function","enforcingSetter","originalSetter","useObject","stopAt","typeName","sink","fallbackPolicy","propertyName","typeToEnforce","isInlineEventHandler","objName","localName","contextName","message","blockedURI","baseURI","href","valueSlice","event","location","isConnected","dispatchEvent","publicApi","tt","detectPolicy","currentScript","scripts","getElementsByTagName","bodyPrefix","substr","dataset","cspInMeta","head","querySelector","rootProperty","TrustedTypeConfig$$module$src$data$trustedtypeconfig.fromCSP"],"mappings":"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","file":"trustedtypes.build.js","sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * CSP Directive name controlling Trusted Types behavior.\n * @type {string}\n */\nexport const DIRECTIVE_NAME = 'trusted-types';\n\n/**\n * A configuration object for trusted type enforcement.\n */\nexport class TrustedTypeConfig {\n /**\n * @param {boolean} isLoggingEnabled If true enforcement wrappers will log\n * violations to the console.\n * @param {boolean} isEnforcementEnabled If true enforcement is enabled at\n * runtime.\n * @param {Array} allowedPolicyNames Whitelisted policy names.\n * @param {?string} cspString String with the CSP policy.\n */\n constructor(isLoggingEnabled,\n isEnforcementEnabled,\n allowedPolicyNames,\n cspString = null) {\n /**\n * True if logging is enabled.\n * @type {boolean}\n */\n this.isLoggingEnabled = isLoggingEnabled;\n\n /**\n * True if enforcement is enabled.\n * @type {boolean}\n */\n this.isEnforcementEnabled = isEnforcementEnabled;\n\n /**\n * Allowed policy names.\n * @type {Array}\n */\n this.allowedPolicyNames = allowedPolicyNames;\n\n /**\n * CSP string that defined the policy.\n * @type {?string}\n */\n this.cspString = cspString;\n }\n\n /**\n * Parses a CSP policy.\n * @link https://www.w3.org/TR/CSP3/#parse-serialized-policy\n * @param {string} cspString String with a CSP definition.\n * @return {Object>} Parsed CSP, keyed by directive\n * names.\n */\n static parseCSP(cspString) {\n const SEMICOLON = /\\s*;\\s*/;\n const WHITESPACE = /\\s+/;\n return cspString.trim().split(SEMICOLON)\n .map((serializedDirective) => serializedDirective.split(WHITESPACE))\n .reduce(function(parsed, directive) {\n if (directive[0]) {\n parsed[directive[0]] = directive.slice(1).map((s) => s).sort();\n }\n return parsed;\n }, {});\n }\n\n /**\n * Creates a TrustedTypeConfig object from a CSP string.\n * @param {string} cspString\n * @return {!TrustedTypeConfig}\n */\n static fromCSP(cspString) {\n const isLoggingEnabled = true;\n const policy = TrustedTypeConfig.parseCSP(cspString);\n const enforce = DIRECTIVE_NAME in policy;\n let policies = ['*'];\n if (enforce) {\n policies = policy[DIRECTIVE_NAME].filter((p) => p.charAt(0) !== '\\'');\n }\n\n return new TrustedTypeConfig(\n isLoggingEnabled,\n enforce, /* isEnforcementEnabled */\n policies, /* allowedPolicyNames */\n cspString\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that enforces the types.\n */\nimport {TrustedTypesEnforcer} from '../enforcer.js';\nimport {TrustedTypeConfig} from '../data/trustedtypeconfig.js';\n/* eslint-disable no-unused-vars */\nimport TrustedTypes from './api_only.js';\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Tries to guess a CSP policy from:\n * - the current polyfill script element text content (if prefixed with\n * \"Content-Security-Policy:\")\n * - the data-csp attribute value of the current script element.\n * - meta header\n * @return {?string} Guessed CSP value, or null.\n */\nfunction detectPolicy() {\n try {\n const currentScript = document.currentScript || (function() {\n const scripts = document.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n })();\n\n const bodyPrefix = 'Content-Security-Policy:';\n if (currentScript &&\n currentScript.textContent.trim().substr(0, bodyPrefix.length) ==\n bodyPrefix) {\n return currentScript.textContent.trim().slice(bodyPrefix.length);\n }\n if (currentScript.dataset['csp']) {\n return currentScript.dataset['csp'];\n }\n const cspInMeta = document.head.querySelector(\n 'meta[http-equiv^=\"Content-Security-Policy\"]');\n if (cspInMeta) {\n return cspInMeta['content'].trim();\n }\n } catch (e) {\n return null;\n }\n return null;\n}\n\n/**\n * Bootstraps all trusted types polyfill and their enforcement.\n */\nexport function bootstrap() {\n const csp = detectPolicy();\n const config = csp ? TrustedTypeConfig.fromCSP(csp) : new TrustedTypeConfig(\n /* isLoggingEnabled */ false,\n /* isEnforcementEnabled */ false,\n /* allowedPolicyNames */ ['*']);\n\n const trustedTypesEnforcer = new TrustedTypesEnforcer(config);\n\n trustedTypesEnforcer.install();\n}\n\n/**\n * Determines if the enforcement should be enabled.\n * @return {boolean}\n */\nfunction shouldBootstrap() {\n for (const rootProperty of ['trustedTypes', 'TrustedTypes']) {\n if (window[rootProperty] && !window[rootProperty]['_isPolyfill_']) {\n // Native implementation exists\n return false;\n }\n }\n return true;\n}\n\n// Bootstrap only if native implementation is missing.\nif (shouldBootstrap()) {\n bootstrap();\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n defaultPolicy, // Just to make the compiler happy, this is overridden below.\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n defineProperty(api, 'defaultPolicy', {\n get: getDefaultPolicy,\n set: () => {},\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n",null,"/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst {\n defineProperty,\n} = Object;\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n */\nexport function installSetter(object, name, setter) {\n const descriptor = {\n set: setter,\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs a setter and getter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n * @param {function(*): *|undefined} getter A getter function}\n */\nexport function installSetterAndGetter(object, name, setter, getter) {\n const descriptor = {\n set: setter,\n get: getter,\n configurable: true, // This can get uninstalled, we need configurable: true\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} fn A function}\n */\nexport function installFunction(object, name, fn) {\n defineProperty(object, name, {\n value: fn,\n });\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/* eslint-disable no-unused-vars */\nimport {DIRECTIVE_NAME, TrustedTypeConfig} from './data/trustedtypeconfig.js';\nimport {\n trustedTypes as TrustedTypes,\n setAllowedPolicyNames,\n resetDefaultPolicy,\n HTML_NS,\n} from\n './trustedtypes.js';\n\n/* eslint-enable no-unused-vars */\nimport {installFunction, installSetter, installSetterAndGetter}\n from './utils/wrapper.js';\n\nconst {apply} = Reflect;\nconst {\n getOwnPropertyNames,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n} = Object;\n\nconst {\n hasOwnProperty,\n isPrototypeOf,\n} = Object.prototype;\n\nconst {slice} = String.prototype;\n\n// No URL in IE 11.\nconst UrlConstructor = typeof window.URL == 'function' ?\n URL.prototype.constructor :\n null;\n\nlet stringifyForRangeHack;\n\n/**\n * Return object constructor name\n * (their function.name is not available in IE 11).\n * @param {*} fn\n * @return {string}\n * @private\n */\nconst getConstructorName_ = document.createElement('div').constructor.name ?\n (fn) => fn.name :\n (fn) => ('' + fn).match(/^\\[object (\\S+)\\]$/)[1];\n\n// window.open on IE 11 is set on WindowPrototype\nconst windowOpenObject = getOwnPropertyDescriptor(window, 'open') ?\n window :\n window.constructor.prototype;\n\n// In IE 11, insertAdjacent(HTML|Text) is on HTMLElement prototype\nconst insertAdjacentObject = apply(hasOwnProperty, Element.prototype,\n ['insertAdjacentHTML']) ? Element.prototype : HTMLElement.prototype;\n\n// This is not available in release Firefox :(\n// https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1432523\nconst SecurityPolicyViolationEvent = window['SecurityPolicyViolationEvent'] ||\n null;\n\n/**\n * Parses URL, catching all the errors.\n * @param {string} url URL string to parse.\n * @return {URL|null}\n */\nfunction parseUrl_(url) {\n try {\n return new UrlConstructor(url, document.baseURI || undefined);\n } catch (e) {\n return null;\n }\n}\n\n// We don't actually need other namespaces.\n// setAttribute is hooked on Element.prototype, which all elements inherit from,\n// and all sensitive property wrappers are hooked directly on Element as well.\nconst typeMap = TrustedTypes.getTypeMapping(HTML_NS);\n\nconst STRING_TO_TYPE = {\n 'TrustedHTML': TrustedTypes.TrustedHTML,\n 'TrustedScript': TrustedTypes.TrustedScript,\n 'TrustedScriptURL': TrustedTypes.TrustedScriptURL,\n 'TrustedURL': TrustedTypes.TrustedURL,\n};\n\n/**\n * Converts an uppercase tag name to an element constructor function name.\n * Used for property setter hijacking only.\n * @param {string} tagName\n * @return {string}\n */\nfunction convertTagToConstructor(tagName) {\n if (tagName == '*') {\n return 'HTMLElement';\n }\n return getConstructorName_(document.createElement(tagName).constructor);\n}\n\nfor (const tagName of Object.keys(typeMap)) {\n const attrs = typeMap[tagName]['properties'];\n for (const [k, v] of Object.entries(attrs)) {\n attrs[k] = STRING_TO_TYPE[v];\n }\n}\n\n/**\n * Map of type names to type checking function.\n * @type {!Object}\n */\nconst TYPE_CHECKER_MAP = {\n 'TrustedHTML': TrustedTypes.isHTML,\n 'TrustedURL': TrustedTypes.isURL,\n 'TrustedScriptURL': TrustedTypes.isScriptURL,\n 'TrustedScript': TrustedTypes.isScript,\n};\n\n/**\n * Map of type names to type producing function.\n * @type {Object}\n */\nconst TYPE_PRODUCER_MAP = {\n 'TrustedHTML': 'createHTML',\n 'TrustedURL': 'createURL',\n 'TrustedScriptURL': 'createScriptURL',\n 'TrustedScript': 'createScript',\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypePolicy}\n * @property {function(string):TrustedHTML} createHTML\n * @property {function(string):TrustedURL} createURL\n * @property {function(string):TrustedScriptURL} createScriptURL\n * @property {function(string):TrustedScript} createScript\n */\nconst TrustedTypePolicy = {};\n/* eslint-enable no-unused-vars */\n\n\n/**\n * An object for enabling trusted type enforcement.\n */\nexport class TrustedTypesEnforcer {\n /**\n * @param {!TrustedTypeConfig} config The configuration for\n * trusted type enforcement.\n */\n constructor(config) {\n /**\n * A configuration for the trusted type enforcement.\n * @private {!TrustedTypeConfig}\n */\n this.config_ = config;\n /**\n * @private {Object}\n */\n this.originalSetters_ = {};\n }\n\n /**\n * Wraps HTML sinks with an enforcement setter, which will enforce\n * trusted types and do logging, if enabled.\n *\n */\n install() {\n setAllowedPolicyNames(this.config_.allowedPolicyNames);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.wrapSetter_(ShadowRoot.prototype, 'innerHTML',\n TrustedTypes.TrustedHTML);\n }\n stringifyForRangeHack = (function(doc) {\n const r = doc.createRange();\n // In IE 11 Range.createContextualFragment doesn't stringify its argument.\n const f = r.createContextualFragment(/** @type {string} */ (\n {toString: () => '
'}));\n return f.childNodes.length == 0;\n })(document);\n\n this.wrapWithEnforceFunction_(Range.prototype, 'createContextualFragment',\n TrustedTypes.TrustedHTML, 0);\n\n this.wrapWithEnforceFunction_(insertAdjacentObject,\n 'insertAdjacentHTML',\n TrustedTypes.TrustedHTML, 1);\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n // Chrome\n this.wrapWithEnforceFunction_(Document.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(Document.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n } else {\n // Firefox\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n }\n\n this.wrapWithEnforceFunction_(windowOpenObject, 'open',\n TrustedTypes.TrustedURL, 0);\n\n if ('DOMParser' in window) {\n this.wrapWithEnforceFunction_(DOMParser.prototype, 'parseFromString',\n TrustedTypes.TrustedHTML, 0);\n }\n this.wrapWithEnforceFunction_(window, 'setInterval',\n TrustedTypes.TrustedScript, 0);\n this.wrapWithEnforceFunction_(window, 'setTimeout',\n TrustedTypes.TrustedScript, 0);\n this.wrapSetAttribute_();\n this.installScriptMutatorGuards_();\n this.installPropertySetWrappers_();\n }\n\n /**\n * Removes the original setters.\n */\n uninstall() {\n setAllowedPolicyNames(['*']);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.restoreSetter_(ShadowRoot.prototype, 'innerHTML');\n }\n this.restoreFunction_(Range.prototype, 'createContextualFragment');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentHTML');\n this.restoreFunction_(Element.prototype, 'setAttribute');\n this.restoreFunction_(Element.prototype, 'setAttributeNS');\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n this.restoreFunction_(Document.prototype, 'write');\n this.restoreFunction_(Document.prototype, 'open');\n } else {\n this.restoreFunction_(HTMLDocument.prototype, 'write');\n this.restoreFunction_(HTMLDocument.prototype, 'open');\n }\n this.restoreFunction_(windowOpenObject, 'open');\n\n if ('DOMParser' in window) {\n this.restoreFunction_(DOMParser.prototype, 'parseFromString');\n }\n this.restoreFunction_(window, 'setTimeout');\n this.restoreFunction_(window, 'setInterval');\n this.uninstallPropertySetWrappers_();\n this.uninstallScriptMutatorGuards_();\n resetDefaultPolicy();\n }\n\n /**\n * Installs type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n installScriptMutatorGuards_() {\n const that = this;\n\n ['appendChild', 'insertBefore', 'replaceChild'].forEach((fnName) => {\n this.wrapFunction_(\n Node.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n this.wrapFunction_(\n insertAdjacentObject,\n 'insertAdjacentText',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.insertAdjacentTextWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ true, originalFn)\n .apply(that, args);\n });\n });\n ['append', 'prepend'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n }\n }\n\n /**\n * Uninstalls type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n uninstallScriptMutatorGuards_() {\n this.restoreFunction_(Node.prototype, 'appendChild');\n this.restoreFunction_(Node.prototype, 'insertBefore');\n this.restoreFunction_(Node.prototype, 'replaceChild');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentText');\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith', 'append', 'prepend'].forEach(\n (fnName) => this.restoreFunction_(Element.prototype, fnName));\n }\n }\n\n /**\n * Installs wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n installPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.wrapSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property,\n typeMap[tag]['properties'][property]);\n }\n }\n }\n\n /**\n * Uninstalls wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n uninstallPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.restoreSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property);\n }\n }\n }\n\n /** Wraps set attribute with an enforcement function. */\n wrapSetAttribute_() {\n const that = this;\n this.wrapFunction_(\n Element.prototype,\n 'setAttribute',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n this.wrapFunction_(\n Element.prototype,\n 'setAttributeNS',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeNSWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttribute.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttribute function.\n * @return {*}\n */\n setAttributeWrapper_(context, originalFn, ...args) {\n // Note(slekies): In a normal application constructor should never be null.\n // However, there are no guarantees. If the constructor is null, we cannot\n // determine whether a special type is required. In order to not break the\n // application, we will not do any further type checks and pass the call\n // to setAttribute.\n if (context.constructor !== null && context instanceof Element) {\n const attrName = (args[0] = String(args[0])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(\n context, 'setAttribute', STRING_TO_TYPE[requiredType],\n originalFn, 1, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttributeNS.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttributeNS function.\n * @return {*}\n */\n setAttributeNSWrapper_(context, originalFn, ...args) {\n // See the note from setAttributeWrapper_ above.\n if (context.constructor !== null && context instanceof Element) {\n const ns = args[0] ? String(args[0]) : null;\n args[0] = ns;\n const attrName = (args[1] = String(args[1])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI, ns);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(context, 'setAttributeNS',\n STRING_TO_TYPE[requiredType],\n originalFn, 2, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for DOM mutator functions that enforces type checks if the context\n * (or, optionally, its parent node) is a script node.\n * For each argument, it will make sure that text nodes pass through a\n * default policy, or generate a violation. To skip that check, pass\n * TrustedScript objects instead.\n * @param {!Object} context The context for the call to the original function.\n * @param {boolean} checkParent Check parent of context instead.\n * @param {!Function} originalFn The original mutator function.\n * @return {*}\n */\n enforceTypeInScriptNodes_(context, checkParent, originalFn, ...args) {\n const objToCheck = checkParent ? context.parentNode : context;\n if (objToCheck instanceof HTMLScriptElement && args.length > 0) {\n for (let argNumber = 0; argNumber < args.length; argNumber++) {\n let arg = args[argNumber];\n if (arg instanceof Node && arg.nodeType !== Node.TEXT_NODE) {\n continue; // Type is not interesting\n }\n if (arg instanceof Node && arg.nodeType == Node.TEXT_NODE) {\n arg = arg.textContent;\n } else if (TrustedTypes.isScript(arg)) {\n // TODO(koto): Consider removing this branch, as it's hard to spec.\n // Convert to text node and go on.\n args[argNumber] = document.createTextNode(arg);\n continue;\n }\n\n // Try to run a default policy on argsthe argument\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n 'TrustedScript', arg, 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, originalFn.name,\n TrustedTypes.TrustedScript, arg);\n }\n args[argNumber] = document.createTextNode('' + fallbackValue);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for Element.insertAdjacentText that enforces type checks for\n * inserting text into a script node.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original insertAdjacentText function.\n */\n insertAdjacentTextWrapper_(context, originalFn, ...args) {\n const riskyPositions = ['beforebegin', 'afterend'];\n if (context instanceof Element &&\n context.parentElement instanceof HTMLScriptElement &&\n args.length > 1 &&\n riskyPositions.includes(args[0]) &&\n !(TrustedTypes.isScript(args[1]))) {\n // Run a default policy on args[1]\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_('TrustedScript',\n args[1], 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, 'insertAdjacentText',\n TrustedTypes.TrustedScript, args[1]);\n }\n\n const textNode = document.createTextNode('' + fallbackValue);\n\n\n const insertBefore = /** @type function(this: Node) */(\n this.originalSetters_[this.getKey_(Node.prototype, 'insertBefore')]);\n\n switch (args[0]) {\n case riskyPositions[0]: // 'beforebegin'\n apply(insertBefore, context.parentElement,\n [textNode, context]);\n break;\n case riskyPositions[1]: // 'afterend'\n apply(insertBefore, context.parentElement,\n [textNode, context.nextSibling]);\n break;\n }\n return;\n }\n apply(originalFn, context, args);\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {number} argNumber Number of the argument to enforce the type of.\n * @private\n */\n wrapWithEnforceFunction_(object, name, type, argNumber) {\n const that = this;\n this.wrapFunction_(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforce_.call(that, this, name, type, originalFn,\n argNumber, args);\n });\n }\n\n\n /**\n * Wraps an existing function with a given function body and stores the\n * original function.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {function(!Function, ...*)} functionBody The wrapper function.\n */\n wrapFunction_(object, name, functionBody) {\n const descriptor = getOwnPropertyDescriptor(object, name);\n const originalFn = /** @type function(*):* */ (\n descriptor ? descriptor.value : null);\n\n if (!(originalFn instanceof Function)) {\n throw new TypeError(\n 'Property ' + name + ' on object' + object + ' is not a function');\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n installFunction(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @return {*}\n */\n function(...args) {\n return functionBody.bind(this, originalFn).apply(this, args);\n });\n this.originalSetters_[key] = originalFn;\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {!Object=} descriptorObject If present, will reuse the\n * setter/getter from this one, instead of object. Used for redefining\n * setters in subclasses.\n * @private\n */\n wrapSetter_(object, name, type, descriptorObject = undefined) {\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n\n let useObject = descriptorObject || object;\n let descriptor;\n let originalSetter;\n const stopAt = getPrototypeOf(Node.prototype);\n\n // Find the descriptor on the object or its prototypes, stopping at Node.\n do {\n descriptor = getOwnPropertyDescriptor(useObject, name);\n originalSetter = /** @type {function(*):*} */ (descriptor ?\n descriptor.set : null);\n if (!originalSetter) {\n useObject = getPrototypeOf(useObject) || stopAt;\n }\n } while (!(originalSetter || useObject === stopAt || !useObject));\n\n if (!(originalSetter instanceof Function)) {\n throw new TypeError(\n 'No setter for property ' + name + ' on object' + object);\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n const that = this;\n /**\n * @this {TrustedTypesEnforcer}\n * @param {*} value\n */\n const enforcingSetter = function(value) {\n that.enforce_.call(that, this, name, type, originalSetter, 0,\n [value]);\n };\n\n if (useObject === object) {\n installSetter(\n object,\n name,\n enforcingSetter);\n } else {\n // Since we're creating a new setter in subclass, we also need to\n // overwrite the getter.\n installSetterAndGetter(\n object,\n name,\n enforcingSetter,\n descriptor.get\n );\n }\n this.originalSetters_[key] = originalSetter;\n }\n\n /**\n * Restores the original setter for the property, as encountered during\n * install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Object=} descriptorObject If present, will restore the original\n * setter/getter from this one, instead of object.\n * @private\n */\n restoreSetter_(object, name, descriptorObject = undefined) {\n const key = this.getKey_(object, name);\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n if (descriptorObject) {\n // We have to also overwrite a getter.\n installSetterAndGetter(object, name, this.originalSetters_[key],\n getOwnPropertyDescriptor(descriptorObject, name).get);\n } else {\n installSetter(object, name, this.originalSetters_[key]);\n }\n delete this.originalSetters_[key];\n }\n\n /**\n * Restores the original method of an object, as encountered during install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @private\n */\n restoreFunction_(object, name) {\n const key = this.getKey_(object, name);\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n installFunction(object, name, this.originalSetters_[key]);\n delete this.originalSetters_[key];\n }\n\n /**\n * Returns the key name for caching original setters.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @return {string} Key name.\n * @private\n */\n getKey_(object, name) {\n // TODO(msamuel): Can we use Object.prototype.toString.call(object)\n // to get an unspoofable string here?\n // TODO(msamuel): fail on '-' in object.constructor.name?\n // No Function.name in IE 11\n const ctrName = '' + (\n object.constructor.name ?\n object.constructor.name :\n object.constructor);\n return ctrName + '-' + name;\n }\n\n\n /**\n * Calls a default policy.\n * @param {string} typeName Type name to attempt to produce from a value.\n * @param {*} value The value to pass to a default policy\n * @param {string} sink The sink name that the default policy will be called\n * with.\n * @throws {Error} If the default policy throws, or not exist.\n * @return {Function} The trusted value.\n */\n maybeCallDefaultPolicy_(typeName, value, sink = '') {\n // Apply a fallback policy, if it exists.\n const fallbackPolicy = TrustedTypes.defaultPolicy;\n if (!fallbackPolicy) {\n throw new Error('Default policy does not exist');\n }\n if (!TYPE_CHECKER_MAP.hasOwnProperty(typeName)) {\n throw new Error();\n }\n return fallbackPolicy[TYPE_PRODUCER_MAP[typeName]](value, '' + sink);\n }\n\n /**\n * Logs and enforces TrustedTypes depending on the given configuration.\n * @template T\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {function(?):T} originalSetter Original setter.\n * @param {number} argNumber Number of argument to enforce the type of.\n * @param {Array} args Arguments.\n * @return {T}\n * @private\n */\n enforce_(context, propertyName, typeToEnforce, originalSetter, argNumber,\n args) {\n const value = args[argNumber];\n const typeName = '' + typeToEnforce.name;\n // If typed value is given, pass through.\n if (TYPE_CHECKER_MAP.hasOwnProperty(typeName) &&\n TYPE_CHECKER_MAP[typeName](value)) {\n if (stringifyForRangeHack &&\n propertyName == 'createContextualFragment') {\n // IE 11 hack, somehow the value is not stringified implicitly.\n args[argNumber] = args[argNumber].toString();\n }\n return apply(originalSetter, context, args);\n }\n\n if (typeToEnforce === TrustedTypes.TrustedScript) {\n const isInlineEventHandler =\n propertyName == 'setAttribute' ||\n propertyName === 'setAttributeNS' ||\n apply(slice, propertyName, [0, 2]) === 'on';\n // If a function (instead of string) is passed to inline event attribute,\n // or set(Timeout|Interval), pass through.\n const propertyAcceptsFunctions =\n propertyName === 'setInterval' ||\n propertyName === 'setTimeout' ||\n isInlineEventHandler;\n if ((propertyAcceptsFunctions && typeof value === 'function') ||\n (isInlineEventHandler && value === null)) {\n return apply(originalSetter, context, args);\n }\n }\n\n // Apply a fallback policy, if it exists.\n let fallbackValue;\n let exceptionThrown;\n const objName = context instanceof Element ?\n context.localName :\n getConstructorName_(context ? context.constructor : window.constructor);\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n typeName, value, objName + '.' + propertyName);\n } catch (e) {\n exceptionThrown = true;\n }\n if (!exceptionThrown) {\n args[argNumber] = fallbackValue;\n return apply(originalSetter, context, args);\n }\n\n // This will throw a TypeError if enforcement is enabled.\n this.processViolation_(context, propertyName, typeToEnforce, value);\n\n return apply(originalSetter, context, args);\n }\n\n /**\n * Report a TT violation.\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {string} value The value that was violated the restrictions.\n * @throws {TypeError} if the enforcement is enabled.\n */\n processViolation_(context, propertyName, typeToEnforce, value) {\n const contextName = getConstructorName_(context.constructor) ||\n '' + context;\n const message = `Failed to set ${propertyName} on ${contextName}: `\n + `This property requires ${typeToEnforce.name}.`;\n\n if (this.config_.isLoggingEnabled) {\n // eslint-disable-next-line no-console\n console.warn(message, propertyName, context, typeToEnforce, value);\n }\n\n // Unconditionally dispatch an event.\n if (typeof SecurityPolicyViolationEvent == 'function') {\n let blockedURI = '';\n if (typeToEnforce === TrustedTypes.TrustedURL ||\n typeToEnforce === TrustedTypes.TrustedScriptURL) {\n blockedURI = parseUrl_(value) || '';\n if (blockedURI) {\n blockedURI = blockedURI.href;\n }\n }\n const valueSlice = apply(slice, '' + value, [0, 40]);\n const event = new SecurityPolicyViolationEvent(\n 'securitypolicyviolation',\n {\n 'bubbles': true,\n 'blockedURI': blockedURI,\n 'disposition': this.config_.isEnforcementEnabled ?\n 'enforce' : 'report',\n 'documentURI': document.location.href,\n 'effectiveDirective': DIRECTIVE_NAME,\n 'originalPolicy': this.config_.cspString,\n 'statusCode': 0,\n 'violatedDirective': DIRECTIVE_NAME,\n 'sample': `${contextName}.${propertyName} ${valueSlice}`,\n });\n if (context instanceof Node && context.isConnected) {\n context.dispatchEvent(event);\n } else { // Fallback - dispatch an event on base document.\n document.dispatchEvent(event);\n }\n }\n\n if (this.config_.isEnforcementEnabled) {\n throw new TypeError(message);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n Object.defineProperty(\n publicApi,\n 'defaultPolicy',\n Object.getOwnPropertyDescriptor(tt, 'defaultPolicy') || {});\n\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n"]} \ No newline at end of file diff --git a/dist/es6/trustedtypes.api_only.build.js b/dist/es6/trustedtypes.api_only.build.js index 1d8fb5e7..c012fc1f 100644 --- a/dist/es6/trustedtypes.api_only.build.js +++ b/dist/es6/trustedtypes.api_only.build.js @@ -6,15 +6,15 @@ https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document */ -'use strict';const e=()=>{throw new TypeError("undefined conversion");},{toLowerCase:D,toUpperCase:L}=String.prototype;function Q(){throw new TypeError("Illegal constructor");}function R(){throw new TypeError("Illegal constructor");} -const {l:S}=function(){function x(a){let b=E.get(a);void 0===b&&(b=q(null),E.set(a,b));return b}function F(a){const b=M(a);if(null==b||M(b)!==N)throw Error();for(const d of y(b))z(a,d,{value:a[d]});return a}function r(a,b){h(a.prototype);delete a.name;z(a,"name",{value:b})}function A(a){return b=>b instanceof a&&E.has(b)}function U(a,b){function d(k,G){const V=b[G]||e,W=h(new k(H,a));return h({[G](l,...B){l=V(""+l,...B);if(void 0===l||null===l)l="";l=""+l;B=h(q(W));x(B).v=l;return B}}[G])}const c= -q(Q.prototype);for(const k of y(C))c[k]=d(C[k],k);z(c,"name",{value:a,writable:!1,configurable:!1,enumerable:!0});return h(c)}function O(a,b,d,c="",k=""){a=L.apply(String(a));(c=k?k:c)||(c="http://www.w3.org/1999/xhtml");if(c=t.apply(g,[c])?g[c]:null){if(t.apply(c,[a])&&c[a]&&t.apply(c[a][b],[d])&&c[a][b][d])return c[a][b][d];if(t.apply(c,["*"])&&t.apply(c["*"][b],[d])&&c["*"][b][d])return c["*"][b][d]}}const {assign:X,create:q,defineProperty:z,freeze:h,getOwnPropertyNames:y,getPrototypeOf:M,prototype:N}= -Object,{hasOwnProperty:t}=N,{forEach:Y,push:Z}=Array.prototype,H=Symbol(),E=F(new WeakMap),u=F([]),I=F([]);let J=null,K=!1;class v{constructor(a,b){if(a!==H)throw Error("cannot call the constructor");z(this,"policyName",{value:b,enumerable:!0})}toString(){return x(this).v}valueOf(){return x(this).v}}class f extends v{}r(f,"TrustedURL");class m extends v{}r(m,"TrustedScriptURL");class n extends v{}r(n,"TrustedHTML");class p extends v{}r(p,"TrustedScript");r(v,"TrustedType");const P=h(q(new n(H,""))); -x(P).v="";const g={["http://www.w3.org/1999/xhtml"]:{A:{attributes:{href:f.name}},AREA:{attributes:{href:f.name}},BASE:{attributes:{href:f.name}},BUTTON:{attributes:{formaction:f.name}},EMBED:{attributes:{src:m.name}},FORM:{attributes:{action:f.name}},FRAME:{attributes:{src:f.name}},IFRAME:{attributes:{src:f.name,srcdoc:n.name}},INPUT:{attributes:{formaction:f.name}},OBJECT:{attributes:{data:m.name,codebase:m.name}},SCRIPT:{attributes:{src:m.name,text:p.name},properties:{innerText:p.name,textContent:p.name, -text:p.name}},"*":{attributes:{},properties:{innerHTML:n.name,outerHTML:n.name}}},["http://www.w3.org/1999/xlink"]:{"*":{attributes:{href:f.name},properties:{}}},["http://www.w3.org/2000/svg"]:{"*":{attributes:{href:f.name},properties:{}}}};var w={codebase:"codeBase",formaction:"formAction"};"srcdoc"in HTMLIFrameElement.prototype||delete g["http://www.w3.org/1999/xhtml"].IFRAME.attributes.srcdoc;for(const a of Object.keys(g["http://www.w3.org/1999/xhtml"])){g["http://www.w3.org/1999/xhtml"][a].properties|| -(g["http://www.w3.org/1999/xhtml"][a].properties={});for(const b of Object.keys(g["http://www.w3.org/1999/xhtml"][a].attributes))g["http://www.w3.org/1999/xhtml"][a].properties[w[b]?w[b]:b]=g["http://www.w3.org/1999/xhtml"][a].attributes[b]}for(const a of y(HTMLElement.prototype))"on"===a.slice(0,2)&&(g["http://www.w3.org/1999/xhtml"]["*"].attributes[a]="TrustedScript");const C={createHTML:n,createScriptURL:m,createURL:f,createScript:p},aa=C.hasOwnProperty;w=q(R.prototype);X(w,{createPolicy:function(a, -b){if(K&&-1===I.indexOf(a))throw new TypeError("Policy "+a+" disallowed.");if(-1!==u.indexOf(a))throw new TypeError("Policy "+a+" exists.");u.push(a);const d=q(null);if(b&&"object"===typeof b)for(const c of y(b))aa.call(C,c)&&(d[c]=b[c]);else console.warn("trustedTypes.createPolicy "+a+" was given an empty policy");h(d);b=U(a,d);"default"===a&&(J=b);return b},getPolicyNames:function(){return u.slice()},g:A(n),j:A(f),i:A(m),h:A(p),b:function(a,b,d="",c=""){b=D.apply(String(b));return O(a,"attributes", -b,d,c)},c:function(a,b,d=""){return O(a,"properties",String(b),d)},f:function(a=""){if(!a)try{a=document.documentElement.namespaceURI}catch(b){a="http://www.w3.org/1999/xhtml"}return(a=g[a])?JSON.parse(JSON.stringify(a)):{}},a:P,TrustedHTML:n,TrustedURL:f,TrustedScriptURL:m,TrustedScript:p});return{l:h(w),s:function(a){-1!==a.indexOf("*")?K=!1:(K=!0,I.length=0,Y.call(a,b=>{Z.call(I,""+b)}))},m:function(){return J},o:function(){J=null;u.splice(u.indexOf("default"),1)}}}();if("undefined"!==typeof window&&(window.TrustedTypes&&"undefined"===typeof window.trustedTypes&&(window.trustedTypes=Object.freeze(window.TrustedTypes)),"undefined"===typeof window.trustedTypes)){var T=Object.create(R.prototype);Object.assign(T,{isHTML:S.g,isURL:S.j,isScriptURL:S.i,isScript:S.h,createPolicy:S.createPolicy,getPolicyNames:S.getPolicyNames,getAttributeType:S.b,getPropertyType:S.c,getTypeMapping:S.f,emptyHTML:S.a,_isPolyfill_:!0});window.trustedTypes=Object.freeze(T);window.TrustedHTML= -S.TrustedHTML;window.TrustedURL=S.TrustedURL;window.TrustedScriptURL=S.TrustedScriptURL;window.TrustedScript=S.TrustedScript;window.TrustedTypePolicy=Q;window.TrustedTypePolicyFactory=R};}).call(this); +'use strict';const e=()=>{throw new TypeError("undefined conversion");},{toLowerCase:E,toUpperCase:L}=String.prototype;function M(){throw new TypeError("Illegal constructor");}function S(){throw new TypeError("Illegal constructor");} +const {l:T}=function(){function y(a){let b=F.get(a);void 0===b&&(b=q(null),F.set(a,b));return b}function G(a){const b=N(a);if(null==b||N(b)!==O)throw Error();for(const d of z(b))t(a,d,{value:a[d]});return a}function u(a,b){h(a.prototype);delete a.name;t(a,"name",{value:b})}function A(a){return b=>b instanceof a&&F.has(b)}function V(a,b){function d(k,H){const W=b[H]||e,X=h(new k(I,a));return h({[H](l,...B){l=W(""+l,...B);if(void 0===l||null===l)l="";l=""+l;B=h(q(X));y(B).v=l;return B}}[H])}const c= +q(M.prototype);for(const k of z(C))c[k]=d(C[k],k);t(c,"name",{value:a,writable:!1,configurable:!1,enumerable:!0});return h(c)}function P(a,b,d,c="",k=""){a=L.apply(String(a));(c=k?k:c)||(c="http://www.w3.org/1999/xhtml");if(c=v.apply(g,[c])?g[c]:null){if(v.apply(c,[a])&&c[a]&&v.apply(c[a][b],[d])&&c[a][b][d])return c[a][b][d];if(v.apply(c,["*"])&&v.apply(c["*"][b],[d])&&c["*"][b][d])return c["*"][b][d]}}function Q(){return D}const {assign:Y,create:q,defineProperty:t,freeze:h,getOwnPropertyNames:z, +getPrototypeOf:N,prototype:O}=Object,{hasOwnProperty:v}=O,{forEach:Z,push:aa}=Array.prototype,I=Symbol(),F=G(new WeakMap),w=G([]),J=G([]);let D=null,K=!1;class x{constructor(a,b){if(a!==I)throw Error("cannot call the constructor");t(this,"policyName",{value:b,enumerable:!0})}toString(){return y(this).v}valueOf(){return y(this).v}}class f extends x{}u(f,"TrustedURL");class m extends x{}u(m,"TrustedScriptURL");class n extends x{}u(n,"TrustedHTML");class p extends x{}u(p,"TrustedScript");u(x,"TrustedType"); +const R=h(q(new n(I,"")));y(R).v="";const g={["http://www.w3.org/1999/xhtml"]:{A:{attributes:{href:f.name}},AREA:{attributes:{href:f.name}},BASE:{attributes:{href:f.name}},BUTTON:{attributes:{formaction:f.name}},EMBED:{attributes:{src:m.name}},FORM:{attributes:{action:f.name}},FRAME:{attributes:{src:f.name}},IFRAME:{attributes:{src:f.name,srcdoc:n.name}},INPUT:{attributes:{formaction:f.name}},OBJECT:{attributes:{data:m.name,codebase:m.name}},SCRIPT:{attributes:{src:m.name,text:p.name},properties:{innerText:p.name, +textContent:p.name,text:p.name}},"*":{attributes:{},properties:{innerHTML:n.name,outerHTML:n.name}}},["http://www.w3.org/1999/xlink"]:{"*":{attributes:{href:f.name},properties:{}}},["http://www.w3.org/2000/svg"]:{"*":{attributes:{href:f.name},properties:{}}}};var r={codebase:"codeBase",formaction:"formAction"};"srcdoc"in HTMLIFrameElement.prototype||delete g["http://www.w3.org/1999/xhtml"].IFRAME.attributes.srcdoc;for(const a of Object.keys(g["http://www.w3.org/1999/xhtml"])){g["http://www.w3.org/1999/xhtml"][a].properties|| +(g["http://www.w3.org/1999/xhtml"][a].properties={});for(const b of Object.keys(g["http://www.w3.org/1999/xhtml"][a].attributes))g["http://www.w3.org/1999/xhtml"][a].properties[r[b]?r[b]:b]=g["http://www.w3.org/1999/xhtml"][a].attributes[b]}for(const a of z(HTMLElement.prototype))"on"===a.slice(0,2)&&(g["http://www.w3.org/1999/xhtml"]["*"].attributes[a]="TrustedScript");const C={createHTML:n,createScriptURL:m,createURL:f,createScript:p},ba=C.hasOwnProperty;r=q(S.prototype);Y(r,{createPolicy:function(a, +b){if(K&&-1===J.indexOf(a))throw new TypeError("Policy "+a+" disallowed.");if(-1!==w.indexOf(a))throw new TypeError("Policy "+a+" exists.");w.push(a);const d=q(null);if(b&&"object"===typeof b)for(const c of z(b))ba.call(C,c)&&(d[c]=b[c]);else console.warn("trustedTypes.createPolicy "+a+" was given an empty policy");h(d);b=V(a,d);"default"===a&&(D=b);return b},getPolicyNames:function(){return w.slice()},g:A(n),j:A(f),i:A(m),h:A(p),b:function(a,b,d="",c=""){b=E.apply(String(b));return P(a,"attributes", +b,d,c)},c:function(a,b,d=""){return P(a,"properties",String(b),d)},f:function(a=""){if(!a)try{a=document.documentElement.namespaceURI}catch(b){a="http://www.w3.org/1999/xhtml"}return(a=g[a])?JSON.parse(JSON.stringify(a)):{}},a:R,m:D,TrustedHTML:n,TrustedURL:f,TrustedScriptURL:m,TrustedScript:p});t(r,"defaultPolicy",{get:Q,set:()=>{}});return{l:h(r),u:function(a){-1!==a.indexOf("*")?K=!1:(K=!0,J.length=0,Z.call(a,b=>{aa.call(J,""+b)}))},o:Q,s:function(){D=null;w.splice(w.indexOf("default"),1)}}}();if("undefined"!==typeof window&&(window.TrustedTypes&&"undefined"===typeof window.trustedTypes&&(window.trustedTypes=Object.freeze(window.TrustedTypes)),"undefined"===typeof window.trustedTypes)){var U=Object.create(S.prototype);Object.assign(U,{isHTML:T.g,isURL:T.j,isScriptURL:T.i,isScript:T.h,createPolicy:T.createPolicy,getPolicyNames:T.getPolicyNames,getAttributeType:T.b,getPropertyType:T.c,getTypeMapping:T.f,emptyHTML:T.a,_isPolyfill_:!0});Object.defineProperty(U,"defaultPolicy",Object.getOwnPropertyDescriptor(T, +"defaultPolicy")||{});window.trustedTypes=Object.freeze(U);window.TrustedHTML=T.TrustedHTML;window.TrustedURL=T.TrustedURL;window.TrustedScriptURL=T.TrustedScriptURL;window.TrustedScript=T.TrustedScript;window.TrustedTypePolicy=M;window.TrustedTypePolicyFactory=S};}).call(this); //# sourceMappingURL=trustedtypes.api_only.build.js.map diff --git a/dist/es6/trustedtypes.api_only.build.js.map b/dist/es6/trustedtypes.api_only.build.js.map index ca4f653c..ca7a8b2b 100644 --- a/dist/es6/trustedtypes.api_only.build.js.map +++ b/dist/es6/trustedtypes.api_only.build.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/trustedtypes.js","src/polyfill/api_only.js"],"names":["rejectInputFn","TypeError","toLowerCase","toUpperCase","String","prototype","TrustedTypePolicy","TrustedTypePolicyFactory","trustedTypes","trustedTypesBuilderTestOnly","privates","obj","v","privateMap","get","undefined","create","set","selfContained","collection","proto","getPrototypeOf","ObjectPrototype","Error","key","getOwnPropertyNames","defineProperty","value","lockdownTrustedType","SubClass","canonName","freeze","name","isTrustedTypeChecker","type","has","wrapPolicy","policyName","innerPolicy","creator","Ctor","methodName","method","policySpecificType","creatorSymbol","s","args","result","allowedValue","o","factory","policy","createTypeMapping","writable","configurable","enumerable","getTypeInternal_","tag","container","elNs","attrNs","canonicalTag","apply","ns","HTML_NS","map","hasOwnProperty","TYPE_MAP","assign","Object","forEach","push","Array","Symbol","WeakMap","policyNames","allowedNames","defaultPolicy","enforceNameWhitelist","TrustedType","TrustedURL","TrustedScriptURL","TrustedHTML","TrustedScript","emptyHTML","XLINK_NS","SVG_NS","ATTR_PROPERTY_MAP","HTMLIFrameElement","keys","attr","HTMLElement","slice","createFunctionAllowed","api","createPolicy","indexOf","call","console","warn","wrappedPolicy","DEFAULT_POLICY_NAME","getPolicyNames","isHTML","isURL","isScriptURL","isScript","getAttributeType","tagName","attribute","elementNs","attributeNs","canonicalAttr","getPropertyType","property","getTypeMapping","namespaceUri","document","documentElement","namespaceURI","e","JSON","parse","stringify","setAllowedPolicyNames","allowedPolicyNames","length","el","getDefaultPolicy","resetDefaultPolicy","splice","window","publicApi","tt"],"mappings":"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","file":"trustedtypes.api_only.build.js","sourcesContent":["/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n"]} \ No newline at end of file +{"version":3,"sources":["src/trustedtypes.js","src/polyfill/api_only.js"],"names":["rejectInputFn","TypeError","toLowerCase","toUpperCase","String","prototype","TrustedTypePolicy","TrustedTypePolicyFactory","trustedTypes","trustedTypesBuilderTestOnly","privates","obj","v","privateMap","get","undefined","create","set","selfContained","collection","proto","getPrototypeOf","ObjectPrototype","Error","key","getOwnPropertyNames","defineProperty","value","lockdownTrustedType","SubClass","canonName","freeze","name","isTrustedTypeChecker","type","has","wrapPolicy","policyName","innerPolicy","creator","Ctor","methodName","method","policySpecificType","creatorSymbol","s","args","result","allowedValue","o","factory","policy","createTypeMapping","writable","configurable","enumerable","getTypeInternal_","tag","container","elNs","attrNs","canonicalTag","apply","ns","HTML_NS","map","hasOwnProperty","TYPE_MAP","getDefaultPolicy","defaultPolicy","assign","Object","forEach","push","Array","Symbol","WeakMap","policyNames","allowedNames","enforceNameWhitelist","TrustedType","TrustedURL","TrustedScriptURL","TrustedHTML","TrustedScript","emptyHTML","XLINK_NS","SVG_NS","ATTR_PROPERTY_MAP","HTMLIFrameElement","keys","attr","HTMLElement","slice","createFunctionAllowed","api","createPolicy","indexOf","call","console","warn","wrappedPolicy","DEFAULT_POLICY_NAME","getPolicyNames","isHTML","isURL","isScriptURL","isScript","getAttributeType","tagName","attribute","elementNs","attributeNs","canonicalAttr","getPropertyType","property","getTypeMapping","namespaceUri","document","documentElement","namespaceURI","e","JSON","parse","stringify","setAllowedPolicyNames","allowedPolicyNames","length","el","resetDefaultPolicy","splice","window","publicApi","tt","getOwnPropertyDescriptor"],"mappings":"A;;;;;;;;aASA,MAAMA,EAAgB,EAAAA,EAAO,CAC3B,KAAM,KAAIC,SAAJ,CAAc,sBAAd,CAAN,CAD2B,CAA7B,CAIM,CAAC,YAAAC,CAAD,CAAc,YAAAC,CAAd,CAAA,CAA6BC,MAAAC,UAcFC,SAAA,EAAQ,EAAG,CAC1C,KAAM,KAAIL,SAAJ,CAAc,qBAAd,CAAN,CAD0C,CAOJM,QAAA,EAAQ,EAAG,CACjD,KAAM,KAAIN,SAAJ,CAAc,qBAAd,CAAN,CADiD;AA0nB5C,MAAM,CACX,EAAAO,CADW,CAAA,CAjmB8BC,QAAQ,EAAG,CAoBnCC,QAAA,EAAQ,CAACC,CAAD,CAAM,CAC7B,IAAIC,EAAIC,CAAAC,IAAA,CAAeH,CAAf,CACEI,KAAAA,EAAV,GAAIH,CAAJ,GACEA,CACA,CADII,CAAA,CAAO,IAAP,CACJ,CAAAH,CAAAI,IAAA,CAAeN,CAAf,CAAoBC,CAApB,CAFF,CAIA,OAAOA,EANsB,CAiB/BM,QAASA,EAAa,CAACC,CAAD,CAAa,CACjC,MAAMC,EAAQC,CAAA,CAAeF,CAAf,CACd,IAAa,IAAb,EAAIC,CAAJ,EAAqBC,CAAA,CAAeD,CAAf,CAArB,GAA+CE,CAA/C,CACE,KAAUC,MAAJ,EAAN,CAEF,IAAK,MAAMC,CAAX,GAAkBC,EAAA,CAAoBL,CAApB,CAAlB,CACEM,CAAA,CAAeP,CAAf,CAA2BK,CAA3B,CAAgC,CAACG,MAAOR,CAAA,CAAWK,CAAX,CAAR,CAAhC,CAEF,OAAOL,EAR0B,CA0FnCS,QAASA,EAAmB,CAACC,CAAD,CAAWC,CAAX,CAAsB,CAChDC,CAAA,CAAOF,CAAAxB,UAAP,CACA,QAAOwB,CAAAG,KACPN,EAAA,CAAeG,CAAf,CAAyB,MAAzB,CAAiC,CAACF,MAAOG,CAAR,CAAjC,CAHgD,CAkMlDG,QAASA,EAAoB,CAACC,CAAD,CAAO,CAClC,MAAQvB,EAAD,EAAUA,CAAV,WAAyBuB,EAAzB,EAAkCrB,CAAAsB,IAAA,CAAexB,CAAf,CADP,CAUpCyB,QAASA,EAAU,CAACC,CAAD,CAAaC,CAAb,CAA0B,CAO3CC,QAASA,EAAO,CAACC,CAAD,CAAOC,CAAP,CAAmB,CAEjC,MAAMC,EAASJ,CAAA,CAAYG,CAAZ,CAATC,EAAoC1C,CAA1C,CACM2C,EAAqBZ,CAAA,CAAO,IAAIS,CAAJ,CAASI,CAAT,CAAwBP,CAAxB,CAAP,CAc3B,OAAON,EAAA,CAbS,CACd,CAACU,CAAD,CAAY,CAACI,CAAD,CAAI,GAAGC,CAAP,CAAa,CAEnBC,CAAAA,CAASL,CAAA,CAAO,EAAP,CAAYG,CAAZ,CAAe,GAAGC,CAAlB,CACb,IAAe/B,IAAAA,EAAf,GAAIgC,CAAJ,EAAuC,IAAvC,GAA4BA,CAA5B,CACEA,CAAA,CAAS,EAELC,EAAAA,CAAe,EAAfA,CAAoBD,CACpBE,EAAAA,CAAIlB,CAAA,CAAOf,CAAA,CAAO2B,CAAP,CAAP,CACVjC,EAAA,CAASuC,CAAT,CAAA,EAAA,CAAmBD,CACnB,OAAOC,EATgB,CADX,CAAAC,CAYdT,CAZcS,CAaT,CAjB0B,CAoBnC,MAAMC;AAASnC,CAAA,CAAOV,CAAAD,UAAP,CAEf,KAAK,MAAM2B,CAAX,GAAmBP,EAAA,CAAoB2B,CAApB,CAAnB,CACED,CAAA,CAAOnB,CAAP,CAAA,CAAeO,CAAA,CAAQa,CAAA,CAAkBpB,CAAlB,CAAR,CAAiCA,CAAjC,CAEjBN,EAAA,CAAeyB,CAAf,CAAuB,MAAvB,CAA+B,CAC7BxB,MAAOU,CADsB,CAE7BgB,SAAU,CAAA,CAFmB,CAG7BC,aAAc,CAAA,CAHe,CAI7BC,WAAY,CAAA,CAJiB,CAA/B,CAOA,OAA0CxB,EAAA,CAAOoB,CAAP,CAvCC,CAqE7CK,QAASA,EAAgB,CAACC,CAAD,CAAMC,CAAN,CAAiB1B,CAAjB,CAAuB2B,CAAA,CAAO,EAA9B,CAAkCC,CAAA,CAAS,EAA3C,CAA+C,CAChEC,CAAAA,CAAe1D,CAAA2D,MAAA,CAAkB1D,MAAA,CAAOqD,CAAP,CAAlB,CAGrB,EADIM,CACJ,CADSH,CAAA,CAASA,CAAT,CAAkBD,CAC3B,IACEI,CADF,CAhcmBC,8BAgcnB,CAIA,IADMC,CACN,CADYC,CAAAJ,MAAA,CAAqBK,CAArB,CAA+B,CAACJ,CAAD,CAA/B,CAAA,CAAuCI,CAAA,CAASJ,CAAT,CAAvC,CAAsD,IAClE,CAAA,CAGA,GAAIG,CAAAJ,MAAA,CAAqBG,CAArB,CAA0B,CAACJ,CAAD,CAA1B,CAAJ,EACII,CAAA,CAAIJ,CAAJ,CADJ,EAEIK,CAAAJ,MAAA,CAAqBG,CAAA,CAAIJ,CAAJ,CAAA,CAAkBH,CAAlB,CAArB,CAAmD,CAAC1B,CAAD,CAAnD,CAFJ,EAGIiC,CAAA,CAAIJ,CAAJ,CAAA,CAAkBH,CAAlB,CAAA,CAA6B1B,CAA7B,CAHJ,CAIE,MAAOiC,EAAA,CAAIJ,CAAJ,CAAA,CAAkBH,CAAlB,CAAA,CAA6B1B,CAA7B,CAGT,IAAIkC,CAAAJ,MAAA,CAAqBG,CAArB,CAA0B,CAAC,GAAD,CAA1B,CAAJ,EACIC,CAAAJ,MAAA,CAAqBG,CAAA,CAAI,GAAJ,CAAA,CAASP,CAAT,CAArB,CAA0C,CAAC1B,CAAD,CAA1C,CADJ,EAEIiC,CAAA,CAAI,GAAJ,CAAA,CAASP,CAAT,CAAA,CAAoB1B,CAApB,CAFJ,CAGE,MAAOiC,EAAA,CAAI,GAAJ,CAAA,CAASP,CAAT,CAAA,CAAoB1B,CAApB,CAbT,CARsE,CA6JxEoC,QAASA,EAAgB,EAAG,CAC1B,MAAOC,EADmB,CA3iB5B,MAAM,CACJ,OAAAC,CADI,CACI,OAAAtD,CADJ,CACY,eAAAU,CADZ,CAC4B,OAAAK,CAD5B,CACoC,oBAAAN,CADpC;AAEJ,eAAAJ,CAFI,CAEY,UAAWC,CAFvB,CAAA,CAGFiD,MAHJ,CAKM,CAAC,eAAAL,CAAD,CAAA,CAAmB5C,CALzB,CAOM,CACJ,QAAAkD,CADI,CACK,KAAAC,EADL,CAAA,CAEFC,KAAArE,UATJ,CAWMuC,EAAgB+B,MAAA,EAXtB,CAoDM9D,EAAaK,CAAA,CAAc,IAAI0D,OAAlB,CApDnB,CA0DMC,EAAc3D,CAAA,CAAc,EAAd,CA1DpB,CAgEM4D,EAAe5D,CAAA,CAAc,EAAd,CAMrB,KAAImD,EAAgB,IAApB,CAMIU,EAAuB,CAAA,CAO3B,MAAMC,EAAN,CAQE,WAAW,CAACnC,CAAD,CAAIR,CAAJ,CAAgB,CAEzB,GAAIQ,CAAJ,GAAUD,CAAV,CACE,KAAUrB,MAAJ,CAAU,6BAAV,CAAN,CAEFG,CAAA,CAAe,IAAf,CAAqB,YAArB,CACI,CAACC,MAAYU,CAAb,CAAyBkB,WAAY,CAAA,CAArC,CADJ,CALyB,CAc3B,QAAQ,EAAG,CACT,MAAO7C,EAAA,CAAS,IAAT,CAAA,EADE,CASX,OAAO,EAAG,CACR,MAAOA,EAAA,CAAS,IAAT,CAAA,EADC,CA/BZ,CAoDA,KAAMuE,EAAN,QAAyBD,EAAzB,EAEApD,CAAA,CAAoBqD,CAApB,CAAgC,YAAhC,CAMA,MAAMC,EAAN,QAA+BF,EAA/B,EAEApD,CAAA,CAAoBsD,CAApB,CAAsC,kBAAtC,CAMA,MAAMC,EAAN,QAA0BH,EAA1B,EAEApD,CAAA,CAAoBuD,CAApB,CAAiC,aAAjC,CAMA,MAAMC,EAAN,QAA4BJ,EAA5B,EAEApD,CAAA,CAAoBwD,CAApB,CAAmC,eAAnC,CAEAxD,EAAA,CAAoBoD,CAApB,CAAiC,aAAjC,CAGA;MAAMK,EAAYtD,CAAA,CAAOf,CAAA,CAAO,IAAImE,CAAJ,CAAgBvC,CAAhB,CAA+B,EAA/B,CAAP,CAAP,CAClBlC,EAAA,CAAS2E,CAAT,CAAA,EAAA,CAA2B,EAQ3B,OAAMlB,EAAW,CACf,CA9NmBH,8BA8NnB,EAAW,CAET,EAAK,CACH,WAAc,CACZ,KAAQiB,CAAAjD,KADI,CADX,CAFI,CAOT,KAAQ,CACN,WAAc,CACZ,KAAQiD,CAAAjD,KADI,CADR,CAPC,CAYT,KAAQ,CACN,WAAc,CACZ,KAAQiD,CAAAjD,KADI,CADR,CAZC,CAiBT,OAAU,CACR,WAAc,CACZ,WAAciD,CAAAjD,KADF,CADN,CAjBD,CAsBT,MAAS,CACP,WAAc,CACZ,IAAOkD,CAAAlD,KADK,CADP,CAtBA,CA2BT,KAAQ,CACN,WAAc,CACZ,OAAUiD,CAAAjD,KADE,CADR,CA3BC,CAgCT,MAAS,CACP,WAAc,CACZ,IAAOiD,CAAAjD,KADK,CADP,CAhCA,CAqCT,OAAU,CACR,WAAc,CACZ,IAAOiD,CAAAjD,KADK,CAEZ,OAAUmD,CAAAnD,KAFE,CADN,CArCD,CA2CT,MAAS,CACP,WAAc,CACZ,WAAciD,CAAAjD,KADF,CADP,CA3CA,CAgDT,OAAU,CACR,WAAc,CACZ,KAAQkD,CAAAlD,KADI,CAEZ,SAAYkD,CAAAlD,KAFA,CADN,CAhDD,CAuDT,OAAU,CACR,WAAc,CACZ,IAAOkD,CAAAlD,KADK,CAEZ,KAAQoD,CAAApD,KAFI,CADN,CAKR,WAAc,CACZ,UAAaoD,CAAApD,KADD;AAEZ,YAAeoD,CAAApD,KAFH,CAGZ,KAAQoD,CAAApD,KAHI,CALN,CAvDD,CAkET,IAAK,CACH,WAAc,EADX,CAEH,WAAc,CACZ,UAAamD,CAAAnD,KADD,CAEZ,UAAamD,CAAAnD,KAFD,CAFX,CAlEI,CADI,CA2Ef,CAvSoBsD,8BAuSpB,EAAY,CACV,IAAK,CACH,WAAc,CACZ,KAAQL,CAAAjD,KADI,CADX,CAIH,WAAc,EAJX,CADK,CA3EG,CAmFf,CA9SkBuD,4BA8SlB,EAAU,CACR,IAAK,CACH,WAAc,CACZ,KAAQN,CAAAjD,KADI,CADX,CAIH,WAAc,EAJX,CADG,CAnFK,CAiGjB,KAAMwD,EAAoB,CACxB,SAAY,UADY,CAExB,WAAc,YAFU,CAMpB,SAAN,EAAkBC,kBAAApF,UAAlB,EACE,OAAO8D,CAAA,CArUYH,8BAqUZ,CAAA,OAAA,WAAA,OAIT,KAAK,MAAMP,CAAX,GAAkBc,OAAAmB,KAAA,CAAYvB,CAAA,CAzUTH,8BAyUS,CAAZ,CAAlB,CAAkD,CAC3CG,CAAA,CA1UcH,8BA0Ud,CAAA,CAAkBP,CAAlB,CAAA,WAAL;CACEU,CAAA,CA3UiBH,8BA2UjB,CAAA,CAAkBP,CAAlB,CAAA,WADF,CACyC,EADzC,CAGA,KAAK,MAAMkC,CAAX,GAAmBpB,OAAAmB,KAAA,CAAYvB,CAAA,CA7UZH,8BA6UY,CAAA,CAAkBP,CAAlB,CAAA,WAAZ,CAAnB,CACEU,CAAA,CA9UiBH,8BA8UjB,CAAA,CAAkBP,CAAlB,CAAA,WAAA,CACI+B,CAAA,CAAkBG,CAAlB,CAAA,CAA0BH,CAAA,CAAkBG,CAAlB,CAA1B,CAAoDA,CADxD,CAAA,CAEIxB,CAAA,CAhVaH,8BAgVb,CAAA,CAAkBP,CAAlB,CAAA,WAAA,CAAqCkC,CAArC,CAP0C,CAYlD,IAAK,MAAM3D,CAAX,GAAmBP,EAAA,CAAoBmE,WAAAvF,UAApB,CAAnB,CAC2B,IAAzB,GAAI2B,CAAA6D,MAAA,CAAW,CAAX,CAAc,CAAd,CAAJ,GACE1B,CAAA,CAvViBH,8BAuVjB,CAAA,CAAkB,GAAlB,CAAA,WAAA,CAAqChC,CAArC,CADF,CAC+C,eAD/C,CAQF,OAAMoB,EAAoB,CACxB,WAAc+B,CADU,CAExB,gBAAmBD,CAFK,CAGxB,UAAaD,CAHW,CAIxB,aAAgBG,CAJQ,CAA1B,CAOMU,GAAwB1C,CAAAc,eAgQxB6B,EAAAA,CAAM/E,CAAA,CAAOT,CAAAF,UAAP,CACZiE,EAAA,CAAOyB,CAAP,CAAY,CAEVC,aA3EFA,QAAqB,CAAChE,CAAD;AAAOmB,CAAP,CAAe,CAGlC,GAAI4B,CAAJ,EAA6D,EAA7D,GAA4BD,CAAAmB,QAAA,CAFTjE,CAES,CAA5B,CACE,KAAM,KAAI/B,SAAJ,CAAc,SAAd,CAHW+B,CAGX,CAAkC,cAAlC,CAAN,CAGF,GAAoC,EAApC,GAAI6C,CAAAoB,QAAA,CANejE,CAMf,CAAJ,CACE,KAAM,KAAI/B,SAAJ,CAAc,SAAd,CAPW+B,CAOX,CAAkC,UAAlC,CAAN,CAKF6C,CAAAJ,KAAA,CAZmBzC,CAYnB,CAGA,OAAMM,EAActB,CAAA,CAAO,IAAP,CACpB,IAAImC,CAAJ,EAAgC,QAAhC,GAAc,MAAOA,EAArB,CAEE,IAAK,MAAM3B,CAAX,GAAkBC,EAAA,CAAoB0B,CAApB,CAAlB,CACM2C,EAAAI,KAAA,CAA2B9C,CAA3B,CAA8C5B,CAA9C,CAAJ,GACEc,CAAA,CAAYd,CAAZ,CADF,CACqB2B,CAAA,CAAO3B,CAAP,CADrB,CAHJ,KASE2E,QAAAC,KAAA,CAAa,4BAAb,CAzBiBpE,CAyBjB,CACI,4BADJ,CAGFD,EAAA,CAAOO,CAAP,CAEM+D,EAAAA,CAAgBjE,CAAA,CA9BHJ,CA8BG,CAAkBM,CAAlB,CAnhBSgE,UAqhB/B,GAhCmBtE,CAgCnB,GACEqC,CADF,CACkBgC,CADlB,CAIA,OAAOA,EArC2B,CAyExB,CAIVE,eAjGFA,QAAuB,EAAG,CAKxB,MAAO1B,EAAAgB,MAAA,EALiB,CA6Fd,CAQVW,EAAQvE,CAAA,CAAqBkD,CAArB,CARE,CASVsB,EAAOxE,CAAA,CAAqBgD,CAArB,CATG,CAUVyB,EAAazE,CAAA,CAAqBiD,CAArB,CAVH,CAWVyB,EAAU1E,CAAA,CAAqBmD,CAArB,CAXA,CAaVwB,EAxMFA,QAAyB,CAACC,CAAD,CAAUC,CAAV,CAAqBC,CAAA,CAAY,EAAjC,CACrBC,CAAA,CAAc,EADO,CACH,CACdC,CAAAA,CAAgB/G,CAAA4D,MAAA,CAAkB1D,MAAA,CAAO0G,CAAP,CAAlB,CACtB,OAAOtD,EAAA,CAAiBqD,CAAjB,CAA0B,YAA1B;AAAwCI,CAAxC,CACHF,CADG,CACQC,CADR,CAFa,CA0LV,CAcVE,EAvJFA,QAAwB,CAACL,CAAD,CAAUM,CAAV,CAAoBJ,CAAA,CAAY,EAAhC,CAAoC,CAE1D,MAAOvD,EAAA,CAAiBqD,CAAjB,CAA0B,YAA1B,CAAwCzG,MAAA,CAAO+G,CAAP,CAAxC,CAA0DJ,CAA1D,CAFmD,CAyIhD,CAeVK,EAxIFA,QAAuB,CAACC,CAAA,CAAe,EAAhB,CAAoB,CACzC,GAAI,CAACA,CAAL,CACE,GAAI,CACFA,CAAA,CAAeC,QAAAC,gBAAAC,aADb,CAEF,MAAOC,CAAP,CAAU,CACVJ,CAAA,CAlferD,8BAifL,CAcd,MAAA,CADMC,CACN,CADYE,CAAA,CAASkD,CAAT,CACZ,EAHSK,IAAAC,MAAA,CAAWD,IAAAE,UAAA,CAMH3D,CANG,CAAX,CAGT,CACS,EAnBgC,CAyH/B,CAgBVoB,EAAAA,CAhBU,CAiBVhB,EAAAA,CAjBU,CAmBVc,YAAaA,CAnBH,CAoBVF,WAAYA,CApBF,CAqBVC,iBAAkBA,CArBR,CAsBVE,cAAeA,CAtBL,CAAZ,CAyBA1D,EAAA,CAAeqE,CAAf,CAAoB,eAApB,CAAqC,CACnCjF,IAAKsD,CAD8B,CAEnCnD,IAAK,EAAAA,EAAM,EAFwB,CAArC,CAKA,OAAO,CACLT,EAAcuB,CAAA,CAAOgE,CAAP,CADT,CAEL8B,EA7DFA,QAA8B,CAACC,CAAD,CAAqB,CACR,EAAzC,GAAIA,CAAA7B,QAAA,CAA2B,GAA3B,CAAJ,CACElB,CADF,CACyB,CAAA,CADzB,EAGEA,CAEA,CAFuB,CAAA,CAEvB,CADAD,CAAAiD,OACA,CADsB,CACtB,CAAAvD,CAAA0B,KAAA,CAAa4B,CAAb,CAAkCE,CAAD,EAAQ,CACvCvD,EAAAyB,KAAA,CAAUpB,CAAV,CAAwB,EAAxB,CAA6BkD,CAA7B,CADuC,CAAzC,CALF,CADiD,CA2D5C,CAGL5D,EAAAA,CAHK,CAIL6D,EAxCFA,QAA2B,EAAG,CAC5B5D,CAAA,CAAgB,IAChBQ,EAAAqD,OAAA,CAAmBrD,CAAAoB,QAAA,CAzjBYK,SAyjBZ,CAAnB,CAA6D,CAA7D,CAF4B,CAoCvB,CAxlB6C,CAsmBlD,E,CCzoBF,GAAsB,WAAtB,GAAI,MAAO6B,OAAX,GAMIA,MAAA,aAIA,EAJ0D,WAI1D,GAJ0B,MAAOA,OAAA,aAIjC,GAHFA,MAAA,aAGE,CAHqB5D,MAAAxC,OAAA,CAAcoG,MAAA,aAAd,CAGrB,EAAgC,WAAhC,GAAA,MAAOA,OAAA,aAVX,EAUA,CAIA,IAAMC,EAAY7D,MAAAvD,OAAA,CAAcT,CAAAF,UAAd,CAClBkE,OAAAD,OAAA,CAAc8D,CAAd,CAAyB,CACvB,OAAUC,CAAA7B,EADa,CAEvB,MAAS6B,CAAA5B,EAFc,CAGvB,YAAe4B,CAAA3B,EAHQ,CAIvB,SAAY2B,CAAA1B,EAJW,CAKvB,aAAgB0B,CAAArC,aALO,CAMvB,eAAkBqC,CAAA9B,eANK,CAOvB,iBAAoB8B,CAAAzB,EAPG,CAQvB,gBAAmByB,CAAAnB,EARI,CASvB,eAAkBmB,CAAAjB,EATK,CAUvB,UAAaiB,CAAAhD,EAVU,CAWvB,aAAgB,CAAA,CAXO,CAAzB,CAaAd,OAAA7C,eAAA,CACI0G,CADJ,CAEI,eAFJ,CAGI7D,MAAA+D,yBAAA,CAAgCD,CAAhC;AAAoC,eAApC,CAHJ,EAG4D,EAH5D,CAKAF,OAAA,aAAA,CAAuB5D,MAAAxC,OAAA,CAAcqG,CAAd,CAEvBD,OAAA,YAAA,CAAwBE,CAAAlD,YACxBgD,OAAA,WAAA,CAAuBE,CAAApD,WACvBkD,OAAA,iBAAA,CAA6BE,CAAAnD,iBAC7BiD,OAAA,cAAA,CAA0BE,CAAAjD,cAC1B+C,OAAA,kBAAA,CAA8B7H,CAC9B6H,OAAA,yBAAA,CAAqC5H,CA9BrC","file":"trustedtypes.api_only.build.js","sourcesContent":["/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n defaultPolicy, // Just to make the compiler happy, this is overridden below.\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n defineProperty(api, 'defaultPolicy', {\n get: getDefaultPolicy,\n set: () => {},\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n Object.defineProperty(\n publicApi,\n 'defaultPolicy',\n Object.getOwnPropertyDescriptor(tt, 'defaultPolicy') || {});\n\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n"]} \ No newline at end of file diff --git a/dist/es6/trustedtypes.build.js b/dist/es6/trustedtypes.build.js index 2474ae4a..359beef9 100644 --- a/dist/es6/trustedtypes.build.js +++ b/dist/es6/trustedtypes.build.js @@ -6,31 +6,31 @@ https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document */ -'use strict';function aa(a){const b=/\s+/;return a.trim().split(/\s*;\s*/).map(c=>c.split(b)).reduce(function(c,d){d[0]&&(c[d[0]]=d.slice(1).map(g=>g).sort());return c},{})}function ba(a){const b=aa(a),c="trusted-types"in b;let d=["*"];c&&(d=b["trusted-types"].filter(g=>"'"!==g.charAt(0)));return new ca(!0,c,d,a)}class ca{constructor(a,b,c,d=null){this.b=a;this.a=b;this.c=c;this.f=d}};const da=()=>{throw new TypeError("undefined conversion");},{toLowerCase:ea,toUpperCase:ia}=String.prototype;function ja(){throw new TypeError("Illegal constructor");}function h(){throw new TypeError("Illegal constructor");} -const {F:r,D:ka,u:la}=function(){function a(e){let f=O.get(e);void 0===f&&(f=p(null),O.set(e,f));return f}function b(e){const f=P(e);if(null==f||P(f)!==fa)throw Error();for(const q of C(f))n(e,q,{value:e[q]});return e}function c(e,f){t(e.prototype);delete e.name;n(e,"name",{value:f})}function d(e){return f=>f instanceof e&&O.has(f)}function g(e,f){function q(x,Q){const xa=f[Q]||da,ya=t(new x(R,e));return t({[Q](y,...K){y=xa(""+y,...K);if(void 0===y||null===y)y="";y=""+y;K=t(p(ya));a(K).v=y;return K}}[Q])} -const l=p(ja.prototype);for(const x of C(L))l[x]=q(L[x],x);n(l,"name",{value:e,writable:!1,configurable:!1,enumerable:!0});return t(l)}function k(e,f,q,l="",x=""){e=ia.apply(String(e));(l=x?x:l)||(l="http://www.w3.org/1999/xhtml");if(l=E.apply(v,[l])?v[l]:null){if(E.apply(l,[e])&&l[e]&&E.apply(l[e][f],[q])&&l[e][f][q])return l[e][f][q];if(E.apply(l,["*"])&&E.apply(l["*"][f],[q])&&l["*"][f][q])return l["*"][f][q]}}const {assign:m,create:p,defineProperty:n,freeze:t,getOwnPropertyNames:C,getPrototypeOf:P, -prototype:fa}=Object,{hasOwnProperty:E}=fa,{forEach:za,push:Aa}=Array.prototype,R=Symbol(),O=b(new WeakMap),F=b([]),S=b([]);let T=null,U=!1;class G{constructor(e,f){if(e!==R)throw Error("cannot call the constructor");n(this,"policyName",{value:f,enumerable:!0})}toString(){return a(this).v}valueOf(){return a(this).v}}class u extends G{}c(u,"TrustedURL");class z extends G{}c(z,"TrustedScriptURL");class A extends G{}c(A,"TrustedHTML");class B extends G{}c(B,"TrustedScript");c(G,"TrustedType");const ha= -t(p(new A(R,"")));a(ha).v="";const v={["http://www.w3.org/1999/xhtml"]:{A:{attributes:{href:u.name}},AREA:{attributes:{href:u.name}},BASE:{attributes:{href:u.name}},BUTTON:{attributes:{formaction:u.name}},EMBED:{attributes:{src:z.name}},FORM:{attributes:{action:u.name}},FRAME:{attributes:{src:u.name}},IFRAME:{attributes:{src:u.name,srcdoc:A.name}},INPUT:{attributes:{formaction:u.name}},OBJECT:{attributes:{data:z.name,codebase:z.name}},SCRIPT:{attributes:{src:z.name,text:B.name},properties:{innerText:B.name, -textContent:B.name,text:B.name}},"*":{attributes:{},properties:{innerHTML:A.name,outerHTML:A.name}}},["http://www.w3.org/1999/xlink"]:{"*":{attributes:{href:u.name},properties:{}}},["http://www.w3.org/2000/svg"]:{"*":{attributes:{href:u.name},properties:{}}}};var H={codebase:"codeBase",formaction:"formAction"};"srcdoc"in HTMLIFrameElement.prototype||delete v["http://www.w3.org/1999/xhtml"].IFRAME.attributes.srcdoc;for(const e of Object.keys(v["http://www.w3.org/1999/xhtml"])){v["http://www.w3.org/1999/xhtml"][e].properties|| -(v["http://www.w3.org/1999/xhtml"][e].properties={});for(const f of Object.keys(v["http://www.w3.org/1999/xhtml"][e].attributes))v["http://www.w3.org/1999/xhtml"][e].properties[H[f]?H[f]:f]=v["http://www.w3.org/1999/xhtml"][e].attributes[f]}for(const e of C(HTMLElement.prototype))"on"===e.slice(0,2)&&(v["http://www.w3.org/1999/xhtml"]["*"].attributes[e]="TrustedScript");const L={createHTML:A,createScriptURL:z,createURL:u,createScript:B},Ba=L.hasOwnProperty;H=p(h.prototype);m(H,{createPolicy:function(e, -f){if(U&&-1===S.indexOf(e))throw new TypeError("Policy "+e+" disallowed.");if(-1!==F.indexOf(e))throw new TypeError("Policy "+e+" exists.");F.push(e);const q=p(null);if(f&&"object"===typeof f)for(const l of C(f))Ba.call(L,l)&&(q[l]=f[l]);else console.warn("trustedTypes.createPolicy "+e+" was given an empty policy");t(q);f=g(e,q);"default"===e&&(T=f);return f},getPolicyNames:function(){return F.slice()},j:d(A),m:d(u),l:d(z),g:d(B),h:function(e,f,q="",l=""){f=ea.apply(String(f));return k(e,"attributes", -f,q,l)},w:function(e,f,q=""){return k(e,"properties",String(f),q)},i:function(e=""){if(!e)try{e=document.documentElement.namespaceURI}catch(f){e="http://www.w3.org/1999/xhtml"}return(e=v[e])?JSON.parse(JSON.stringify(e)):{}},o:ha,TrustedHTML:A,TrustedURL:u,TrustedScriptURL:z,TrustedScript:B});return{F:t(H),D:function(e){-1!==e.indexOf("*")?U=!1:(U=!0,S.length=0,za.call(e,f=>{Aa.call(S,""+f)}))},u:function(){return T},G:function(){T=null;F.splice(F.indexOf("default"),1)}}}();const {defineProperty:w}=Object;function ma(a,b,c){w(a,b,{value:c})};const {apply:D}=Reflect,{getOwnPropertyNames:na,getOwnPropertyDescriptor:I,getPrototypeOf:oa}=Object,{hasOwnProperty:J}=Object.prototype,{slice:pa}=String.prototype,qa="function"==typeof window.URL?URL.prototype.constructor:null;let ra; -const M=document.createElement("div").constructor.name?a=>a.name:a=>(""+a).match(/^\[object (\S+)\]$/)[1],sa=I(window,"open")?window:window.constructor.prototype,ta=D(J,Element.prototype,["insertAdjacentHTML"])?Element.prototype:HTMLElement.prototype,ua=window.SecurityPolicyViolationEvent||null,N=r.i("http://www.w3.org/1999/xhtml"),V={TrustedHTML:r.TrustedHTML,TrustedScript:r.TrustedScript,TrustedScriptURL:r.TrustedScriptURL,TrustedURL:r.TrustedURL}; -for(const a of Object.keys(N)){const b=N[a].properties;for(const [c,d]of Object.entries(b))b[c]=V[d]}const W={TrustedHTML:r.j,TrustedURL:r.m,TrustedScriptURL:r.l,TrustedScript:r.g},va={TrustedHTML:"createHTML",TrustedURL:"createURL",TrustedScriptURL:"createScriptURL",TrustedScript:"createScript"}; -function wa(a,b,c,d){function g(t){a.c.call(a,this,c,d,p,0,[t])}let k=b,m,p;var n=oa(Node.prototype);do(p=(m=I(k,c))?m.set:null)||(k=oa(k)||n);while(!p&&k!==n&&k);if(!(p instanceof Function))throw new TypeError("No setter for property "+c+" on object"+b);n=X(b,c);if(a.b[n])throw Error(`TrustedTypesEnforcer: Double installation detected: ${n} ${c}`);k===b?w(b,c,{set:g}):w(b,c,{set:g,get:m.get,configurable:!0});a.b[n]=p} -function Y(a,b,c,d,g){Z(a,b,c,function(k,...m){return a.c.call(a,this,c,d,k,g,m)})}function Ca(a){Z(a,Element.prototype,"setAttribute",function(b,...c){return a.C.bind(a,this,b).apply(a,c)});Z(a,Element.prototype,"setAttributeNS",function(b,...c){return a.B.bind(a,this,b).apply(a,c)})} -function Da(a){["appendChild","insertBefore","replaceChild"].forEach(b=>{Z(a,Node.prototype,b,function(c,...d){return a.f.bind(a,this,!1,c).apply(a,d)})});Z(a,ta,"insertAdjacentText",function(b,...c){return a.s.bind(a,this,b).apply(a,c)});"after"in Element.prototype&&(["after","before","replaceWith"].forEach(b=>{Z(a,Element.prototype,b,function(c,...d){return a.f.bind(a,this,!0,c).apply(a,d)})}),["append","prepend"].forEach(b=>{Z(a,Element.prototype,b,function(c,...d){return a.f.bind(a,this,!1,c).apply(a, -d)})}))}function Ea(a){for(const b of na(N))for(const c of na(N[b].properties))wa(a,window["*"==b?"HTMLElement":M(document.createElement(b).constructor)].prototype,c,N[b].properties[c])} -function Fa(a){ka(a.a.c);if(a.a.a||a.a.b)"ShadowRoot"in window&&wa(a,ShadowRoot.prototype,"innerHTML",r.TrustedHTML),ra=function(b){return 0==b.createRange().createContextualFragment({toString:()=>"
"}).childNodes.length}(document),Y(a,Range.prototype,"createContextualFragment",r.TrustedHTML,0),Y(a,ta,"insertAdjacentHTML",r.TrustedHTML,1),I(Document.prototype,"write")?(Y(a,Document.prototype,"write",r.TrustedHTML,0),Y(a,Document.prototype,"open",r.TrustedURL,0)):(Y(a,HTMLDocument.prototype, +'use strict';function aa(a){const b=/\s+/;return a.trim().split(/\s*;\s*/).map(c=>c.split(b)).reduce(function(c,d){d[0]&&(c[d[0]]=d.slice(1).map(h=>h).sort());return c},{})}function ba(a){const b=aa(a),c="trusted-types"in b;let d=["*"];c&&(d=b["trusted-types"].filter(h=>"'"!==h.charAt(0)));return new ca(!0,c,d,a)}class ca{constructor(a,b,c,d=null){this.b=a;this.a=b;this.c=c;this.f=d}};const da=()=>{throw new TypeError("undefined conversion");},{toLowerCase:ea,toUpperCase:fa}=String.prototype;function ka(){throw new TypeError("Illegal constructor");}function g(){throw new TypeError("Illegal constructor");} +const {F:r,D:la}=function(){function a(e){let f=Q.get(e);void 0===f&&(f=m(null),Q.set(e,f));return f}function b(e){const f=ha(e);if(null==f||ha(f)!==ia)throw Error();for(const p of F(f))u(e,p,{value:e[p]});return e}function c(e,f){v(e.prototype);delete e.name;u(e,"name",{value:f})}function d(e){return f=>f instanceof e&&Q.has(f)}function h(e,f){function p(y,R){const xa=f[R]||da,ya=v(new y(S,e));return v({[R](z,...L){z=xa(""+z,...L);if(void 0===z||null===z)z="";z=""+z;L=v(m(ya));a(L).v=z;return L}}[R])} +const l=m(ka.prototype);for(const y of F(M))l[y]=p(M[y],y);u(l,"name",{value:e,writable:!1,configurable:!1,enumerable:!0});return v(l)}function k(e,f,p,l="",y=""){e=fa.apply(String(e));(l=y?y:l)||(l="http://www.w3.org/1999/xhtml");if(l=G.apply(w,[l])?w[l]:null){if(G.apply(l,[e])&&l[e]&&G.apply(l[e][f],[p])&&l[e][f][p])return l[e][f][p];if(G.apply(l,["*"])&&G.apply(l["*"][f],[p])&&l["*"][f][p])return l["*"][f][p]}}function n(){return N}const {assign:q,create:m,defineProperty:u,freeze:v,getOwnPropertyNames:F, +getPrototypeOf:ha,prototype:ia}=Object,{hasOwnProperty:G}=ia,{forEach:za,push:Aa}=Array.prototype,S=Symbol(),Q=b(new WeakMap),H=b([]),T=b([]);let N=null,U=!1;class I{constructor(e,f){if(e!==S)throw Error("cannot call the constructor");u(this,"policyName",{value:f,enumerable:!0})}toString(){return a(this).v}valueOf(){return a(this).v}}class t extends I{}c(t,"TrustedURL");class A extends I{}c(A,"TrustedScriptURL");class B extends I{}c(B,"TrustedHTML");class C extends I{}c(C,"TrustedScript");c(I,"TrustedType"); +const ja=v(m(new B(S,"")));a(ja).v="";const w={["http://www.w3.org/1999/xhtml"]:{A:{attributes:{href:t.name}},AREA:{attributes:{href:t.name}},BASE:{attributes:{href:t.name}},BUTTON:{attributes:{formaction:t.name}},EMBED:{attributes:{src:A.name}},FORM:{attributes:{action:t.name}},FRAME:{attributes:{src:t.name}},IFRAME:{attributes:{src:t.name,srcdoc:B.name}},INPUT:{attributes:{formaction:t.name}},OBJECT:{attributes:{data:A.name,codebase:A.name}},SCRIPT:{attributes:{src:A.name,text:C.name},properties:{innerText:C.name, +textContent:C.name,text:C.name}},"*":{attributes:{},properties:{innerHTML:B.name,outerHTML:B.name}}},["http://www.w3.org/1999/xlink"]:{"*":{attributes:{href:t.name},properties:{}}},["http://www.w3.org/2000/svg"]:{"*":{attributes:{href:t.name},properties:{}}}};var E={codebase:"codeBase",formaction:"formAction"};"srcdoc"in HTMLIFrameElement.prototype||delete w["http://www.w3.org/1999/xhtml"].IFRAME.attributes.srcdoc;for(const e of Object.keys(w["http://www.w3.org/1999/xhtml"])){w["http://www.w3.org/1999/xhtml"][e].properties|| +(w["http://www.w3.org/1999/xhtml"][e].properties={});for(const f of Object.keys(w["http://www.w3.org/1999/xhtml"][e].attributes))w["http://www.w3.org/1999/xhtml"][e].properties[E[f]?E[f]:f]=w["http://www.w3.org/1999/xhtml"][e].attributes[f]}for(const e of F(HTMLElement.prototype))"on"===e.slice(0,2)&&(w["http://www.w3.org/1999/xhtml"]["*"].attributes[e]="TrustedScript");const M={createHTML:B,createScriptURL:A,createURL:t,createScript:C},Ba=M.hasOwnProperty;E=m(g.prototype);q(E,{createPolicy:function(e, +f){if(U&&-1===T.indexOf(e))throw new TypeError("Policy "+e+" disallowed.");if(-1!==H.indexOf(e))throw new TypeError("Policy "+e+" exists.");H.push(e);const p=m(null);if(f&&"object"===typeof f)for(const l of F(f))Ba.call(M,l)&&(p[l]=f[l]);else console.warn("trustedTypes.createPolicy "+e+" was given an empty policy");v(p);f=h(e,p);"default"===e&&(N=f);return f},getPolicyNames:function(){return H.slice()},j:d(B),m:d(t),l:d(A),g:d(C),h:function(e,f,p="",l=""){f=ea.apply(String(f));return k(e,"attributes", +f,p,l)},w:function(e,f,p=""){return k(e,"properties",String(f),p)},i:function(e=""){if(!e)try{e=document.documentElement.namespaceURI}catch(f){e="http://www.w3.org/1999/xhtml"}return(e=w[e])?JSON.parse(JSON.stringify(e)):{}},s:ja,o:N,TrustedHTML:B,TrustedURL:t,TrustedScriptURL:A,TrustedScript:C});u(E,"defaultPolicy",{get:n,set:()=>{}});return{F:v(E),D:function(e){-1!==e.indexOf("*")?U=!1:(U=!0,T.length=0,za.call(e,f=>{Aa.call(T,""+f)}))},G:n,H:function(){N=null;H.splice(H.indexOf("default"),1)}}}();const {defineProperty:x}=Object;function ma(a,b,c){x(a,b,{value:c})};const {apply:D}=Reflect,{getOwnPropertyNames:na,getOwnPropertyDescriptor:J,getPrototypeOf:oa}=Object,{hasOwnProperty:K}=Object.prototype,{slice:pa}=String.prototype,qa="function"==typeof window.URL?URL.prototype.constructor:null;let ra; +const O=document.createElement("div").constructor.name?a=>a.name:a=>(""+a).match(/^\[object (\S+)\]$/)[1],sa=J(window,"open")?window:window.constructor.prototype,ta=D(K,Element.prototype,["insertAdjacentHTML"])?Element.prototype:HTMLElement.prototype,ua=window.SecurityPolicyViolationEvent||null,P=r.i("http://www.w3.org/1999/xhtml"),V={TrustedHTML:r.TrustedHTML,TrustedScript:r.TrustedScript,TrustedScriptURL:r.TrustedScriptURL,TrustedURL:r.TrustedURL}; +for(const a of Object.keys(P)){const b=P[a].properties;for(const [c,d]of Object.entries(b))b[c]=V[d]}const W={TrustedHTML:r.j,TrustedURL:r.m,TrustedScriptURL:r.l,TrustedScript:r.g},va={TrustedHTML:"createHTML",TrustedURL:"createURL",TrustedScriptURL:"createScriptURL",TrustedScript:"createScript"}; +function wa(a,b,c,d){function h(u){a.c.call(a,this,c,d,q,0,[u])}let k=b,n,q;var m=oa(Node.prototype);do(q=(n=J(k,c))?n.set:null)||(k=oa(k)||m);while(!q&&k!==m&&k);if(!(q instanceof Function))throw new TypeError("No setter for property "+c+" on object"+b);m=X(b,c);if(a.b[m])throw Error(`TrustedTypesEnforcer: Double installation detected: ${m} ${c}`);k===b?x(b,c,{set:h}):x(b,c,{set:h,get:n.get,configurable:!0});a.b[m]=q} +function Y(a,b,c,d,h){Z(a,b,c,function(k,...n){return a.c.call(a,this,c,d,k,h,n)})}function Ca(a){Z(a,Element.prototype,"setAttribute",function(b,...c){return a.C.bind(a,this,b).apply(a,c)});Z(a,Element.prototype,"setAttributeNS",function(b,...c){return a.B.bind(a,this,b).apply(a,c)})} +function Da(a){["appendChild","insertBefore","replaceChild"].forEach(b=>{Z(a,Node.prototype,b,function(c,...d){return a.f.bind(a,this,!1,c).apply(a,d)})});Z(a,ta,"insertAdjacentText",function(b,...c){return a.u.bind(a,this,b).apply(a,c)});"after"in Element.prototype&&(["after","before","replaceWith"].forEach(b=>{Z(a,Element.prototype,b,function(c,...d){return a.f.bind(a,this,!0,c).apply(a,d)})}),["append","prepend"].forEach(b=>{Z(a,Element.prototype,b,function(c,...d){return a.f.bind(a,this,!1,c).apply(a, +d)})}))}function Ea(a){for(const b of na(P))for(const c of na(P[b].properties))wa(a,window["*"==b?"HTMLElement":O(document.createElement(b).constructor)].prototype,c,P[b].properties[c])} +function Fa(a){la(a.a.c);if(a.a.a||a.a.b)"ShadowRoot"in window&&wa(a,ShadowRoot.prototype,"innerHTML",r.TrustedHTML),ra=function(b){return 0==b.createRange().createContextualFragment({toString:()=>"
"}).childNodes.length}(document),Y(a,Range.prototype,"createContextualFragment",r.TrustedHTML,0),Y(a,ta,"insertAdjacentHTML",r.TrustedHTML,1),J(Document.prototype,"write")?(Y(a,Document.prototype,"write",r.TrustedHTML,0),Y(a,Document.prototype,"open",r.TrustedURL,0)):(Y(a,HTMLDocument.prototype, "write",r.TrustedHTML,0),Y(a,HTMLDocument.prototype,"open",r.TrustedURL,0)),Y(a,sa,"open",r.TrustedURL,0),"DOMParser"in window&&Y(a,DOMParser.prototype,"parseFromString",r.TrustedHTML,0),Y(a,window,"setInterval",r.TrustedScript,0),Y(a,window,"setTimeout",r.TrustedScript,0),Ca(a),Da(a),Ea(a)} -function Z(a,b,c,d){var g=I(b,c);const k=g?g.value:null;if(!(k instanceof Function))throw new TypeError("Property "+c+" on object"+b+" is not a function");g=X(b,c);if(a.b[g])throw Error(`TrustedTypesEnforcer: Double installation detected: ${g} ${c}`);ma(b,c,function(...m){return d.bind(this,k).apply(this,m)});a.b[g]=k}function Ga(a,b,c=""){const d=la.call(r);if(!d)throw Error("Default policy does not exist");if(!W.hasOwnProperty(a))throw Error();return d[va[a]](b,c)} -function Ha(a,b,c,d,g){const k=M(b.constructor)||""+b,m=`Failed to set ${c} on ${k}: `+`This property requires ${d.name}.`;a.a.b&&console.warn(m,c,b,d,g);if("function"==typeof ua){let n="";if(d===r.TrustedURL||d===r.TrustedScriptURL){try{var p=new qa(g,document.baseURI||void 0)}catch(t){p=null}if(n=p||"")n=n.href}d=D(pa,g,[0,40]);c=new ua("securitypolicyviolation",{bubbles:!0,blockedURI:n,disposition:a.a.a?"enforce":"report",documentURI:document.location.href,effectiveDirective:"trusted-types",originalPolicy:a.a.f, -statusCode:0,violatedDirective:"trusted-types",sample:`${k}.${c} ${d}`});b instanceof Node&&b.isConnected?b.dispatchEvent(c):document.dispatchEvent(c)}if(a.a.a)throw new TypeError(m);}function X(a,b){return""+(a.constructor.name?a.constructor.name:a.constructor)+"-"+b} -class Ia{constructor(a){this.a=a;this.b={}}C(a,b,...c){if(null!==a.constructor&&a instanceof Element){var d=(c[0]=String(c[0])).toLowerCase();if((d=r.h(a.tagName,d,a.namespaceURI))&&D(J,V,[d]))return this.c(a,"setAttribute",V[d],b,1,c)}return D(b,a,c)}B(a,b,...c){if(null!==a.constructor&&a instanceof Element){var d=c[0]?String(c[0]):null;c[0]=d;const g=(c[1]=String(c[1])).toLowerCase();if((d=r.h(a.tagName,g,a.namespaceURI,d))&&D(J,V,[d]))return this.c(a,"setAttributeNS",V[d],b,2,c)}return D(b,a,c)}f(a, -b,c,...d){if((b?a.parentNode:a)instanceof HTMLScriptElement&&0} allowedPolicyNames Whitelisted policy names.\n * @param {?string} cspString String with the CSP policy.\n */\n constructor(isLoggingEnabled,\n isEnforcementEnabled,\n allowedPolicyNames,\n cspString = null) {\n /**\n * True if logging is enabled.\n * @type {boolean}\n */\n this.isLoggingEnabled = isLoggingEnabled;\n\n /**\n * True if enforcement is enabled.\n * @type {boolean}\n */\n this.isEnforcementEnabled = isEnforcementEnabled;\n\n /**\n * Allowed policy names.\n * @type {Array}\n */\n this.allowedPolicyNames = allowedPolicyNames;\n\n /**\n * CSP string that defined the policy.\n * @type {?string}\n */\n this.cspString = cspString;\n }\n\n /**\n * Parses a CSP policy.\n * @link https://www.w3.org/TR/CSP3/#parse-serialized-policy\n * @param {string} cspString String with a CSP definition.\n * @return {Object>} Parsed CSP, keyed by directive\n * names.\n */\n static parseCSP(cspString) {\n const SEMICOLON = /\\s*;\\s*/;\n const WHITESPACE = /\\s+/;\n return cspString.trim().split(SEMICOLON)\n .map((serializedDirective) => serializedDirective.split(WHITESPACE))\n .reduce(function(parsed, directive) {\n if (directive[0]) {\n parsed[directive[0]] = directive.slice(1).map((s) => s).sort();\n }\n return parsed;\n }, {});\n }\n\n /**\n * Creates a TrustedTypeConfig object from a CSP string.\n * @param {string} cspString\n * @return {!TrustedTypeConfig}\n */\n static fromCSP(cspString) {\n const isLoggingEnabled = true;\n const policy = TrustedTypeConfig.parseCSP(cspString);\n const enforce = DIRECTIVE_NAME in policy;\n let policies = ['*'];\n if (enforce) {\n policies = policy[DIRECTIVE_NAME].filter((p) => p.charAt(0) !== '\\'');\n }\n\n return new TrustedTypeConfig(\n isLoggingEnabled,\n enforce, /* isEnforcementEnabled */\n policies, /* allowedPolicyNames */\n cspString\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst {\n defineProperty,\n} = Object;\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n */\nexport function installSetter(object, name, setter) {\n const descriptor = {\n set: setter,\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs a setter and getter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n * @param {function(*): *|undefined} getter A getter function}\n */\nexport function installSetterAndGetter(object, name, setter, getter) {\n const descriptor = {\n set: setter,\n get: getter,\n configurable: true, // This can get uninstalled, we need configurable: true\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} fn A function}\n */\nexport function installFunction(object, name, fn) {\n defineProperty(object, name, {\n value: fn,\n });\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/* eslint-disable no-unused-vars */\nimport {DIRECTIVE_NAME, TrustedTypeConfig} from './data/trustedtypeconfig.js';\nimport {\n trustedTypes as TrustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n HTML_NS,\n} from\n './trustedtypes.js';\n\n/* eslint-enable no-unused-vars */\nimport {installFunction, installSetter, installSetterAndGetter}\n from './utils/wrapper.js';\n\nconst {apply} = Reflect;\nconst {\n getOwnPropertyNames,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n} = Object;\n\nconst {\n hasOwnProperty,\n isPrototypeOf,\n} = Object.prototype;\n\nconst {slice} = String.prototype;\n\n// No URL in IE 11.\nconst UrlConstructor = typeof window.URL == 'function' ?\n URL.prototype.constructor :\n null;\n\nlet stringifyForRangeHack;\n\n/**\n * Return object constructor name\n * (their function.name is not available in IE 11).\n * @param {*} fn\n * @return {string}\n * @private\n */\nconst getConstructorName_ = document.createElement('div').constructor.name ?\n (fn) => fn.name :\n (fn) => ('' + fn).match(/^\\[object (\\S+)\\]$/)[1];\n\n// window.open on IE 11 is set on WindowPrototype\nconst windowOpenObject = getOwnPropertyDescriptor(window, 'open') ?\n window :\n window.constructor.prototype;\n\n// In IE 11, insertAdjacent(HTML|Text) is on HTMLElement prototype\nconst insertAdjacentObject = apply(hasOwnProperty, Element.prototype,\n ['insertAdjacentHTML']) ? Element.prototype : HTMLElement.prototype;\n\n// This is not available in release Firefox :(\n// https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1432523\nconst SecurityPolicyViolationEvent = window['SecurityPolicyViolationEvent'] ||\n null;\n\n/**\n * Parses URL, catching all the errors.\n * @param {string} url URL string to parse.\n * @return {URL|null}\n */\nfunction parseUrl_(url) {\n try {\n return new UrlConstructor(url, document.baseURI || undefined);\n } catch (e) {\n return null;\n }\n}\n\n// We don't actually need other namespaces.\n// setAttribute is hooked on Element.prototype, which all elements inherit from,\n// and all sensitive property wrappers are hooked directly on Element as well.\nconst typeMap = TrustedTypes.getTypeMapping(HTML_NS);\n\nconst STRING_TO_TYPE = {\n 'TrustedHTML': TrustedTypes.TrustedHTML,\n 'TrustedScript': TrustedTypes.TrustedScript,\n 'TrustedScriptURL': TrustedTypes.TrustedScriptURL,\n 'TrustedURL': TrustedTypes.TrustedURL,\n};\n\n/**\n * Converts an uppercase tag name to an element constructor function name.\n * Used for property setter hijacking only.\n * @param {string} tagName\n * @return {string}\n */\nfunction convertTagToConstructor(tagName) {\n if (tagName == '*') {\n return 'HTMLElement';\n }\n return getConstructorName_(document.createElement(tagName).constructor);\n}\n\nfor (const tagName of Object.keys(typeMap)) {\n const attrs = typeMap[tagName]['properties'];\n for (const [k, v] of Object.entries(attrs)) {\n attrs[k] = STRING_TO_TYPE[v];\n }\n}\n\n/**\n * Map of type names to type checking function.\n * @type {!Object}\n */\nconst TYPE_CHECKER_MAP = {\n 'TrustedHTML': TrustedTypes.isHTML,\n 'TrustedURL': TrustedTypes.isURL,\n 'TrustedScriptURL': TrustedTypes.isScriptURL,\n 'TrustedScript': TrustedTypes.isScript,\n};\n\n/**\n * Map of type names to type producing function.\n * @type {Object}\n */\nconst TYPE_PRODUCER_MAP = {\n 'TrustedHTML': 'createHTML',\n 'TrustedURL': 'createURL',\n 'TrustedScriptURL': 'createScriptURL',\n 'TrustedScript': 'createScript',\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypePolicy}\n * @property {function(string):TrustedHTML} createHTML\n * @property {function(string):TrustedURL} createURL\n * @property {function(string):TrustedScriptURL} createScriptURL\n * @property {function(string):TrustedScript} createScript\n */\nconst TrustedTypePolicy = {};\n/* eslint-enable no-unused-vars */\n\n\n/**\n * An object for enabling trusted type enforcement.\n */\nexport class TrustedTypesEnforcer {\n /**\n * @param {!TrustedTypeConfig} config The configuration for\n * trusted type enforcement.\n */\n constructor(config) {\n /**\n * A configuration for the trusted type enforcement.\n * @private {!TrustedTypeConfig}\n */\n this.config_ = config;\n /**\n * @private {Object}\n */\n this.originalSetters_ = {};\n }\n\n /**\n * Wraps HTML sinks with an enforcement setter, which will enforce\n * trusted types and do logging, if enabled.\n *\n */\n install() {\n setAllowedPolicyNames(this.config_.allowedPolicyNames);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.wrapSetter_(ShadowRoot.prototype, 'innerHTML',\n TrustedTypes.TrustedHTML);\n }\n stringifyForRangeHack = (function(doc) {\n const r = doc.createRange();\n // In IE 11 Range.createContextualFragment doesn't stringify its argument.\n const f = r.createContextualFragment(/** @type {string} */ (\n {toString: () => '
'}));\n return f.childNodes.length == 0;\n })(document);\n\n this.wrapWithEnforceFunction_(Range.prototype, 'createContextualFragment',\n TrustedTypes.TrustedHTML, 0);\n\n this.wrapWithEnforceFunction_(insertAdjacentObject,\n 'insertAdjacentHTML',\n TrustedTypes.TrustedHTML, 1);\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n // Chrome\n this.wrapWithEnforceFunction_(Document.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(Document.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n } else {\n // Firefox\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n }\n\n this.wrapWithEnforceFunction_(windowOpenObject, 'open',\n TrustedTypes.TrustedURL, 0);\n\n if ('DOMParser' in window) {\n this.wrapWithEnforceFunction_(DOMParser.prototype, 'parseFromString',\n TrustedTypes.TrustedHTML, 0);\n }\n this.wrapWithEnforceFunction_(window, 'setInterval',\n TrustedTypes.TrustedScript, 0);\n this.wrapWithEnforceFunction_(window, 'setTimeout',\n TrustedTypes.TrustedScript, 0);\n this.wrapSetAttribute_();\n this.installScriptMutatorGuards_();\n this.installPropertySetWrappers_();\n }\n\n /**\n * Removes the original setters.\n */\n uninstall() {\n setAllowedPolicyNames(['*']);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.restoreSetter_(ShadowRoot.prototype, 'innerHTML');\n }\n this.restoreFunction_(Range.prototype, 'createContextualFragment');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentHTML');\n this.restoreFunction_(Element.prototype, 'setAttribute');\n this.restoreFunction_(Element.prototype, 'setAttributeNS');\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n this.restoreFunction_(Document.prototype, 'write');\n this.restoreFunction_(Document.prototype, 'open');\n } else {\n this.restoreFunction_(HTMLDocument.prototype, 'write');\n this.restoreFunction_(HTMLDocument.prototype, 'open');\n }\n this.restoreFunction_(windowOpenObject, 'open');\n\n if ('DOMParser' in window) {\n this.restoreFunction_(DOMParser.prototype, 'parseFromString');\n }\n this.restoreFunction_(window, 'setTimeout');\n this.restoreFunction_(window, 'setInterval');\n this.uninstallPropertySetWrappers_();\n this.uninstallScriptMutatorGuards_();\n resetDefaultPolicy();\n }\n\n /**\n * Installs type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n installScriptMutatorGuards_() {\n const that = this;\n\n ['appendChild', 'insertBefore', 'replaceChild'].forEach((fnName) => {\n this.wrapFunction_(\n Node.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n this.wrapFunction_(\n insertAdjacentObject,\n 'insertAdjacentText',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.insertAdjacentTextWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ true, originalFn)\n .apply(that, args);\n });\n });\n ['append', 'prepend'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n }\n }\n\n /**\n * Uninstalls type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n uninstallScriptMutatorGuards_() {\n this.restoreFunction_(Node.prototype, 'appendChild');\n this.restoreFunction_(Node.prototype, 'insertBefore');\n this.restoreFunction_(Node.prototype, 'replaceChild');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentText');\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith', 'append', 'prepend'].forEach(\n (fnName) => this.restoreFunction_(Element.prototype, fnName));\n }\n }\n\n /**\n * Installs wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n installPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.wrapSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property,\n typeMap[tag]['properties'][property]);\n }\n }\n }\n\n /**\n * Uninstalls wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n uninstallPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.restoreSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property);\n }\n }\n }\n\n /** Wraps set attribute with an enforcement function. */\n wrapSetAttribute_() {\n const that = this;\n this.wrapFunction_(\n Element.prototype,\n 'setAttribute',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n this.wrapFunction_(\n Element.prototype,\n 'setAttributeNS',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeNSWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttribute.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttribute function.\n * @return {*}\n */\n setAttributeWrapper_(context, originalFn, ...args) {\n // Note(slekies): In a normal application constructor should never be null.\n // However, there are no guarantees. If the constructor is null, we cannot\n // determine whether a special type is required. In order to not break the\n // application, we will not do any further type checks and pass the call\n // to setAttribute.\n if (context.constructor !== null && context instanceof Element) {\n const attrName = (args[0] = String(args[0])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(\n context, 'setAttribute', STRING_TO_TYPE[requiredType],\n originalFn, 1, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttributeNS.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttributeNS function.\n * @return {*}\n */\n setAttributeNSWrapper_(context, originalFn, ...args) {\n // See the note from setAttributeWrapper_ above.\n if (context.constructor !== null && context instanceof Element) {\n const ns = args[0] ? String(args[0]) : null;\n args[0] = ns;\n const attrName = (args[1] = String(args[1])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI, ns);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(context, 'setAttributeNS',\n STRING_TO_TYPE[requiredType],\n originalFn, 2, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for DOM mutator functions that enforces type checks if the context\n * (or, optionally, its parent node) is a script node.\n * For each argument, it will make sure that text nodes pass through a\n * default policy, or generate a violation. To skip that check, pass\n * TrustedScript objects instead.\n * @param {!Object} context The context for the call to the original function.\n * @param {boolean} checkParent Check parent of context instead.\n * @param {!Function} originalFn The original mutator function.\n * @return {*}\n */\n enforceTypeInScriptNodes_(context, checkParent, originalFn, ...args) {\n const objToCheck = checkParent ? context.parentNode : context;\n if (objToCheck instanceof HTMLScriptElement && args.length > 0) {\n for (let argNumber = 0; argNumber < args.length; argNumber++) {\n let arg = args[argNumber];\n if (arg instanceof Node && arg.nodeType !== Node.TEXT_NODE) {\n continue; // Type is not interesting\n }\n if (arg instanceof Node && arg.nodeType == Node.TEXT_NODE) {\n arg = arg.textContent;\n } else if (TrustedTypes.isScript(arg)) {\n // TODO(koto): Consider removing this branch, as it's hard to spec.\n // Convert to text node and go on.\n args[argNumber] = document.createTextNode(arg);\n continue;\n }\n\n // Try to run a default policy on argsthe argument\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n 'TrustedScript', arg, 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, originalFn.name,\n TrustedTypes.TrustedScript, arg);\n }\n args[argNumber] = document.createTextNode('' + fallbackValue);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for Element.insertAdjacentText that enforces type checks for\n * inserting text into a script node.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original insertAdjacentText function.\n */\n insertAdjacentTextWrapper_(context, originalFn, ...args) {\n const riskyPositions = ['beforebegin', 'afterend'];\n if (context instanceof Element &&\n context.parentElement instanceof HTMLScriptElement &&\n args.length > 1 &&\n riskyPositions.includes(args[0]) &&\n !(TrustedTypes.isScript(args[1]))) {\n // Run a default policy on args[1]\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_('TrustedScript',\n args[1], 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, 'insertAdjacentText',\n TrustedTypes.TrustedScript, args[1]);\n }\n\n const textNode = document.createTextNode('' + fallbackValue);\n\n\n const insertBefore = /** @type function(this: Node) */(\n this.originalSetters_[this.getKey_(Node.prototype, 'insertBefore')]);\n\n switch (args[0]) {\n case riskyPositions[0]: // 'beforebegin'\n apply(insertBefore, context.parentElement,\n [textNode, context]);\n break;\n case riskyPositions[1]: // 'afterend'\n apply(insertBefore, context.parentElement,\n [textNode, context.nextSibling]);\n break;\n }\n return;\n }\n apply(originalFn, context, args);\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {number} argNumber Number of the argument to enforce the type of.\n * @private\n */\n wrapWithEnforceFunction_(object, name, type, argNumber) {\n const that = this;\n this.wrapFunction_(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforce_.call(that, this, name, type, originalFn,\n argNumber, args);\n });\n }\n\n\n /**\n * Wraps an existing function with a given function body and stores the\n * original function.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {function(!Function, ...*)} functionBody The wrapper function.\n */\n wrapFunction_(object, name, functionBody) {\n const descriptor = getOwnPropertyDescriptor(object, name);\n const originalFn = /** @type function(*):* */ (\n descriptor ? descriptor.value : null);\n\n if (!(originalFn instanceof Function)) {\n throw new TypeError(\n 'Property ' + name + ' on object' + object + ' is not a function');\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n installFunction(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @return {*}\n */\n function(...args) {\n return functionBody.bind(this, originalFn).apply(this, args);\n });\n this.originalSetters_[key] = originalFn;\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {!Object=} descriptorObject If present, will reuse the\n * setter/getter from this one, instead of object. Used for redefining\n * setters in subclasses.\n * @private\n */\n wrapSetter_(object, name, type, descriptorObject = undefined) {\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n\n let useObject = descriptorObject || object;\n let descriptor;\n let originalSetter;\n const stopAt = getPrototypeOf(Node.prototype);\n\n // Find the descriptor on the object or its prototypes, stopping at Node.\n do {\n descriptor = getOwnPropertyDescriptor(useObject, name);\n originalSetter = /** @type {function(*):*} */ (descriptor ?\n descriptor.set : null);\n if (!originalSetter) {\n useObject = getPrototypeOf(useObject) || stopAt;\n }\n } while (!(originalSetter || useObject === stopAt || !useObject));\n\n if (!(originalSetter instanceof Function)) {\n throw new TypeError(\n 'No setter for property ' + name + ' on object' + object);\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n const that = this;\n /**\n * @this {TrustedTypesEnforcer}\n * @param {*} value\n */\n const enforcingSetter = function(value) {\n that.enforce_.call(that, this, name, type, originalSetter, 0,\n [value]);\n };\n\n if (useObject === object) {\n installSetter(\n object,\n name,\n enforcingSetter);\n } else {\n // Since we're creating a new setter in subclass, we also need to\n // overwrite the getter.\n installSetterAndGetter(\n object,\n name,\n enforcingSetter,\n descriptor.get\n );\n }\n this.originalSetters_[key] = originalSetter;\n }\n\n /**\n * Restores the original setter for the property, as encountered during\n * install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Object=} descriptorObject If present, will restore the original\n * setter/getter from this one, instead of object.\n * @private\n */\n restoreSetter_(object, name, descriptorObject = undefined) {\n const key = this.getKey_(object, name);\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n if (descriptorObject) {\n // We have to also overwrite a getter.\n installSetterAndGetter(object, name, this.originalSetters_[key],\n getOwnPropertyDescriptor(descriptorObject, name).get);\n } else {\n installSetter(object, name, this.originalSetters_[key]);\n }\n delete this.originalSetters_[key];\n }\n\n /**\n * Restores the original method of an object, as encountered during install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @private\n */\n restoreFunction_(object, name) {\n const key = this.getKey_(object, name);\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n installFunction(object, name, this.originalSetters_[key]);\n delete this.originalSetters_[key];\n }\n\n /**\n * Returns the key name for caching original setters.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @return {string} Key name.\n * @private\n */\n getKey_(object, name) {\n // TODO(msamuel): Can we use Object.prototype.toString.call(object)\n // to get an unspoofable string here?\n // TODO(msamuel): fail on '-' in object.constructor.name?\n // No Function.name in IE 11\n const ctrName = '' + (\n object.constructor.name ?\n object.constructor.name :\n object.constructor);\n return ctrName + '-' + name;\n }\n\n\n /**\n * Calls a default policy.\n * @param {string} typeName Type name to attempt to produce from a value.\n * @param {*} value The value to pass to a default policy\n * @param {string} sink The sink name that the default policy will be called\n * with.\n * @throws {Error} If the default policy throws, or not exist.\n * @return {Function} The trusted value.\n */\n maybeCallDefaultPolicy_(typeName, value, sink = '') {\n // Apply a fallback policy, if it exists.\n const fallbackPolicy = getDefaultPolicy.call(TrustedTypes);\n if (!fallbackPolicy) {\n throw new Error('Default policy does not exist');\n }\n if (!TYPE_CHECKER_MAP.hasOwnProperty(typeName)) {\n throw new Error();\n }\n return fallbackPolicy[TYPE_PRODUCER_MAP[typeName]](value, '' + sink);\n }\n\n /**\n * Logs and enforces TrustedTypes depending on the given configuration.\n * @template T\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {function(?):T} originalSetter Original setter.\n * @param {number} argNumber Number of argument to enforce the type of.\n * @param {Array} args Arguments.\n * @return {T}\n * @private\n */\n enforce_(context, propertyName, typeToEnforce, originalSetter, argNumber,\n args) {\n const value = args[argNumber];\n const typeName = '' + typeToEnforce.name;\n // If typed value is given, pass through.\n if (TYPE_CHECKER_MAP.hasOwnProperty(typeName) &&\n TYPE_CHECKER_MAP[typeName](value)) {\n if (stringifyForRangeHack &&\n propertyName == 'createContextualFragment') {\n // IE 11 hack, somehow the value is not stringified implicitly.\n args[argNumber] = args[argNumber].toString();\n }\n return apply(originalSetter, context, args);\n }\n\n if (typeToEnforce === TrustedTypes.TrustedScript) {\n const isInlineEventHandler =\n propertyName == 'setAttribute' ||\n propertyName === 'setAttributeNS' ||\n apply(slice, propertyName, [0, 2]) === 'on';\n // If a function (instead of string) is passed to inline event attribute,\n // or set(Timeout|Interval), pass through.\n const propertyAcceptsFunctions =\n propertyName === 'setInterval' ||\n propertyName === 'setTimeout' ||\n isInlineEventHandler;\n if ((propertyAcceptsFunctions && typeof value === 'function') ||\n (isInlineEventHandler && value === null)) {\n return apply(originalSetter, context, args);\n }\n }\n\n // Apply a fallback policy, if it exists.\n let fallbackValue;\n let exceptionThrown;\n const objName = context instanceof Element ?\n context.localName :\n getConstructorName_(context ? context.constructor : window.constructor);\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n typeName, value, objName + '.' + propertyName);\n } catch (e) {\n exceptionThrown = true;\n }\n if (!exceptionThrown) {\n args[argNumber] = fallbackValue;\n return apply(originalSetter, context, args);\n }\n\n // This will throw a TypeError if enforcement is enabled.\n this.processViolation_(context, propertyName, typeToEnforce, value);\n\n return apply(originalSetter, context, args);\n }\n\n /**\n * Report a TT violation.\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {string} value The value that was violated the restrictions.\n * @throws {TypeError} if the enforcement is enabled.\n */\n processViolation_(context, propertyName, typeToEnforce, value) {\n const contextName = getConstructorName_(context.constructor) ||\n '' + context;\n const message = `Failed to set ${propertyName} on ${contextName}: `\n + `This property requires ${typeToEnforce.name}.`;\n\n if (this.config_.isLoggingEnabled) {\n // eslint-disable-next-line no-console\n console.warn(message, propertyName, context, typeToEnforce, value);\n }\n\n // Unconditionally dispatch an event.\n if (typeof SecurityPolicyViolationEvent == 'function') {\n let blockedURI = '';\n if (typeToEnforce === TrustedTypes.TrustedURL ||\n typeToEnforce === TrustedTypes.TrustedScriptURL) {\n blockedURI = parseUrl_(value) || '';\n if (blockedURI) {\n blockedURI = blockedURI.href;\n }\n }\n const valueSlice = apply(slice, '' + value, [0, 40]);\n const event = new SecurityPolicyViolationEvent(\n 'securitypolicyviolation',\n {\n 'bubbles': true,\n 'blockedURI': blockedURI,\n 'disposition': this.config_.isEnforcementEnabled ?\n 'enforce' : 'report',\n 'documentURI': document.location.href,\n 'effectiveDirective': DIRECTIVE_NAME,\n 'originalPolicy': this.config_.cspString,\n 'statusCode': 0,\n 'violatedDirective': DIRECTIVE_NAME,\n 'sample': `${contextName}.${propertyName} ${valueSlice}`,\n });\n if (context instanceof Node && context.isConnected) {\n context.dispatchEvent(event);\n } else { // Fallback - dispatch an event on base document.\n document.dispatchEvent(event);\n }\n }\n\n if (this.config_.isEnforcementEnabled) {\n throw new TypeError(message);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that enforces the types.\n */\nimport {TrustedTypesEnforcer} from '../enforcer.js';\nimport {TrustedTypeConfig} from '../data/trustedtypeconfig.js';\n/* eslint-disable no-unused-vars */\nimport TrustedTypes from './api_only.js';\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Tries to guess a CSP policy from:\n * - the current polyfill script element text content (if prefixed with\n * \"Content-Security-Policy:\")\n * - the data-csp attribute value of the current script element.\n * - meta header\n * @return {?string} Guessed CSP value, or null.\n */\nfunction detectPolicy() {\n try {\n const currentScript = document.currentScript || (function() {\n const scripts = document.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n })();\n\n const bodyPrefix = 'Content-Security-Policy:';\n if (currentScript &&\n currentScript.textContent.trim().substr(0, bodyPrefix.length) ==\n bodyPrefix) {\n return currentScript.textContent.trim().slice(bodyPrefix.length);\n }\n if (currentScript.dataset['csp']) {\n return currentScript.dataset['csp'];\n }\n const cspInMeta = document.head.querySelector(\n 'meta[http-equiv^=\"Content-Security-Policy\"]');\n if (cspInMeta) {\n return cspInMeta['content'].trim();\n }\n } catch (e) {\n return null;\n }\n return null;\n}\n\n/**\n * Bootstraps all trusted types polyfill and their enforcement.\n */\nexport function bootstrap() {\n const csp = detectPolicy();\n const config = csp ? TrustedTypeConfig.fromCSP(csp) : new TrustedTypeConfig(\n /* isLoggingEnabled */ false,\n /* isEnforcementEnabled */ false,\n /* allowedPolicyNames */ ['*']);\n\n const trustedTypesEnforcer = new TrustedTypesEnforcer(config);\n\n trustedTypesEnforcer.install();\n}\n\n/**\n * Determines if the enforcement should be enabled.\n * @return {boolean}\n */\nfunction shouldBootstrap() {\n for (const rootProperty of ['trustedTypes', 'TrustedTypes']) {\n if (window[rootProperty] && !window[rootProperty]['_isPolyfill_']) {\n // Native implementation exists\n return false;\n }\n }\n return true;\n}\n\n// Bootstrap only if native implementation is missing.\nif (shouldBootstrap()) {\n bootstrap();\n}\n"]} \ No newline at end of file +{"version":3,"sources":["src/data/trustedtypeconfig.js","src/trustedtypes.js","src/utils/wrapper.js","src/enforcer.js","src/polyfill/api_only.js","src/polyfill/full.js"],"names":["parseCSP","cspString","WHITESPACE","trim","split","SEMICOLON","map","serializedDirective","reduce","parsed","directive","slice","s","sort","fromCSP","policy","TrustedTypeConfig$$module$src$data$trustedtypeconfig.parseCSP","enforce","DIRECTIVE_NAME","policies","filter","p","charAt","TrustedTypeConfig","isLoggingEnabled","isEnforcementEnabled","allowedPolicyNames","rejectInputFn","TypeError","toLowerCase","toUpperCase","String","prototype","TrustedTypePolicy","TrustedTypePolicyFactory","trustedTypes","setAllowedPolicyNames","trustedTypesBuilderTestOnly","privates","obj","v","privateMap","get","undefined","create","set","selfContained","collection","proto","getPrototypeOf","ObjectPrototype","Error","key","getOwnPropertyNames","defineProperty","value","lockdownTrustedType","SubClass","canonName","freeze","name","isTrustedTypeChecker","type","has","wrapPolicy","policyName","innerPolicy","creator","Ctor","methodName","method","policySpecificType","creatorSymbol","args","result","allowedValue","o","factory","createTypeMapping","writable","configurable","enumerable","getTypeInternal_","tag","container","elNs","attrNs","canonicalTag","apply","ns","HTML_NS","hasOwnProperty","TYPE_MAP","getDefaultPolicy","defaultPolicy","assign","Object","forEach","push","Array","Symbol","WeakMap","policyNames","allowedNames","enforceNameWhitelist","TrustedType","TrustedURL","TrustedScriptURL","TrustedHTML","TrustedScript","emptyHTML","XLINK_NS","SVG_NS","ATTR_PROPERTY_MAP","HTMLIFrameElement","keys","attr","HTMLElement","createFunctionAllowed","api","createPolicy","indexOf","call","console","warn","wrappedPolicy","DEFAULT_POLICY_NAME","getPolicyNames","isHTML","isURL","isScriptURL","isScript","getAttributeType","tagName","attribute","elementNs","attributeNs","canonicalAttr","getPropertyType","property","getTypeMapping","namespaceUri","document","documentElement","namespaceURI","e","JSON","parse","stringify","length","el","resetDefaultPolicy","splice","installFunction","object","fn","Reflect","getOwnPropertyDescriptor","UrlConstructor","window","URL","constructor","stringifyForRangeHack","getConstructorName_","createElement","match","windowOpenObject","insertAdjacentObject","Element","SecurityPolicyViolationEvent","typeMap","TrustedTypes","STRING_TO_TYPE","attrs","k","entries","TYPE_CHECKER_MAP","TYPE_PRODUCER_MAP","wrapSetter_","enforcingSetter","that","enforce_","originalSetter","useObject","descriptor","stopAt","Node","Function","getKey_","originalSetters_","wrapWithEnforceFunction_","argNumber","wrapFunction_","originalFn","wrapSetAttribute_","setAttributeWrapper_","bind","setAttributeNSWrapper_","installScriptMutatorGuards_","fnName","enforceTypeInScriptNodes_","insertAdjacentTextWrapper_","installPropertySetWrappers_","install","config_","ShadowRoot","doc","createRange","r","createContextualFragment","f","toString","childNodes","Range","Document","HTMLDocument","DOMParser","functionBody","maybeCallDefaultPolicy_","typeName","sink","fallbackPolicy","processViolation_","context","propertyName","typeToEnforce","contextName","message","blockedURI","baseURI","href","valueSlice","event","location","isConnected","dispatchEvent","TrustedTypesEnforcer","config","attrName","requiredType","checkParent","objToCheck","parentNode","HTMLScriptElement","arg","nodeType","TEXT_NODE","textContent","createTextNode","fallbackValue","exceptionThrown","riskyPositions","parentElement","includes","textNode","insertBefore","nextSibling","isInlineEventHandler","objName","localName","publicApi","tt","detectPolicy","currentScript","scripts","getElementsByTagName","bodyPrefix","substr","dataset","cspInMeta","head","querySelector","rootProperty","csp","TrustedTypeConfig$$module$src$data$trustedtypeconfig.fromCSP","trustedTypesEnforcer"],"mappings":"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","file":"trustedtypes.build.js","sourcesContent":["/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * CSP Directive name controlling Trusted Types behavior.\n * @type {string}\n */\nexport const DIRECTIVE_NAME = 'trusted-types';\n\n/**\n * A configuration object for trusted type enforcement.\n */\nexport class TrustedTypeConfig {\n /**\n * @param {boolean} isLoggingEnabled If true enforcement wrappers will log\n * violations to the console.\n * @param {boolean} isEnforcementEnabled If true enforcement is enabled at\n * runtime.\n * @param {Array} allowedPolicyNames Whitelisted policy names.\n * @param {?string} cspString String with the CSP policy.\n */\n constructor(isLoggingEnabled,\n isEnforcementEnabled,\n allowedPolicyNames,\n cspString = null) {\n /**\n * True if logging is enabled.\n * @type {boolean}\n */\n this.isLoggingEnabled = isLoggingEnabled;\n\n /**\n * True if enforcement is enabled.\n * @type {boolean}\n */\n this.isEnforcementEnabled = isEnforcementEnabled;\n\n /**\n * Allowed policy names.\n * @type {Array}\n */\n this.allowedPolicyNames = allowedPolicyNames;\n\n /**\n * CSP string that defined the policy.\n * @type {?string}\n */\n this.cspString = cspString;\n }\n\n /**\n * Parses a CSP policy.\n * @link https://www.w3.org/TR/CSP3/#parse-serialized-policy\n * @param {string} cspString String with a CSP definition.\n * @return {Object>} Parsed CSP, keyed by directive\n * names.\n */\n static parseCSP(cspString) {\n const SEMICOLON = /\\s*;\\s*/;\n const WHITESPACE = /\\s+/;\n return cspString.trim().split(SEMICOLON)\n .map((serializedDirective) => serializedDirective.split(WHITESPACE))\n .reduce(function(parsed, directive) {\n if (directive[0]) {\n parsed[directive[0]] = directive.slice(1).map((s) => s).sort();\n }\n return parsed;\n }, {});\n }\n\n /**\n * Creates a TrustedTypeConfig object from a CSP string.\n * @param {string} cspString\n * @return {!TrustedTypeConfig}\n */\n static fromCSP(cspString) {\n const isLoggingEnabled = true;\n const policy = TrustedTypeConfig.parseCSP(cspString);\n const enforce = DIRECTIVE_NAME in policy;\n let policies = ['*'];\n if (enforce) {\n policies = policy[DIRECTIVE_NAME].filter((p) => p.charAt(0) !== '\\'');\n }\n\n return new TrustedTypeConfig(\n isLoggingEnabled,\n enforce, /* isEnforcementEnabled */\n policies, /* allowedPolicyNames */\n cspString\n );\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst rejectInputFn = (s) => {\n throw new TypeError('undefined conversion');\n};\n\nconst {toLowerCase, toUpperCase} = String.prototype;\n\nexport const HTML_NS = 'http://www.w3.org/1999/xhtml';\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink';\nexport const SVG_NS = 'http://www.w3.org/2000/svg';\n\n/**\n * @constructor\n * @property {!function(string):TrustedHTML} createHTML\n * @property {!function(string):TrustedURL} createURL\n * @property {!function(string):TrustedScriptURL} createScriptURL\n * @property {!function(string):TrustedScript} createScript\n * @property {!string} name\n */\nexport const TrustedTypePolicy = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/**\n * @constructor\n */\nexport const TrustedTypePolicyFactory = function() {\n throw new TypeError('Illegal constructor');\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypesInnerPolicy}\n * @property {function(string):string} createHTML\n * @property {function(string):string} createURL\n * @property {function(string):string} createScriptURL\n * @property {function(string):string} createScript\n */\nconst TrustedTypesInnerPolicy = {};\n\n/**\n * @typedef {!Object,\n * properties: !Object}>}\n */\nconst TrustedTypesTypeMap = {};\n/* eslint-enable no-unused-vars */\n\nexport const DEFAULT_POLICY_NAME = 'default';\n\n\nexport const trustedTypesBuilderTestOnly = function() {\n // Capture common names early.\n const {\n assign, create, defineProperty, freeze, getOwnPropertyNames,\n getPrototypeOf, prototype: ObjectPrototype,\n } = Object;\n\n const {hasOwnProperty} = ObjectPrototype;\n\n const {\n forEach, push,\n } = Array.prototype;\n\n const creatorSymbol = Symbol();\n\n /**\n * Getter for the privateMap.\n * @param {Object} obj Key of the privateMap\n * @return {Object} Private storage.\n */\n const privates = function(obj) {\n let v = privateMap.get(obj);\n if (v === undefined) {\n v = create(null); // initialize the private storage.\n privateMap.set(obj, v);\n }\n return v;\n };\n\n /**\n * Called before attacker-controlled code on an internal collections,\n * copies prototype members onto the instance directly, so that later\n * changes to prototypes cannot expose collection internals.\n * @param {!T} collection\n * @return {!T} collection\n * @template T\n */\n function selfContained(collection) {\n const proto = getPrototypeOf(collection);\n if (proto == null || getPrototypeOf(proto) !== ObjectPrototype) {\n throw new Error(); // Loop below is insufficient.\n }\n for (const key of getOwnPropertyNames(proto)) {\n defineProperty(collection, key, {value: collection[key]});\n }\n return collection;\n }\n\n /**\n * Map for private properties of Trusted Types object.\n * This is so that the access to the type constructor does not give\n * the ability to create typed values.\n * @type {WeakMap}\n */\n const privateMap = selfContained(new WeakMap());\n\n /**\n * List of all configured policy names.\n * @type {Array}\n */\n const policyNames = selfContained([]);\n\n /**\n * Allowed policy namess for policy names.\n * @type {Array}\n */\n const allowedNames = selfContained([]);\n\n /**\n * A reference to a default policy, if created.\n * @type {TrustedTypePolicy}\n */\n let defaultPolicy = null;\n\n /**\n * Whether to enforce allowedNames in createPolicy().\n * @type {boolean}\n */\n let enforceNameWhitelist = false;\n\n\n /**\n * A value that is trusted to have certain security-relevant properties\n * because the sources of such values are controlled.\n */\n class TrustedType {\n /**\n * Constructor for TrustedType. Only allowed to be called from within a\n * policy.\n * @param {symbol} s creatorSymbol\n * @param {string} policyName The name of the policy this object was\n * created by.\n */\n constructor(s, policyName) {\n // TODO: Figure out if symbol is needed, if the value is in privateMap.\n if (s !== creatorSymbol) {\n throw new Error('cannot call the constructor');\n }\n defineProperty(this, 'policyName',\n {value: '' + policyName, enumerable: true});\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n toString() {\n return privates(this)['v'];\n }\n\n /**\n * Returns the wrapped string value of the object.\n * @return {string}\n * @override\n */\n valueOf() {\n return privates(this)['v'];\n }\n }\n\n /**\n * @param {function(new:TrustedType, symbol, string)} SubClass\n * @param {string} canonName The class name which should be independent of\n * any renaming pass and which is relied upon by the enforcer and for\n * native type interop.\n */\n function lockdownTrustedType(SubClass, canonName) {\n freeze(SubClass.prototype);\n delete SubClass.name;\n defineProperty(SubClass, 'name', {value: canonName});\n }\n\n /**\n * Trusted URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedURL extends TrustedType {\n }\n lockdownTrustedType(TrustedURL, 'TrustedURL');\n\n /**\n * Trusted Script URL object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScriptURL extends TrustedType {\n }\n lockdownTrustedType(TrustedScriptURL, 'TrustedScriptURL');\n\n /**\n * Trusted HTML object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedHTML extends TrustedType {\n }\n lockdownTrustedType(TrustedHTML, 'TrustedHTML');\n\n /**\n * Trusted Script object wrapping a string that can only be created from a\n * TT policy.\n */\n class TrustedScript extends TrustedType {\n }\n lockdownTrustedType(TrustedScript, 'TrustedScript');\n\n lockdownTrustedType(TrustedType, 'TrustedType');\n\n // Common constants.\n const emptyHTML = freeze(create(new TrustedHTML(creatorSymbol, '')));\n privates(emptyHTML)['v'] = '';\n\n /**\n * A map of attribute / property names to allowed types\n * for known namespaces.\n * @type {!Object}\n * @export\n */\n const TYPE_MAP = {\n [HTML_NS]: {\n // TODO(koto): Figure out what to to with \n 'A': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'AREA': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BASE': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n },\n 'BUTTON': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'EMBED': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n },\n },\n 'FORM': {\n 'attributes': {\n 'action': TrustedURL.name,\n },\n },\n 'FRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n },\n },\n 'IFRAME': {\n 'attributes': {\n 'src': TrustedURL.name,\n 'srcdoc': TrustedHTML.name,\n },\n },\n 'INPUT': {\n 'attributes': {\n 'formaction': TrustedURL.name,\n },\n },\n 'OBJECT': {\n 'attributes': {\n 'data': TrustedScriptURL.name,\n 'codebase': TrustedScriptURL.name,\n },\n },\n // TODO(koto): Figure out what to do with portals.\n 'SCRIPT': {\n 'attributes': {\n 'src': TrustedScriptURL.name,\n 'text': TrustedScript.name,\n },\n 'properties': {\n 'innerText': TrustedScript.name,\n 'textContent': TrustedScript.name,\n 'text': TrustedScript.name,\n },\n },\n '*': {\n 'attributes': {},\n 'properties': {\n 'innerHTML': TrustedHTML.name,\n 'outerHTML': TrustedHTML.name,\n },\n },\n },\n [XLINK_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n [SVG_NS]: {\n '*': {\n 'attributes': {\n 'href': TrustedURL.name,\n },\n 'properties': {},\n },\n },\n };\n\n /**\n * A map of element property to HTML attribute names.\n * @type {!Object}\n */\n const ATTR_PROPERTY_MAP = {\n 'codebase': 'codeBase',\n 'formaction': 'formAction',\n };\n\n // Edge doesn't support srcdoc.\n if (!('srcdoc' in HTMLIFrameElement.prototype)) {\n delete TYPE_MAP[HTML_NS]['IFRAME']['attributes']['srcdoc'];\n }\n\n // in HTML, clone attributes into properties.\n for (const tag of Object.keys(TYPE_MAP[HTML_NS])) {\n if (!TYPE_MAP[HTML_NS][tag]['properties']) {\n TYPE_MAP[HTML_NS][tag]['properties'] = {};\n }\n for (const attr of Object.keys(TYPE_MAP[HTML_NS][tag]['attributes'])) {\n TYPE_MAP[HTML_NS][tag]['properties'][\n ATTR_PROPERTY_MAP[attr] ? ATTR_PROPERTY_MAP[attr] : attr\n ] = TYPE_MAP[HTML_NS][tag]['attributes'][attr];\n }\n }\n\n // Add inline event handlers attribute names.\n for (const name of getOwnPropertyNames(HTMLElement.prototype)) {\n if (name.slice(0, 2) === 'on') {\n TYPE_MAP[HTML_NS]['*']['attributes'][name] = 'TrustedScript';\n }\n }\n\n /**\n * @type {!Object}\n */\n const createTypeMapping = {\n 'createHTML': TrustedHTML,\n 'createScriptURL': TrustedScriptURL,\n 'createURL': TrustedURL,\n 'createScript': TrustedScript,\n };\n\n const createFunctionAllowed = createTypeMapping.hasOwnProperty;\n\n /**\n * Function generating a type checker.\n * @template T\n * @param {T} type The type to check against.\n * @return {function(*):boolean}\n */\n function isTrustedTypeChecker(type) {\n return (obj) => (obj instanceof type) && privateMap.has(obj);\n }\n\n /**\n * Wraps a user-defined policy rules with TT constructor\n * @param {string} policyName The policy name\n * @param {TrustedTypesInnerPolicy} innerPolicy InnerPolicy\n * @return {!TrustedTypePolicy} Frozen policy object\n */\n function wrapPolicy(policyName, innerPolicy) {\n /**\n * @template T\n * @param {function(new:T, symbol, string)} Ctor a trusted type constructor\n * @param {string} methodName the policy factory method name\n * @return {function(string):!T} a factory that produces instances of Ctor.\n */\n function creator(Ctor, methodName) {\n // This causes thisValue to be null when called below.\n const method = innerPolicy[methodName] || rejectInputFn;\n const policySpecificType = freeze(new Ctor(creatorSymbol, policyName));\n const factory = {\n [methodName](s, ...args) {\n // Trick to get methodName to show in stacktrace.\n let result = method('' + s, ...args);\n if (result === undefined || result === null) {\n result = '';\n }\n const allowedValue = '' + result;\n const o = freeze(create(policySpecificType));\n privates(o)['v'] = allowedValue;\n return o;\n },\n }[methodName];\n return freeze(factory);\n }\n\n const policy = create(TrustedTypePolicy.prototype);\n\n for (const name of getOwnPropertyNames(createTypeMapping)) {\n policy[name] = creator(createTypeMapping[name], name);\n }\n defineProperty(policy, 'name', {\n value: policyName,\n writable: false,\n configurable: false,\n enumerable: true,\n });\n\n return /** @type {!TrustedTypePolicy} */ (freeze(policy));\n }\n\n /**\n * Returns the name of the trusted type required for a given element\n * attribute.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} attribute The name of the attribute.\n * @param {string=} elementNs Element namespace.\n * @param {string=} attributeNs The attribute namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getAttributeType(tagName, attribute, elementNs = '',\n attributeNs = '') {\n const canonicalAttr = toLowerCase.apply(String(attribute));\n return getTypeInternal_(tagName, 'attributes', canonicalAttr,\n elementNs, attributeNs);\n }\n\n /**\n * Returns a type name from a type map.\n * @param {string} tag A tag name.\n * @param {string} container 'attributes' or 'properties'\n * @param {string} name The attribute / property name.\n * @param {string=} elNs Element namespace.\n * @param {string=} attrNs Attribute namespace.\n * @return {string|undefined}\n * @private\n */\n function getTypeInternal_(tag, container, name, elNs = '', attrNs = '') {\n const canonicalTag = toUpperCase.apply(String(tag));\n\n let ns = attrNs ? attrNs : elNs;\n if (!ns) {\n ns = HTML_NS;\n }\n const map = hasOwnProperty.apply(TYPE_MAP, [ns]) ? TYPE_MAP[ns] : null;\n if (!map) {\n return;\n }\n if (hasOwnProperty.apply(map, [canonicalTag]) &&\n map[canonicalTag] &&\n hasOwnProperty.apply(map[canonicalTag][container], [name]) &&\n map[canonicalTag][container][name]) {\n return map[canonicalTag][container][name];\n }\n\n if (hasOwnProperty.apply(map, ['*']) &&\n hasOwnProperty.apply(map['*'][container], [name]) &&\n map['*'][container][name]) {\n return map['*'][container][name];\n }\n }\n\n /**\n * Returns the name of the trusted type required for a given element property.\n * @param {string} tagName The name of the tag of the element.\n * @param {string} property The property.\n * @param {string=} elementNs Element namespace.\n * @return {string|undefined} Required type name or undefined, if a Trusted\n * Type is not required.\n */\n function getPropertyType(tagName, property, elementNs = '') {\n // TODO: Support namespaces.\n return getTypeInternal_(tagName, 'properties', String(property), elementNs);\n }\n\n /**\n * Returns the type map-like object, that resolves a name of a type for a\n * given tag + attribute / property in a given namespace.\n * The keys of the map are uppercase tag names. Map entry has mappings between\n * a lowercase attribute name / case-sensitive property name and a name of the\n * type that is required for that attribute / property.\n * Example entry for 'IMG': {\"attributes\": {\"src\": \"TrustedHTML\"}}\n * @param {string=} namespaceUri The namespace URI (will use the current\n * document namespace URI if omitted).\n * @return {TrustedTypesTypeMap}\n */\n function getTypeMapping(namespaceUri = '') {\n if (!namespaceUri) {\n try {\n namespaceUri = document.documentElement.namespaceURI;\n } catch (e) {\n namespaceUri = HTML_NS;\n }\n }\n /**\n * @template T\n * @private\n * @param {T} o\n * @return {T}\n */\n function deepClone(o) {\n return JSON.parse(JSON.stringify(o));\n }\n const map = TYPE_MAP[namespaceUri];\n if (!map) {\n return {};\n }\n return deepClone(map);\n }\n\n /**\n * Returns all configured policy names (even for non-exposed policies).\n * @return {!Array}\n */\n function getPolicyNames() {\n // TODO(msamuel): Should we sort policyNames to avoid leaking or\n // encouraging dependency on the order in which policy names are\n // registered? I think JavaScript builtin sorts are efficient for\n // almost-sorted lists so the amortized cost is close to O(n).\n return policyNames.slice();\n }\n\n /**\n * Creates a TT policy.\n *\n * Returns a frozen object representing a policy - a collection of functions\n * that may create TT objects based on the user-provided rules specified\n * in the policy object.\n *\n * @param {string} name A unique name of the policy.\n * @param {TrustedTypesInnerPolicy} policy Policy rules object.\n * @return {TrustedTypePolicy} The policy that may create TT objects\n * according to the policy rules.\n */\n function createPolicy(name, policy) {\n const pName = '' + name; // Assert it's a string\n\n if (enforceNameWhitelist && allowedNames.indexOf(pName) === -1) {\n throw new TypeError('Policy ' + pName + ' disallowed.');\n }\n\n if (policyNames.indexOf(pName) !== -1) {\n throw new TypeError('Policy ' + pName + ' exists.');\n }\n // Register the name early so that if policy getters unwisely calls\n // across protection domains to code that reenters this function,\n // policy author still has rights to the name.\n policyNames.push(pName);\n\n // Only copy own properties of names present in createTypeMapping.\n const innerPolicy = create(null);\n if (policy && typeof policy === 'object') {\n // Treat non-objects as empty policies.\n for (const key of getOwnPropertyNames(policy)) {\n if (createFunctionAllowed.call(createTypeMapping, key)) {\n innerPolicy[key] = policy[key];\n }\n }\n } else {\n // eslint-disable-next-line no-console\n console.warn('trustedTypes.createPolicy ' + pName +\n ' was given an empty policy');\n }\n freeze(innerPolicy);\n\n const wrappedPolicy = wrapPolicy(pName, innerPolicy);\n\n if (pName === DEFAULT_POLICY_NAME) {\n defaultPolicy = wrappedPolicy;\n }\n\n return wrappedPolicy;\n }\n\n /**\n * Applies the policy name whitelist.\n * @param {!Array} allowedPolicyNames\n */\n function setAllowedPolicyNames(allowedPolicyNames) {\n if (allowedPolicyNames.indexOf('*') !== -1) { // Any policy name is allowed.\n enforceNameWhitelist = false;\n } else {\n enforceNameWhitelist = true;\n allowedNames.length = 0;\n forEach.call(allowedPolicyNames, (el) => {\n push.call(allowedNames, '' + el);\n });\n }\n }\n\n /**\n * Returns the default policy, or null if it was not created.\n * @return {TrustedTypePolicy}\n */\n function getDefaultPolicy() {\n return defaultPolicy;\n }\n\n /**\n * Resets the default policy.\n */\n function resetDefaultPolicy() {\n defaultPolicy = null;\n policyNames.splice(policyNames.indexOf(DEFAULT_POLICY_NAME), 1);\n }\n\n const api = create(TrustedTypePolicyFactory.prototype);\n assign(api, {\n // The main function to create policies.\n createPolicy,\n\n getPolicyNames,\n\n // Type checkers, also validating the object was initialized through a\n // policy.\n isHTML: isTrustedTypeChecker(TrustedHTML),\n isURL: isTrustedTypeChecker(TrustedURL),\n isScriptURL: isTrustedTypeChecker(TrustedScriptURL),\n isScript: isTrustedTypeChecker(TrustedScript),\n\n getAttributeType,\n getPropertyType,\n getTypeMapping,\n emptyHTML,\n defaultPolicy, // Just to make the compiler happy, this is overridden below.\n\n TrustedHTML: TrustedHTML,\n TrustedURL: TrustedURL,\n TrustedScriptURL: TrustedScriptURL,\n TrustedScript: TrustedScript,\n });\n\n defineProperty(api, 'defaultPolicy', {\n get: getDefaultPolicy,\n set: () => {},\n });\n\n return {\n trustedTypes: freeze(api),\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n };\n};\n\n\nexport const {\n trustedTypes,\n setAllowedPolicyNames,\n getDefaultPolicy,\n resetDefaultPolicy,\n} = trustedTypesBuilderTestOnly();\n\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\nconst {\n defineProperty,\n} = Object;\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n */\nexport function installSetter(object, name, setter) {\n const descriptor = {\n set: setter,\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs a setter and getter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} setter A setter function}\n * @param {function(*): *|undefined} getter A getter function}\n */\nexport function installSetterAndGetter(object, name, setter, getter) {\n const descriptor = {\n set: setter,\n get: getter,\n configurable: true, // This can get uninstalled, we need configurable: true\n };\n defineProperty(object, name, descriptor);\n}\n\n/**\n * Installs the setter of a given property.\n * @param {!Object} object An object for which to wrap the property.\n * @param {string} name The name of the property to wrap.\n * @param {function(*): *|undefined} fn A function}\n */\nexport function installFunction(object, name, fn) {\n defineProperty(object, name, {\n value: fn,\n });\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/* eslint-disable no-unused-vars */\nimport {DIRECTIVE_NAME, TrustedTypeConfig} from './data/trustedtypeconfig.js';\nimport {\n trustedTypes as TrustedTypes,\n setAllowedPolicyNames,\n resetDefaultPolicy,\n HTML_NS,\n} from\n './trustedtypes.js';\n\n/* eslint-enable no-unused-vars */\nimport {installFunction, installSetter, installSetterAndGetter}\n from './utils/wrapper.js';\n\nconst {apply} = Reflect;\nconst {\n getOwnPropertyNames,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n} = Object;\n\nconst {\n hasOwnProperty,\n isPrototypeOf,\n} = Object.prototype;\n\nconst {slice} = String.prototype;\n\n// No URL in IE 11.\nconst UrlConstructor = typeof window.URL == 'function' ?\n URL.prototype.constructor :\n null;\n\nlet stringifyForRangeHack;\n\n/**\n * Return object constructor name\n * (their function.name is not available in IE 11).\n * @param {*} fn\n * @return {string}\n * @private\n */\nconst getConstructorName_ = document.createElement('div').constructor.name ?\n (fn) => fn.name :\n (fn) => ('' + fn).match(/^\\[object (\\S+)\\]$/)[1];\n\n// window.open on IE 11 is set on WindowPrototype\nconst windowOpenObject = getOwnPropertyDescriptor(window, 'open') ?\n window :\n window.constructor.prototype;\n\n// In IE 11, insertAdjacent(HTML|Text) is on HTMLElement prototype\nconst insertAdjacentObject = apply(hasOwnProperty, Element.prototype,\n ['insertAdjacentHTML']) ? Element.prototype : HTMLElement.prototype;\n\n// This is not available in release Firefox :(\n// https://developer.mozilla.org/en-US/docs/Web/API/SecurityPolicyViolationEvent\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1432523\nconst SecurityPolicyViolationEvent = window['SecurityPolicyViolationEvent'] ||\n null;\n\n/**\n * Parses URL, catching all the errors.\n * @param {string} url URL string to parse.\n * @return {URL|null}\n */\nfunction parseUrl_(url) {\n try {\n return new UrlConstructor(url, document.baseURI || undefined);\n } catch (e) {\n return null;\n }\n}\n\n// We don't actually need other namespaces.\n// setAttribute is hooked on Element.prototype, which all elements inherit from,\n// and all sensitive property wrappers are hooked directly on Element as well.\nconst typeMap = TrustedTypes.getTypeMapping(HTML_NS);\n\nconst STRING_TO_TYPE = {\n 'TrustedHTML': TrustedTypes.TrustedHTML,\n 'TrustedScript': TrustedTypes.TrustedScript,\n 'TrustedScriptURL': TrustedTypes.TrustedScriptURL,\n 'TrustedURL': TrustedTypes.TrustedURL,\n};\n\n/**\n * Converts an uppercase tag name to an element constructor function name.\n * Used for property setter hijacking only.\n * @param {string} tagName\n * @return {string}\n */\nfunction convertTagToConstructor(tagName) {\n if (tagName == '*') {\n return 'HTMLElement';\n }\n return getConstructorName_(document.createElement(tagName).constructor);\n}\n\nfor (const tagName of Object.keys(typeMap)) {\n const attrs = typeMap[tagName]['properties'];\n for (const [k, v] of Object.entries(attrs)) {\n attrs[k] = STRING_TO_TYPE[v];\n }\n}\n\n/**\n * Map of type names to type checking function.\n * @type {!Object}\n */\nconst TYPE_CHECKER_MAP = {\n 'TrustedHTML': TrustedTypes.isHTML,\n 'TrustedURL': TrustedTypes.isURL,\n 'TrustedScriptURL': TrustedTypes.isScriptURL,\n 'TrustedScript': TrustedTypes.isScript,\n};\n\n/**\n * Map of type names to type producing function.\n * @type {Object}\n */\nconst TYPE_PRODUCER_MAP = {\n 'TrustedHTML': 'createHTML',\n 'TrustedURL': 'createURL',\n 'TrustedScriptURL': 'createScriptURL',\n 'TrustedScript': 'createScript',\n};\n\n/* eslint-disable no-unused-vars */\n/**\n * @typedef {TrustedTypePolicy}\n * @property {function(string):TrustedHTML} createHTML\n * @property {function(string):TrustedURL} createURL\n * @property {function(string):TrustedScriptURL} createScriptURL\n * @property {function(string):TrustedScript} createScript\n */\nconst TrustedTypePolicy = {};\n/* eslint-enable no-unused-vars */\n\n\n/**\n * An object for enabling trusted type enforcement.\n */\nexport class TrustedTypesEnforcer {\n /**\n * @param {!TrustedTypeConfig} config The configuration for\n * trusted type enforcement.\n */\n constructor(config) {\n /**\n * A configuration for the trusted type enforcement.\n * @private {!TrustedTypeConfig}\n */\n this.config_ = config;\n /**\n * @private {Object}\n */\n this.originalSetters_ = {};\n }\n\n /**\n * Wraps HTML sinks with an enforcement setter, which will enforce\n * trusted types and do logging, if enabled.\n *\n */\n install() {\n setAllowedPolicyNames(this.config_.allowedPolicyNames);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.wrapSetter_(ShadowRoot.prototype, 'innerHTML',\n TrustedTypes.TrustedHTML);\n }\n stringifyForRangeHack = (function(doc) {\n const r = doc.createRange();\n // In IE 11 Range.createContextualFragment doesn't stringify its argument.\n const f = r.createContextualFragment(/** @type {string} */ (\n {toString: () => '
'}));\n return f.childNodes.length == 0;\n })(document);\n\n this.wrapWithEnforceFunction_(Range.prototype, 'createContextualFragment',\n TrustedTypes.TrustedHTML, 0);\n\n this.wrapWithEnforceFunction_(insertAdjacentObject,\n 'insertAdjacentHTML',\n TrustedTypes.TrustedHTML, 1);\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n // Chrome\n this.wrapWithEnforceFunction_(Document.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(Document.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n } else {\n // Firefox\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'write',\n TrustedTypes.TrustedHTML, 0);\n this.wrapWithEnforceFunction_(HTMLDocument.prototype, 'open',\n TrustedTypes.TrustedURL, 0);\n }\n\n this.wrapWithEnforceFunction_(windowOpenObject, 'open',\n TrustedTypes.TrustedURL, 0);\n\n if ('DOMParser' in window) {\n this.wrapWithEnforceFunction_(DOMParser.prototype, 'parseFromString',\n TrustedTypes.TrustedHTML, 0);\n }\n this.wrapWithEnforceFunction_(window, 'setInterval',\n TrustedTypes.TrustedScript, 0);\n this.wrapWithEnforceFunction_(window, 'setTimeout',\n TrustedTypes.TrustedScript, 0);\n this.wrapSetAttribute_();\n this.installScriptMutatorGuards_();\n this.installPropertySetWrappers_();\n }\n\n /**\n * Removes the original setters.\n */\n uninstall() {\n setAllowedPolicyNames(['*']);\n\n if (!this.config_.isEnforcementEnabled && !this.config_.isLoggingEnabled) {\n return;\n }\n\n if ('ShadowRoot' in window) {\n this.restoreSetter_(ShadowRoot.prototype, 'innerHTML');\n }\n this.restoreFunction_(Range.prototype, 'createContextualFragment');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentHTML');\n this.restoreFunction_(Element.prototype, 'setAttribute');\n this.restoreFunction_(Element.prototype, 'setAttributeNS');\n\n if (getOwnPropertyDescriptor(Document.prototype, 'write')) {\n this.restoreFunction_(Document.prototype, 'write');\n this.restoreFunction_(Document.prototype, 'open');\n } else {\n this.restoreFunction_(HTMLDocument.prototype, 'write');\n this.restoreFunction_(HTMLDocument.prototype, 'open');\n }\n this.restoreFunction_(windowOpenObject, 'open');\n\n if ('DOMParser' in window) {\n this.restoreFunction_(DOMParser.prototype, 'parseFromString');\n }\n this.restoreFunction_(window, 'setTimeout');\n this.restoreFunction_(window, 'setInterval');\n this.uninstallPropertySetWrappers_();\n this.uninstallScriptMutatorGuards_();\n resetDefaultPolicy();\n }\n\n /**\n * Installs type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n installScriptMutatorGuards_() {\n const that = this;\n\n ['appendChild', 'insertBefore', 'replaceChild'].forEach((fnName) => {\n this.wrapFunction_(\n Node.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n this.wrapFunction_(\n insertAdjacentObject,\n 'insertAdjacentText',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.insertAdjacentTextWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ true, originalFn)\n .apply(that, args);\n });\n });\n ['append', 'prepend'].forEach((fnName) => {\n this.wrapFunction_(\n Element.prototype,\n fnName,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforceTypeInScriptNodes_\n .bind(that, this, /* checkParent */ false, originalFn)\n .apply(that, args);\n });\n });\n }\n }\n\n /**\n * Uninstalls type-enforcing wrappers for APIs that allow to modify\n * script element texts.\n * @private\n */\n uninstallScriptMutatorGuards_() {\n this.restoreFunction_(Node.prototype, 'appendChild');\n this.restoreFunction_(Node.prototype, 'insertBefore');\n this.restoreFunction_(Node.prototype, 'replaceChild');\n this.restoreFunction_(insertAdjacentObject, 'insertAdjacentText');\n if ('after' in Element.prototype) {\n ['after', 'before', 'replaceWith', 'append', 'prepend'].forEach(\n (fnName) => this.restoreFunction_(Element.prototype, fnName));\n }\n }\n\n /**\n * Installs wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n installPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.wrapSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property,\n typeMap[tag]['properties'][property]);\n }\n }\n }\n\n /**\n * Uninstalls wrappers for directly setting properties\n * based on the type map.\n * @private\n */\n uninstallPropertySetWrappers_() {\n /* eslint-disable guard-for-in */\n for (const tag of getOwnPropertyNames(typeMap)) {\n for (const property of getOwnPropertyNames(typeMap[tag]['properties'])) {\n this.restoreSetter_(\n window[convertTagToConstructor(tag)].prototype,\n property);\n }\n }\n }\n\n /** Wraps set attribute with an enforcement function. */\n wrapSetAttribute_() {\n const that = this;\n this.wrapFunction_(\n Element.prototype,\n 'setAttribute',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n this.wrapFunction_(\n Element.prototype,\n 'setAttributeNS',\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.setAttributeNSWrapper_\n .bind(that, this, originalFn)\n .apply(that, args);\n });\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttribute.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttribute function.\n * @return {*}\n */\n setAttributeWrapper_(context, originalFn, ...args) {\n // Note(slekies): In a normal application constructor should never be null.\n // However, there are no guarantees. If the constructor is null, we cannot\n // determine whether a special type is required. In order to not break the\n // application, we will not do any further type checks and pass the call\n // to setAttribute.\n if (context.constructor !== null && context instanceof Element) {\n const attrName = (args[0] = String(args[0])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(\n context, 'setAttribute', STRING_TO_TYPE[requiredType],\n originalFn, 1, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Enforces type checking for Element.prototype.setAttributeNS.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original setAttributeNS function.\n * @return {*}\n */\n setAttributeNSWrapper_(context, originalFn, ...args) {\n // See the note from setAttributeWrapper_ above.\n if (context.constructor !== null && context instanceof Element) {\n const ns = args[0] ? String(args[0]) : null;\n args[0] = ns;\n const attrName = (args[1] = String(args[1])).toLowerCase();\n const requiredType = TrustedTypes.getAttributeType(context.tagName,\n attrName, context.namespaceURI, ns);\n if (requiredType && apply(hasOwnProperty, STRING_TO_TYPE,\n [requiredType])) {\n return this.enforce_(context, 'setAttributeNS',\n STRING_TO_TYPE[requiredType],\n originalFn, 2, args);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for DOM mutator functions that enforces type checks if the context\n * (or, optionally, its parent node) is a script node.\n * For each argument, it will make sure that text nodes pass through a\n * default policy, or generate a violation. To skip that check, pass\n * TrustedScript objects instead.\n * @param {!Object} context The context for the call to the original function.\n * @param {boolean} checkParent Check parent of context instead.\n * @param {!Function} originalFn The original mutator function.\n * @return {*}\n */\n enforceTypeInScriptNodes_(context, checkParent, originalFn, ...args) {\n const objToCheck = checkParent ? context.parentNode : context;\n if (objToCheck instanceof HTMLScriptElement && args.length > 0) {\n for (let argNumber = 0; argNumber < args.length; argNumber++) {\n let arg = args[argNumber];\n if (arg instanceof Node && arg.nodeType !== Node.TEXT_NODE) {\n continue; // Type is not interesting\n }\n if (arg instanceof Node && arg.nodeType == Node.TEXT_NODE) {\n arg = arg.textContent;\n } else if (TrustedTypes.isScript(arg)) {\n // TODO(koto): Consider removing this branch, as it's hard to spec.\n // Convert to text node and go on.\n args[argNumber] = document.createTextNode(arg);\n continue;\n }\n\n // Try to run a default policy on argsthe argument\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n 'TrustedScript', arg, 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, originalFn.name,\n TrustedTypes.TrustedScript, arg);\n }\n args[argNumber] = document.createTextNode('' + fallbackValue);\n }\n }\n return apply(originalFn, context, args);\n }\n\n /**\n * Wrapper for Element.insertAdjacentText that enforces type checks for\n * inserting text into a script node.\n * @param {!Object} context The context for the call to the original function.\n * @param {!Function} originalFn The original insertAdjacentText function.\n */\n insertAdjacentTextWrapper_(context, originalFn, ...args) {\n const riskyPositions = ['beforebegin', 'afterend'];\n if (context instanceof Element &&\n context.parentElement instanceof HTMLScriptElement &&\n args.length > 1 &&\n riskyPositions.includes(args[0]) &&\n !(TrustedTypes.isScript(args[1]))) {\n // Run a default policy on args[1]\n let fallbackValue;\n let exceptionThrown;\n try {\n fallbackValue = this.maybeCallDefaultPolicy_('TrustedScript',\n args[1], 'script.text');\n } catch (e) {\n exceptionThrown = true;\n }\n if (exceptionThrown) {\n this.processViolation_(context, 'insertAdjacentText',\n TrustedTypes.TrustedScript, args[1]);\n }\n\n const textNode = document.createTextNode('' + fallbackValue);\n\n\n const insertBefore = /** @type function(this: Node) */(\n this.originalSetters_[this.getKey_(Node.prototype, 'insertBefore')]);\n\n switch (args[0]) {\n case riskyPositions[0]: // 'beforebegin'\n apply(insertBefore, context.parentElement,\n [textNode, context]);\n break;\n case riskyPositions[1]: // 'afterend'\n apply(insertBefore, context.parentElement,\n [textNode, context.nextSibling]);\n break;\n }\n return;\n }\n apply(originalFn, context, args);\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {number} argNumber Number of the argument to enforce the type of.\n * @private\n */\n wrapWithEnforceFunction_(object, name, type, argNumber) {\n const that = this;\n this.wrapFunction_(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @param {function(!Function, ...*)} originalFn\n * @return {*}\n */\n function(originalFn, ...args) {\n return that.enforce_.call(that, this, name, type, originalFn,\n argNumber, args);\n });\n }\n\n\n /**\n * Wraps an existing function with a given function body and stores the\n * original function.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {function(!Function, ...*)} functionBody The wrapper function.\n */\n wrapFunction_(object, name, functionBody) {\n const descriptor = getOwnPropertyDescriptor(object, name);\n const originalFn = /** @type function(*):* */ (\n descriptor ? descriptor.value : null);\n\n if (!(originalFn instanceof Function)) {\n throw new TypeError(\n 'Property ' + name + ' on object' + object + ' is not a function');\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n installFunction(\n object,\n name,\n /**\n * @this {TrustedTypesEnforcer}\n * @return {*}\n */\n function(...args) {\n return functionBody.bind(this, originalFn).apply(this, args);\n });\n this.originalSetters_[key] = originalFn;\n }\n\n /**\n * Wraps a setter with the enforcement wrapper.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Function} type The type to enforce.\n * @param {!Object=} descriptorObject If present, will reuse the\n * setter/getter from this one, instead of object. Used for redefining\n * setters in subclasses.\n * @private\n */\n wrapSetter_(object, name, type, descriptorObject = undefined) {\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n\n let useObject = descriptorObject || object;\n let descriptor;\n let originalSetter;\n const stopAt = getPrototypeOf(Node.prototype);\n\n // Find the descriptor on the object or its prototypes, stopping at Node.\n do {\n descriptor = getOwnPropertyDescriptor(useObject, name);\n originalSetter = /** @type {function(*):*} */ (descriptor ?\n descriptor.set : null);\n if (!originalSetter) {\n useObject = getPrototypeOf(useObject) || stopAt;\n }\n } while (!(originalSetter || useObject === stopAt || !useObject));\n\n if (!(originalSetter instanceof Function)) {\n throw new TypeError(\n 'No setter for property ' + name + ' on object' + object);\n }\n\n const key = this.getKey_(object, name);\n if (this.originalSetters_[key]) {\n throw new Error(\n `TrustedTypesEnforcer: Double installation detected: ${key} ${name}`);\n }\n const that = this;\n /**\n * @this {TrustedTypesEnforcer}\n * @param {*} value\n */\n const enforcingSetter = function(value) {\n that.enforce_.call(that, this, name, type, originalSetter, 0,\n [value]);\n };\n\n if (useObject === object) {\n installSetter(\n object,\n name,\n enforcingSetter);\n } else {\n // Since we're creating a new setter in subclass, we also need to\n // overwrite the getter.\n installSetterAndGetter(\n object,\n name,\n enforcingSetter,\n descriptor.get\n );\n }\n this.originalSetters_[key] = originalSetter;\n }\n\n /**\n * Restores the original setter for the property, as encountered during\n * install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @param {!Object=} descriptorObject If present, will restore the original\n * setter/getter from this one, instead of object.\n * @private\n */\n restoreSetter_(object, name, descriptorObject = undefined) {\n const key = this.getKey_(object, name);\n if (descriptorObject && !isPrototypeOf.call(descriptorObject, object)) {\n throw new Error('Invalid prototype chain');\n }\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n if (descriptorObject) {\n // We have to also overwrite a getter.\n installSetterAndGetter(object, name, this.originalSetters_[key],\n getOwnPropertyDescriptor(descriptorObject, name).get);\n } else {\n installSetter(object, name, this.originalSetters_[key]);\n }\n delete this.originalSetters_[key];\n }\n\n /**\n * Restores the original method of an object, as encountered during install().\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @private\n */\n restoreFunction_(object, name) {\n const key = this.getKey_(object, name);\n if (!this.originalSetters_[key]) {\n throw new Error(\n // eslint-disable-next-line max-len\n `TrustedTypesEnforcer: Cannot restore (double uninstallation?): ${key} ${name}`);\n }\n installFunction(object, name, this.originalSetters_[key]);\n delete this.originalSetters_[key];\n }\n\n /**\n * Returns the key name for caching original setters.\n * @param {!Object} object The object of the to-be-wrapped property.\n * @param {string} name The name of the property.\n * @return {string} Key name.\n * @private\n */\n getKey_(object, name) {\n // TODO(msamuel): Can we use Object.prototype.toString.call(object)\n // to get an unspoofable string here?\n // TODO(msamuel): fail on '-' in object.constructor.name?\n // No Function.name in IE 11\n const ctrName = '' + (\n object.constructor.name ?\n object.constructor.name :\n object.constructor);\n return ctrName + '-' + name;\n }\n\n\n /**\n * Calls a default policy.\n * @param {string} typeName Type name to attempt to produce from a value.\n * @param {*} value The value to pass to a default policy\n * @param {string} sink The sink name that the default policy will be called\n * with.\n * @throws {Error} If the default policy throws, or not exist.\n * @return {Function} The trusted value.\n */\n maybeCallDefaultPolicy_(typeName, value, sink = '') {\n // Apply a fallback policy, if it exists.\n const fallbackPolicy = TrustedTypes.defaultPolicy;\n if (!fallbackPolicy) {\n throw new Error('Default policy does not exist');\n }\n if (!TYPE_CHECKER_MAP.hasOwnProperty(typeName)) {\n throw new Error();\n }\n return fallbackPolicy[TYPE_PRODUCER_MAP[typeName]](value, '' + sink);\n }\n\n /**\n * Logs and enforces TrustedTypes depending on the given configuration.\n * @template T\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {function(?):T} originalSetter Original setter.\n * @param {number} argNumber Number of argument to enforce the type of.\n * @param {Array} args Arguments.\n * @return {T}\n * @private\n */\n enforce_(context, propertyName, typeToEnforce, originalSetter, argNumber,\n args) {\n const value = args[argNumber];\n const typeName = '' + typeToEnforce.name;\n // If typed value is given, pass through.\n if (TYPE_CHECKER_MAP.hasOwnProperty(typeName) &&\n TYPE_CHECKER_MAP[typeName](value)) {\n if (stringifyForRangeHack &&\n propertyName == 'createContextualFragment') {\n // IE 11 hack, somehow the value is not stringified implicitly.\n args[argNumber] = args[argNumber].toString();\n }\n return apply(originalSetter, context, args);\n }\n\n if (typeToEnforce === TrustedTypes.TrustedScript) {\n const isInlineEventHandler =\n propertyName == 'setAttribute' ||\n propertyName === 'setAttributeNS' ||\n apply(slice, propertyName, [0, 2]) === 'on';\n // If a function (instead of string) is passed to inline event attribute,\n // or set(Timeout|Interval), pass through.\n const propertyAcceptsFunctions =\n propertyName === 'setInterval' ||\n propertyName === 'setTimeout' ||\n isInlineEventHandler;\n if ((propertyAcceptsFunctions && typeof value === 'function') ||\n (isInlineEventHandler && value === null)) {\n return apply(originalSetter, context, args);\n }\n }\n\n // Apply a fallback policy, if it exists.\n let fallbackValue;\n let exceptionThrown;\n const objName = context instanceof Element ?\n context.localName :\n getConstructorName_(context ? context.constructor : window.constructor);\n try {\n fallbackValue = this.maybeCallDefaultPolicy_(\n typeName, value, objName + '.' + propertyName);\n } catch (e) {\n exceptionThrown = true;\n }\n if (!exceptionThrown) {\n args[argNumber] = fallbackValue;\n return apply(originalSetter, context, args);\n }\n\n // This will throw a TypeError if enforcement is enabled.\n this.processViolation_(context, propertyName, typeToEnforce, value);\n\n return apply(originalSetter, context, args);\n }\n\n /**\n * Report a TT violation.\n * @param {!Object} context The object that the setter is called for.\n * @param {string} propertyName The name of the property.\n * @param {!Function} typeToEnforce The type to enforce.\n * @param {string} value The value that was violated the restrictions.\n * @throws {TypeError} if the enforcement is enabled.\n */\n processViolation_(context, propertyName, typeToEnforce, value) {\n const contextName = getConstructorName_(context.constructor) ||\n '' + context;\n const message = `Failed to set ${propertyName} on ${contextName}: `\n + `This property requires ${typeToEnforce.name}.`;\n\n if (this.config_.isLoggingEnabled) {\n // eslint-disable-next-line no-console\n console.warn(message, propertyName, context, typeToEnforce, value);\n }\n\n // Unconditionally dispatch an event.\n if (typeof SecurityPolicyViolationEvent == 'function') {\n let blockedURI = '';\n if (typeToEnforce === TrustedTypes.TrustedURL ||\n typeToEnforce === TrustedTypes.TrustedScriptURL) {\n blockedURI = parseUrl_(value) || '';\n if (blockedURI) {\n blockedURI = blockedURI.href;\n }\n }\n const valueSlice = apply(slice, '' + value, [0, 40]);\n const event = new SecurityPolicyViolationEvent(\n 'securitypolicyviolation',\n {\n 'bubbles': true,\n 'blockedURI': blockedURI,\n 'disposition': this.config_.isEnforcementEnabled ?\n 'enforce' : 'report',\n 'documentURI': document.location.href,\n 'effectiveDirective': DIRECTIVE_NAME,\n 'originalPolicy': this.config_.cspString,\n 'statusCode': 0,\n 'violatedDirective': DIRECTIVE_NAME,\n 'sample': `${contextName}.${propertyName} ${valueSlice}`,\n });\n if (context instanceof Node && context.isConnected) {\n context.dispatchEvent(event);\n } else { // Fallback - dispatch an event on base document.\n document.dispatchEvent(event);\n }\n }\n\n if (this.config_.isEnforcementEnabled) {\n throw new TypeError(message);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that only defines the types\n * (i.e. no enforcement logic).\n */\nimport {trustedTypes, TrustedTypePolicy, TrustedTypePolicyFactory} from\n '../trustedtypes.js';\n\nconst tt = trustedTypes;\n\n/**\n * Sets up the public Trusted Types API in the global object.\n */\nfunction setupPolyfill() {\n // We use array accessors to make sure Closure compiler will not alter the\n // names of the properties..\n if (typeof window === 'undefined') {\n return;\n }\n const rootProperty = 'trustedTypes';\n\n // Convert old window.TrustedTypes to window.trustedTypes.\n if (window['TrustedTypes'] && typeof window[rootProperty] === 'undefined') {\n window[rootProperty] = Object.freeze(window['TrustedTypes']);\n }\n\n if (typeof window[rootProperty] !== 'undefined') {\n return;\n }\n\n const publicApi = Object.create(TrustedTypePolicyFactory.prototype);\n Object.assign(publicApi, {\n 'isHTML': tt.isHTML,\n 'isURL': tt.isURL,\n 'isScriptURL': tt.isScriptURL,\n 'isScript': tt.isScript,\n 'createPolicy': tt.createPolicy,\n 'getPolicyNames': tt.getPolicyNames,\n 'getAttributeType': tt.getAttributeType,\n 'getPropertyType': tt.getPropertyType,\n 'getTypeMapping': tt.getTypeMapping,\n 'emptyHTML': tt.emptyHTML,\n '_isPolyfill_': true,\n });\n Object.defineProperty(\n publicApi,\n 'defaultPolicy',\n Object.getOwnPropertyDescriptor(tt, 'defaultPolicy') || {});\n\n window[rootProperty] = Object.freeze(publicApi);\n\n window['TrustedHTML'] = tt.TrustedHTML;\n window['TrustedURL'] = tt.TrustedURL;\n window['TrustedScriptURL'] = tt.TrustedScriptURL;\n window['TrustedScript'] = tt.TrustedScript;\n window['TrustedTypePolicy'] = TrustedTypePolicy;\n window['TrustedTypePolicyFactory'] = TrustedTypePolicyFactory;\n}\n\nsetupPolyfill();\n\nexport default tt;\n","/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n */\n\n/**\n * @fileoverview Entry point for a polyfill that enforces the types.\n */\nimport {TrustedTypesEnforcer} from '../enforcer.js';\nimport {TrustedTypeConfig} from '../data/trustedtypeconfig.js';\n/* eslint-disable no-unused-vars */\nimport TrustedTypes from './api_only.js';\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Tries to guess a CSP policy from:\n * - the current polyfill script element text content (if prefixed with\n * \"Content-Security-Policy:\")\n * - the data-csp attribute value of the current script element.\n * - meta header\n * @return {?string} Guessed CSP value, or null.\n */\nfunction detectPolicy() {\n try {\n const currentScript = document.currentScript || (function() {\n const scripts = document.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n })();\n\n const bodyPrefix = 'Content-Security-Policy:';\n if (currentScript &&\n currentScript.textContent.trim().substr(0, bodyPrefix.length) ==\n bodyPrefix) {\n return currentScript.textContent.trim().slice(bodyPrefix.length);\n }\n if (currentScript.dataset['csp']) {\n return currentScript.dataset['csp'];\n }\n const cspInMeta = document.head.querySelector(\n 'meta[http-equiv^=\"Content-Security-Policy\"]');\n if (cspInMeta) {\n return cspInMeta['content'].trim();\n }\n } catch (e) {\n return null;\n }\n return null;\n}\n\n/**\n * Bootstraps all trusted types polyfill and their enforcement.\n */\nexport function bootstrap() {\n const csp = detectPolicy();\n const config = csp ? TrustedTypeConfig.fromCSP(csp) : new TrustedTypeConfig(\n /* isLoggingEnabled */ false,\n /* isEnforcementEnabled */ false,\n /* allowedPolicyNames */ ['*']);\n\n const trustedTypesEnforcer = new TrustedTypesEnforcer(config);\n\n trustedTypesEnforcer.install();\n}\n\n/**\n * Determines if the enforcement should be enabled.\n * @return {boolean}\n */\nfunction shouldBootstrap() {\n for (const rootProperty of ['trustedTypes', 'TrustedTypes']) {\n if (window[rootProperty] && !window[rootProperty]['_isPolyfill_']) {\n // Native implementation exists\n return false;\n }\n }\n return true;\n}\n\n// Bootstrap only if native implementation is missing.\nif (shouldBootstrap()) {\n bootstrap();\n}\n"]} \ No newline at end of file diff --git a/dist/spec/index.html b/dist/spec/index.html index b4670953..ebd01203 100644 --- a/dist/spec/index.html +++ b/dist/spec/index.html @@ -1892,10 +1892,10 @@

string? getPropertyType( DOMString localName, DOMString property, optional DOMString elementNs = ""); - + readonly attribute TrustedTypePolicy? defaultPolicy; }; -

Internal slot [[DefaultPolicy]] may contain a TrustedTypePolicy object, +

Internal slot [[DefaultPolicy]] may contain a TrustedTypePolicy object, and is initially empty.

Internal slot [[CreatedPolicyNames]] is an ordered set of strings, initially empty.

@@ -2053,6 +2053,18 @@

anElement.innerHTML = trustedTypes.emptyHTML; // no need to create a policy
+
+
+
+
defaultPolicy, of type TrustedTypePolicy, readonly, nullable +
+

Returns the value of [[DefaultPolicy]] internal slot, or null if the slot is empty.

+
+
+ +
trustedTypes.defaultPolicy === null;  // true
+const dp = trustedTypes.createPolicy('default', {});
+trustedTypes.defaultPolicy === dp;  // true
 
@@ -2122,7 +2134,7 @@

2.3.3. TrustedTypePolicyOptions

This dictionary holds author-defined functions for converting string -values into trusted values. These functions do not create Trusted Type object instances directly - this behavior is provided by TrustedTypePolicy.

+values into trusted values. These functions do not create Trusted Type object instances directly - this behavior is provided by TrustedTypePolicy.

dictionary TrustedTypePolicyOptions {
    CreateHTMLCallback? createHTML;
    CreateScriptCallback? createScript;
@@ -2276,7 +2288,7 @@ 

3. Algorithms

3.1. Create a Trusted Type Policy

-

To create a TrustedTypePolicy, given a TrustedTypePolicyFactory (factory), +

To create a TrustedTypePolicy, given a TrustedTypePolicyFactory (factory), a string (policyName), TrustedTypePolicyOptions dictionary (options), and a global object (global) run these steps:

  1. @@ -2286,7 +2298,7 @@

    , throw a TypeError and abort further steps.

    Populate TypeError.

  2. -

    Let policy be a new TrustedTypePolicy object.

    +

    Let policy be a new TrustedTypePolicy object.

  3. Set policy’s name property value to policyName.

  4. @@ -2314,7 +2326,7 @@

    < (null if the slot is empty).

3.3. Create a Trusted Type

-

Given a TrustedTypePolicy policy, a type name trustedTypeName, +

Given a TrustedTypePolicy policy, a type name trustedTypeName, a string value and a list arguments, execute the following steps:

  1. @@ -3085,8 +3097,9 @@

    createScriptURL(input, ...arguments), in §2.3.2
  2. data, in §4.1.3
  3. Default policy, in §2.3.4 -
  4. DOMParser, in §4.4 +
  5. defaultPolicy, in §2.3.1
  6. DOMParser(), in §4.4 +
  7. DOMParser, in §4.4
  8. emptyHTML, in §2.3.1
  9. Enforcement, in §2.4
  10. getAtributeType(localName, attribute, elementNs, attributeNs), in §2.3.1 @@ -3753,7 +3766,7 @@

    I string? getPropertyType( DOMString localName, DOMString property, optional DOMString elementNs = ""); - + readonly attribute TrustedTypePolicy? defaultPolicy; }; [Exposed=Window] @@ -3988,16 +4001,22 @@

    2.3.1. TrustedTypePolicyFactory +

@@ -567,6 +567,18 @@ initially empty. anElement.innerHTML = trustedTypes.emptyHTML; // no need to create a policy + +: defaultPolicy +:: Returns the value of `[[DefaultPolicy]]` internal slot, or null if the slot is empty. + +
+ +trustedTypes.defaultPolicy === null; // true +const dp = trustedTypes.createPolicy('default', {}); +trustedTypes.defaultPolicy === dp; // true + +
+ ### TrustedTypePolicy ### {#trusted-type-policy} @@ -821,7 +833,7 @@ a string (|policyName|), {{TrustedTypePolicyOptions}} dictionary (|options|), an 1. Set |policy|'s `name` property value to |policyName|. 1. Let |policyOptions| be a new {{TrustedTypePolicyOptions}} object. 1. Set |policyOptions| - {{TrustedTypePolicy/createHTML(input)|createHTML}} property to |option|'s + {{TrustedTypePolicy/createHTML|createHTML}} property to |option|'s {{TrustedTypePolicyOptions/createHTML|createHTML}} property value. 1. Set |policyOptions| {{TrustedTypePolicy/createScript()|createScript}} property to |option|'s diff --git a/src/enforcer.js b/src/enforcer.js index 3b29fd25..4ceac8a0 100644 --- a/src/enforcer.js +++ b/src/enforcer.js @@ -12,7 +12,6 @@ import {DIRECTIVE_NAME, TrustedTypeConfig} from './data/trustedtypeconfig.js'; import { trustedTypes as TrustedTypes, setAllowedPolicyNames, - getDefaultPolicy, resetDefaultPolicy, HTML_NS, } from @@ -767,7 +766,7 @@ export class TrustedTypesEnforcer { */ maybeCallDefaultPolicy_(typeName, value, sink = '') { // Apply a fallback policy, if it exists. - const fallbackPolicy = getDefaultPolicy.call(TrustedTypes); + const fallbackPolicy = TrustedTypes.defaultPolicy; if (!fallbackPolicy) { throw new Error('Default policy does not exist'); } diff --git a/src/polyfill/api_only.js b/src/polyfill/api_only.js index 200e79d7..efe96863 100644 --- a/src/polyfill/api_only.js +++ b/src/polyfill/api_only.js @@ -50,6 +50,11 @@ function setupPolyfill() { 'emptyHTML': tt.emptyHTML, '_isPolyfill_': true, }); + Object.defineProperty( + publicApi, + 'defaultPolicy', + Object.getOwnPropertyDescriptor(tt, 'defaultPolicy') || {}); + window[rootProperty] = Object.freeze(publicApi); window['TrustedHTML'] = tt.TrustedHTML; diff --git a/src/trustedtypes.js b/src/trustedtypes.js index f8419645..209fffd0 100644 --- a/src/trustedtypes.js +++ b/src/trustedtypes.js @@ -644,6 +644,7 @@ export const trustedTypesBuilderTestOnly = function() { getPropertyType, getTypeMapping, emptyHTML, + defaultPolicy, // Just to make the compiler happy, this is overridden below. TrustedHTML: TrustedHTML, TrustedURL: TrustedURL, @@ -651,6 +652,11 @@ export const trustedTypesBuilderTestOnly = function() { TrustedScript: TrustedScript, }); + defineProperty(api, 'defaultPolicy', { + get: getDefaultPolicy, + set: () => {}, + }); + return { trustedTypes: freeze(api), setAllowedPolicyNames, diff --git a/tests/trustedtypes_test.js b/tests/trustedtypes_test.js index a0fd58b3..8ede3f89 100644 --- a/tests/trustedtypes_test.js +++ b/tests/trustedtypes_test.js @@ -510,6 +510,27 @@ describe('v2 TrustedTypes', () => { }); }); + describe('factory defaultPolicy property', () => { + it('returns null initially', () => { + expect(TrustedTypes.defaultPolicy).toBe(null); + }); + + it('returns the default policy if created', () => { + TrustedTypes.createPolicy('foo', {}); + const policy = TrustedTypes.createPolicy('default', {}); + TrustedTypes.createPolicy('bar', {}); + + expect(TrustedTypes.defaultPolicy).toBe(policy); + }); + + it('is readonly', () => { + TrustedTypes.defaultPolicy = TrustedTypes.createPolicy('foo', {}); + + expect(TrustedTypes.defaultPolicy).toBe(null); + }); + }); + + describe('resetDefaultPolicy', () => { beforeEach(() => { TrustedTypes.createPolicy('default', {});