From 51a114a3487f9af6c242e94dbabddf1b92f2f169 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 20 Jan 2021 16:12:37 +0100 Subject: [PATCH 1/6] update es externs --- javascript/externs/es/es3.js | 472 +++++++++------- javascript/externs/es/es5.js | 53 +- javascript/externs/es/es6.js | 673 ++++++++++++++++++++--- javascript/externs/es/es6_collections.js | 59 +- javascript/externs/es/intl.js | 104 +++- 5 files changed, 1038 insertions(+), 323 deletions(-) diff --git a/javascript/externs/es/es3.js b/javascript/externs/es/es3.js index 43968041b754..57efb4984af0 100644 --- a/javascript/externs/es/es3.js +++ b/javascript/externs/es/es3.js @@ -27,26 +27,34 @@ // START ES6 RETROFIT CODE // symbol, Symbol and Symbol.iterator are actually ES6 types but some -// Some types require them to be part of their definition (such as Array). +// base types require them to be part of their definition (such as Array). -// TODO(johnlenz): symbol should be a primitive type. -/** @typedef {?} */ -var symbol; - /** - * @param {string=} opt_description + * @constructor + * @param {*=} opt_description * @return {symbol} + * @nosideeffects + * Note: calling `new Symbol('x');` will always throw, but we mark this + * nosideeffects because the compiler does not promise to preserve all coding + * errors. */ function Symbol(opt_description) {} +/** + * @const {string|undefined} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description + */ +Symbol.prototype.description; + + /** * @param {string} sym - * @return {symbol|undefined} + * @return {symbol} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for */ -Symbol.for; +Symbol.for = function(sym) {}; /** @@ -54,18 +62,87 @@ Symbol.for; * @return {string|undefined} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor */ -Symbol.keyFor; +Symbol.keyFor = function(sym) {}; // Well known symbols -/** @const {symbol} */ +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator + * @const {symbol} + */ +Symbol.asyncIterator; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance + * @const {symbol} + */ +Symbol.hasInstance; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable + * @const {symbol} + */ +Symbol.isConcatSpreadable; + +/** + * @const {symbol} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator + */ Symbol.iterator; -/** @const {symbol} */ +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/match + * @const {symbol} + */ +Symbol.match; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/matchAll + * @const {symbol} + */ +Symbol.matchAll; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/replace + * @const {symbol} + */ +Symbol.replace; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/search + * @const {symbol} + */ +Symbol.search; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species + * @const {symbol} + */ +Symbol.species; + +// /** +// * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/split +// * @const {symbol} +// */ +// Symbol.split; + +/** + * @const {symbol} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive + */ +Symbol.toPrimitive; + +/** + * @const {symbol} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag + */ Symbol.toStringTag; -/** @const {symbol} */ +/** + * @const {symbol} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables + */ Symbol.unscopables; @@ -89,9 +166,10 @@ IIterableResult.prototype.value; */ function Iterable() {} -// TODO(johnlenz): remove this when the compiler understands "symbol" natively +// TODO(johnlenz): remove the suppression when the compiler understands +// "symbol" natively /** - * @return {Iterator} + * @return {!Iterator} * @suppress {externsValidation} */ Iterable.prototype[Symbol.iterator] = function() {}; @@ -99,23 +177,26 @@ Iterable.prototype[Symbol.iterator] = function() {}; /** + * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for + * anything. https://github.com/google/closure-compiler/issues/3489 * @interface - * @template VALUE + * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol */ function Iterator() {} /** - * @param {VALUE=} value + * @param {?=} opt_value * @return {!IIterableResult} */ -Iterator.prototype.next; +Iterator.prototype.next = function(opt_value) {}; /** * Use this to indicate a type is both an Iterator and an Iterable. + * * @interface - * @extends {Iterator} + * @extends {Iterator} * @extends {Iterable} * @template T */ @@ -126,7 +207,7 @@ function IteratorIterable() {} /** * @interface - * @template KEY1, VALUE1 + * @template IOBJECT_KEY, IOBJECT_VALUE */ function IObject() {} @@ -142,8 +223,8 @@ IArrayLike.prototype.length; /** * @constructor - * @implements {IArrayLike} - * @template T + * @implements {IArrayLike} + * @implements {Iterable} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments */ function Arguments() {} @@ -170,10 +251,12 @@ Arguments.prototype.caller; Arguments.prototype.length; /** - * Not actually a global variable, but we need it in order for the current type - * checker to typecheck the "arguments" variable in a function correctly. - * TODO(tbreisacher): When the old type checker is gone, delete this and add - * an 'arguments' variable of type Array in the d8 externs. + * Not actually a global variable, when running in a browser environment. But + * we need it in order for the type checker to typecheck the "arguments" + * variable in a function correctly. + * + * TODO(tbreisacher): There should be a separate 'arguments' variable of type + * `Array`, in the d8 externs. * * @type {!Arguments} * @see http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments @@ -204,7 +287,7 @@ var undefined; /** * @param {string} uri * @return {string} - * @nosideeffects + * @throws {URIError} when used wrongly. * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI */ function decodeURI(uri) {} @@ -212,7 +295,7 @@ function decodeURI(uri) {} /** * @param {string} uri * @return {string} - * @nosideeffects + * @throws {URIError} when used wrongly. * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent */ function decodeURIComponent(uri) {} @@ -220,7 +303,8 @@ function decodeURIComponent(uri) {} /** * @param {string} uri * @return {string} - * @nosideeffects + * @throws {URIError} if one attempts to encode a surrogate which is not part of + * a high-low pair. * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI */ function encodeURI(uri) {} @@ -228,7 +312,8 @@ function encodeURI(uri) {} /** * @param {string} uri * @return {string} - * @nosideeffects + * @throws {URIError} if one attempts to encode a surrogate which is not part of + * a high-low pair. * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent */ function encodeURIComponent(uri) {} @@ -278,9 +363,9 @@ function isNaN(num) {} function parseFloat(num) {} /** - * Parse an integer. Use of {@code parseInt} without {@code base} is strictly + * Parse an integer. Use of `parseInt` without `base` is strictly * banned in Google. If you really want to parse octal or hex based on the - * leader, then pass {@code undefined} as the base. + * leader, then pass `undefined` as the base. * * @param {*} num * @param {number|undefined} base @@ -290,8 +375,23 @@ function parseFloat(num) {} */ function parseInt(num, base) {} + /** - * @param {string} code + * Represents a string of JavaScript code that is known to have come from a + * trusted source. Part of Trusted Types. + * + * The main body Trusted Types type definitions reside in the file + * `w3c_trusted_types.js`. This definition was placed here so that it would be + * accessible to `eval()`. + * + * @constructor + * @see https://w3c.github.io/webappsec-trusted-types/dist/spec/#trusted-script + */ +function TrustedScript() {} + + +/** + * @param {string|!TrustedScript} code * @return {*} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval */ @@ -325,6 +425,7 @@ Object.prototype.constructor = function() {}; * @modifies {this} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter * @return {undefined} + * @deprecated */ Object.prototype.__defineGetter__ = function(sprop, fun) {}; @@ -338,6 +439,7 @@ Object.prototype.__defineGetter__ = function(sprop, fun) {}; * @modifies {this} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter * @return {undefined} + * @deprecated */ Object.prototype.__defineSetter__ = function(sprop, fun) {}; @@ -369,6 +471,7 @@ Object.prototype.isPrototypeOf = function(other) {}; * getter should be returned * @return {Function} * @nosideeffects + * @deprecated * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter */ Object.prototype.__lookupGetter__ = function(sprop) {}; @@ -381,6 +484,7 @@ Object.prototype.__lookupGetter__ = function(sprop) {}; * setter should be returned. * @return {Function} * @nosideeffects + * @deprecated * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter */ Object.prototype.__lookupSetter__ = function(sprop) {}; @@ -391,6 +495,7 @@ Object.prototype.__lookupSetter__ = function(sprop) {}; * * @param {Function} fun * @return {*} + * @deprecated * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod */ Object.prototype.__noSuchMethod__ = function(fun) {}; @@ -421,7 +526,7 @@ Object.prototype.__proto__; * for..in loop, with the exception of properties inherited through the * prototype chain. * - * @param {string} propertyName + * @param {string|symbol} propertyName * @return {boolean} * @nosideeffects * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable @@ -455,33 +560,13 @@ Object.prototype.toSource = function() {}; Object.prototype.toString = function() {}; /** - * Removes a watchpoint set with the {@see Object.prototype.watch} method. - * Mozilla-only. - * @param {string} prop The name of a property of the object. - * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/unwatch - * @return {undefined} - */ -Object.prototype.unwatch = function(prop) {}; - -/** - * Returns the object's {@code this} value. + * Returns the object's `this` value. * @return {*} * @nosideeffects * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf */ Object.prototype.valueOf = function() {}; -/** - * Sets a watchpoint method. - * Mozilla-only. - * @param {string} prop The name of a property of the object. - * @param {Function} handler A function to call. - * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch - * @return {undefined} - */ -Object.prototype.watch = function(prop, handler) {}; - - /** * @constructor * @param {...*} var_args @@ -554,7 +639,7 @@ Function.prototype.toString = function() {}; * @implements {IArrayLike} * @implements {Iterable} * @param {...*} var_args - * @return {!Array} + * @return {!Array} * @nosideeffects * @template T * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array @@ -605,11 +690,12 @@ Array.prototype.join = function(opt_separator) {}; */ Array.prototype.pop = function() {}; +// TODO(bradfordcsmith): remove "undefined" from the var_args of push /** * Mutates an array by appending the given elements and returning the new * length of the array. * - * @param {...T} var_args + * @param {...(T|undefined)} var_args * @return {number} The new length of the array. * @this {IArrayLike} * @template T @@ -645,9 +731,8 @@ Array.prototype.shift = function() {}; /** * Extracts a section of an array and returns a new array. * - * @param {*=} opt_begin Zero-based index at which to begin extraction. A - * non-number type will be auto-cast by the browser to a number. - * @param {*=} opt_end Zero-based index at which to end extraction. slice + * @param {?number=} begin Zero-based index at which to begin extraction. + * @param {?number=} end Zero-based index at which to end extraction. slice * extracts up to but not including end. * @return {!Array} * @this {IArrayLike|string} @@ -655,12 +740,12 @@ Array.prototype.shift = function() {}; * @nosideeffects * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice */ -Array.prototype.slice = function(opt_begin, opt_end) {}; +Array.prototype.slice = function(begin, end) {}; /** * Sorts the elements of an array in place. * - * @param {function(T,T):number=} opt_compareFunction Specifies a function that + * @param {function(T,T):number=} opt_compareFn Specifies a function that * defines the sort order. * @this {IArrayLike} * @template T @@ -668,17 +753,16 @@ Array.prototype.slice = function(opt_begin, opt_end) {}; * @return {!Array} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort */ -Array.prototype.sort = function(opt_compareFunction) {}; +Array.prototype.sort = function(opt_compareFn) {}; /** * Changes the content of an array, adding new elements while removing old * elements. * - * @param {*=} opt_index Index at which to start changing the array. If negative, - * will begin that many elements from the end. A non-number type will be - * auto-cast by the browser to a number. - * @param {*=} opt_howMany An integer indicating the number of old array elements - * to remove. + * @param {?number=} index Index at which to start changing the array. If + * negative, will begin that many elements from the end. + * @param {?number=} howMany An integer indicating the number of old array + * elements to remove. * @param {...T} var_args * @return {!Array} * @this {IArrayLike} @@ -686,7 +770,7 @@ Array.prototype.sort = function(opt_compareFunction) {}; * @template T * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice */ -Array.prototype.splice = function(opt_index, opt_howMany, var_args) {}; +Array.prototype.splice = function(index, howMany, var_args) {}; /** * @return {string} @@ -839,75 +923,6 @@ Array.prototype.input; */ Array.prototype.length; -/** - * @param {IArrayLike} arr - * @param {?function(this:S, T, number, ?) : ?} callback - * @param {S=} opt_context - * @return {boolean} - * @template T,S - */ -Array.every = function(arr, callback, opt_context) {}; - -/** - * @param {IArrayLike} arr - * @param {?function(this:S, T, number, ?) : ?} callback - * @param {S=} opt_context - * @return {!Array} - * @template T,S - */ -Array.filter = function(arr, callback, opt_context) {}; - -/** - * @param {IArrayLike} arr - * @param {?function(this:S, T, number, ?) : ?} callback - * @param {S=} opt_context - * @template T,S - * @return {undefined} - */ -Array.forEach = function(arr, callback, opt_context) {}; - -/** - * Mozilla 1.6+ only. - * @param {IArrayLike} arr - * @param {T} obj - * @param {number=} opt_fromIndex - * @return {number} - * @template T - * @nosideeffects - * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf - */ -Array.indexOf = function(arr, obj, opt_fromIndex) {}; - -/** - * Mozilla 1.6+ only. - * @param {IArrayLike} arr - * @param {T} obj - * @param {number=} opt_fromIndex - * @return {number} - * @template T - * @nosideeffects - * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf - */ -Array.lastIndexOf = function(arr, obj, opt_fromIndex) {}; - -/** - * @param {IArrayLike} arr - * @param {?function(this:S, T, number, !Array): R} callback - * @param {S=} opt_context - * @return {!Array} - * @template T,S,R - */ -Array.map = function(arr, callback, opt_context) {}; - -/** - * @param {IArrayLike} arr - * @param {?function(this:S, T, number, ?) : ?} callback - * @param {S=} opt_context - * @return {boolean} - * @template T,S - */ -Array.some = function(arr, callback, opt_context) {}; - /** * Introduced in 1.8.5. * @param {*} arr @@ -999,35 +1014,97 @@ Number.prototype.toString = function(opt_radix) {}; // Properties. /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE */ Number.MAX_VALUE; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE */ Number.MIN_VALUE; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN */ Number.NaN; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY */ Number.NEGATIVE_INFINITY; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY */ Number.POSITIVE_INFINITY; +/** + * @constructor + * @param {number|string|bigint} arg + * @return {bigint} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt + */ +function BigInt(arg) {} + +/** + * Wraps a BigInt value to a signed integer between -2^(width-1) and + * 2^(width-1)-1. + * @param {number} width + * @param {bigint} bigint + * @return {bigint} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/asIntN + */ +BigInt.asIntN = function(width, bigint) {}; + +/** + * Wraps a BigInt value to an unsigned integer between 0 and (2^width)-1. + * @param {number} width + * @param {bigint} bigint + * @return {bigint} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/asUintN + */ +BigInt.asUintN = function(width, bigint) {}; + +/** + * Returns a string with a language-sensitive representation of this BigInt. + * @param {string|!Array=} locales + * @param {Object=} options + * @return {string} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/toLocaleString + * @override + */ +BigInt.prototype.toLocaleString = function(locales, options) {}; + +/** + * Returns a string representing the specified BigInt object. The trailing "n" + * is not part of the string. + * @this {BigInt|bigint} + * @param {number=} radix + * @return {string} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/toString + * @override + */ +BigInt.prototype.toString = function(radix) {}; + +/** + * Returns the wrapped primitive value of a BigInt object. + * @return {bigint} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/valueOf + * @override + */ +BigInt.prototype.valueOf = function() {}; + /** * @const @@ -1190,49 +1267,49 @@ Math.toSource = function() {}; // Properties: /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E */ Math.E; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2 */ Math.LN2; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10 */ Math.LN10; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E */ Math.LOG2E; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E */ Math.LOG10E; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI */ Math.PI; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2 */ Math.SQRT1_2; /** - * @type {number} + * @const {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2 */ Math.SQRT2; @@ -1696,6 +1773,7 @@ Date.prototype.valueOf; /** * @constructor + * @implements {Iterable} * @param {*=} opt_str * @return {string} * @nosideeffects @@ -1891,24 +1969,23 @@ String.prototype.quote = function() {}; * This may have side-effects if the replacement function has side-effects. * * @this {String|string} - * @param {RegExp|string} regex - * @param {string|Function} str - * @param {string=} opt_flags + * @param {RegExp|string} pattern + * @param {?string|function(string, ...?):*} replacement * @return {string} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace */ -String.prototype.replace = function(regex, str, opt_flags) {}; +String.prototype.replace = function(pattern, replacement) {}; /** * Executes the search for a match between a regular expression and this String * object. * * @this {String|string} - * @param {RegExp|string} regexp + * @param {RegExp|string} pattern * @return {number} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search */ -String.prototype.search = function(regexp) {}; +String.prototype.search = function(pattern) {}; /** * @this {String|string} @@ -1983,19 +2060,21 @@ String.prototype.sup = function() {}; /** * @this {String|string} + * @param {(string|Array)=} opt_locales * @return {string} * @nosideeffects * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase */ -String.prototype.toLocaleUpperCase = function() {}; +String.prototype.toLocaleUpperCase = function(opt_locales) {}; /** * @this {String|string} + * @param {(string|Array)=} opt_locales * @return {string} * @nosideeffects * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase */ -String.prototype.toLocaleLowerCase = function() {}; +String.prototype.toLocaleLowerCase = function(opt_locales) {}; /** * @this {String|string} @@ -2047,7 +2126,7 @@ String.prototype.length; * @param {*=} opt_pattern * @param {*=} opt_flags * @return {!RegExp} - * @nosideeffects + * @throws {SyntaxError} if opt_pattern is an invalid pattern. * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp */ function RegExp(opt_pattern, opt_flags) {} @@ -2065,9 +2144,7 @@ RegExp.prototype.compile = function(pattern, opt_flags) {}; /** * @param {*} str The string to search. - * @return {Array} This should really return an Array with a few - * special properties, but we do not have a good way to model this in - * our type system. Also see String.prototype.match. + * @return {?RegExpResult} * @see http://msdn.microsoft.com/en-us/library/z908hy33(VS.85).aspx * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec */ @@ -2088,6 +2165,34 @@ RegExp.prototype.test = function(str) {}; */ RegExp.prototype.toString = function() {}; +/** + * @constructor + * @extends {Array} + */ +var RegExpResult = function() {}; + + +/** @type {number} */ +RegExpResult.prototype.index; + + +/** @type {string} */ +RegExpResult.prototype.input; + + +/** @type {number} */ +RegExpResult.prototype.length; + + +/** + * Not actually part of ES3; was added in 2018. + * https://github.com/tc39/proposal-regexp-named-groups + * + * @type {!Object} + */ +RegExpResult.prototype.groups; + + // Constructor properties: /** @@ -2195,6 +2300,13 @@ RegExp.prototype.ignoreCase; */ RegExp.prototype.lastIndex; +/** + * Whether or not the regular expression uses lastIndex. + * @type {boolean} + * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky + */ +RegExp.prototype.sticky; + /** * Whether or not to search in strings across multiple lines. * @type {boolean} @@ -2209,6 +2321,12 @@ RegExp.prototype.multiline; */ RegExp.prototype.source; +/** + * The flags the regex was created with. + * @type {string} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags + */ +RegExp.prototype.flags; /** * @constructor @@ -2359,40 +2477,12 @@ function TypeError(opt_message, opt_file, opt_line) {} */ function URIError(opt_message, opt_file, opt_line) {} - // JScript extensions. // @see http://msdn.microsoft.com/en-us/library/894hfyb4(VS.80).aspx /** * @see http://msdn.microsoft.com/en-us/library/7sw4ddf8.aspx * @type {function(new:?, string, string=)} + * @deprecated */ function ActiveXObject(progId, opt_location) {} - -/** - * @return {string} - * @nosideeffects - * @see http://msdn.microsoft.com/en-us/library/9k34bww2(VS.80).aspx - */ -function ScriptEngine() {} - -/** - * @return {number} - * @nosideeffects - * @see http://msdn.microsoft.com/en-us/library/yf25ky07(VS.80).aspx - */ -function ScriptEngineMajorVersion() {} - -/** - * @return {number} - * @nosideeffects - * @see http://msdn.microsoft.com/en-us/library/wx3812cz(VS.80).aspx - */ -function ScriptEngineMinorVersion() {} - -/** - * @return {number} - * @nosideeffects - * @see http://msdn.microsoft.com/en-us/library/e98hsk2f(VS.80).aspx - */ -function ScriptEngineBuildVersion() {} diff --git a/javascript/externs/es/es5.js b/javascript/externs/es/es5.js index ffbc01e6aba8..05d00439fae4 100644 --- a/javascript/externs/es/es5.js +++ b/javascript/externs/es/es5.js @@ -22,9 +22,9 @@ /** - * @param {Object|undefined} selfObj Specifies the object to which |this| should - * point when the function is run. If the value is null or undefined, it - * will default to the global object. + * @param {?Object|undefined} selfObj Specifies the object to which |this| + * should point when the function is run. If the value is null or undefined, + * it will default to the global object. * @param {...*} var_args Additional arguments that are partially * applied to fn. * @return {!Function} A partially-applied form of the Function on which @@ -66,13 +66,12 @@ String.prototype.trimRight = function() {}; * A object property descriptor used by Object.create, Object.defineProperty, * Object.defineProperties, Object.getOwnPropertyDescriptor. * - * Note: not a real constructor. - * @constructor + * @record * @template THIS */ function ObjectPropertyDescriptor() {} -/** @type {*} */ +/** @type {(*|undefined)} */ ObjectPropertyDescriptor.prototype.value; /** @type {(function(this: THIS):?)|undefined} */ @@ -92,29 +91,33 @@ ObjectPropertyDescriptor.prototype.configurable; /** - * @param {Object} proto - * @param {Object=} opt_properties A map of ObjectPropertyDescriptors. + * @param {?Object} proto + * @param {?Object>=} properties + * A map of ObjectPropertyDescriptors. * @return {!Object} * @nosideeffects * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create */ -Object.create = function(proto, opt_properties) {}; +Object.create = function(proto, properties) {}; /** - * @param {!Object} obj - * @param {string} prop - * @param {!Object} descriptor A ObjectPropertyDescriptor. - * @return {!Object} + * @template T + * @param {T} obj + * @param {string|symbol} prop + * @param {!ObjectPropertyDescriptor} descriptor A ObjectPropertyDescriptor. + * @return {T} * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty */ Object.defineProperty = function(obj, prop, descriptor) {}; /** - * @param {!Object} obj - * @param {!Object} props A map of ObjectPropertyDescriptors. - * @return {!Object} + * @template T + * @param {T} obj + * @param {!Object>} props A map of + * ObjectPropertyDescriptors. + * @return {T} * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties */ Object.defineProperties = function(obj, props) {}; @@ -122,7 +125,7 @@ Object.defineProperties = function(obj, props) {}; /** * @param {T} obj - * @param {string} prop + * @param {string|symbol} prop * @return {!ObjectPropertyDescriptor|undefined} * @nosideeffects * @template T @@ -213,10 +216,20 @@ Object.isFrozen = function(obj) {}; /** + * We acknowledge that this function does not exist on the `Object.prototype` + * and is declared in this file for other reasons. + * + * When `toJSON` is defined as a property on an object it can be used in + * conjunction with the JSON.stringify() function. + * + * It is defined here to: + * (1) Prevent the compiler from renaming the property on internal classes. + * (2) Enforce that the signature is correct for users defining it. + * * @param {string=} opt_key The JSON key for this object. * @return {*} The serializable representation of this object. Note that this * need not be a string. See http://goo.gl/PEUvs. - * @see https://es5.github.io/#x15.12.3 + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior */ Object.prototype.toJSON = function(opt_key) {}; @@ -238,7 +251,7 @@ Date.prototype.toJSON = function(opt_ignoredKey) {}; /** * @param {string} jsonStr The string to parse. - * @param {(function(string, *) : *)=} opt_reviver + * @param {(function(this:?, string, *) : *)=} opt_reviver * @return {*} The JSON object. * @throws {Error} */ @@ -247,7 +260,7 @@ JSON.parse = function(jsonStr, opt_reviver) {}; /** * @param {*} jsonObj Input object. - * @param {(Array|(function(string, *) : *)|null)=} opt_replacer + * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer * @param {(number|string)=} opt_space * @return {string} JSON string which represents jsonObj. * @throws {Error} diff --git a/javascript/externs/es/es6.js b/javascript/externs/es/es6.js index 08e2a47c2701..5222bd124b5b 100644 --- a/javascript/externs/es/es6.js +++ b/javascript/externs/es/es6.js @@ -21,13 +21,21 @@ * @externs */ - +/** + * Some es6 definitions: + * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator, + * IteratorIterable moved to es3 file, because some base type requires them, and + * we want to keep them together. If you add new externs related to those types + * define them together in the es3 file. + */ /** - * @constructor + * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for + * anything. https://github.com/google/closure-compiler/issues/3489 + * @interface * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator - * @implements {IteratorIterable} - * @template VALUE + * @extends {IteratorIterable} + * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T */ function Generator() {} @@ -51,9 +59,6 @@ Generator.prototype.return = function(value) {}; Generator.prototype.throw = function(exception) {}; -// TODO(johnlenz): Array and Arguments should be Iterable. - - /** * @param {number} value @@ -147,13 +152,12 @@ Math.sign = function(value) {}; Math.cbrt = function(value) {}; /** - * @param {number} value1 * @param {...number} var_args * @return {number} * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot */ -Math.hypot = function(value1, var_args) {}; +Math.hypot = function(var_args) {}; /** * @param {number} value1 @@ -172,6 +176,14 @@ Math.imul = function(value1, value2) {}; */ Math.clz32 = function(value) {}; +/** + * @param {number} value + * @return {number} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + */ +Math.fround = function(value) {}; + /** * @param {*} a @@ -180,7 +192,7 @@ Math.clz32 = function(value) {}; * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ -Object.is; +Object.is = function(a, b) {}; /** @@ -195,6 +207,41 @@ Object.is; */ Number.prototype.toLocaleString = function(opt_locales, opt_options) {}; +/** + * Returns the wrapped primitive value of this Number object. + * @return {number} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf + * @override + */ +Number.prototype.valueOf = function() {}; + + +/** + * Pads the end of the string so that it reaches the given length. + * NOTE: this is an ES2017 (ES8) extern. + * + * @param {number} targetLength The target length. + * @param {string=} opt_padString The string to pad with. + * @this {String|string} + * @return {string} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd + */ +String.prototype.padEnd = function(targetLength, opt_padString) {}; + +/** + * Pads the start of the string so that it reaches the given length. + * NOTE: this is an ES2017 (ES8) extern. + * + * @param {number} targetLength The target length. + * @param {string=} opt_padString The string to pad with. + * @this {String|string} + * @return {string} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart + */ +String.prototype.padStart = function(targetLength, opt_padString) {}; /** * Repeats the string the given number of times. @@ -279,6 +326,33 @@ String.prototype.endsWith = function(searchString, opt_position) {}; */ String.prototype.includes = function(searchString, opt_position) {}; +/** + * @this {String|string} + * @return {string} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart + */ +String.prototype.trimStart = function() {}; + + +/** + * @this {String|string} + * @return {string} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd + */ +String.prototype.trimEnd = function() {}; + + +/** + * @this {String|string} + * @param {!RegExp|string} regexp + * @return {!IteratorIterable} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll + */ +String.prototype.matchAll = function(regexp) {}; + /** * @see http://dev.w3.org/html5/postmsg/ @@ -289,7 +363,6 @@ function Transferable() {} /** * @param {number} length The length in bytes * @constructor - * @noalias * @throws {Error} * @implements {Transferable} */ @@ -317,7 +390,6 @@ ArrayBuffer.isView = function(arg) {}; /** * @constructor - * @noalias */ function ArrayBufferView() {} @@ -331,6 +403,26 @@ ArrayBufferView.prototype.byteOffset; ArrayBufferView.prototype.byteLength; +/** + * @param {number} length The length in bytes + * @constructor + * @throws {Error} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer + */ +function SharedArrayBuffer(length) {} + +/** @type {number} */ +SharedArrayBuffer.prototype.byteLength; + +/** + * @param {number} begin + * @param {number=} opt_end + * @return {!SharedArrayBuffer} + * @nosideeffects + */ +SharedArrayBuffer.prototype.slice = function(begin, opt_end) {}; + + /** * @typedef {!ArrayBuffer|!ArrayBufferView} */ @@ -424,6 +516,7 @@ TypedArray.prototype.findIndex = function(callback, opt_thisArg) {}; TypedArray.prototype.forEach = function(callback, opt_thisArg) {}; /** + * NOTE: this is an ES2016 (ES7) extern. * @param {number} searchElement * @param {number=} opt_fromIndex * @return {boolean} @@ -479,7 +572,8 @@ TypedArray.prototype.length; TypedArray.prototype.map = function(callback, opt_thisArg) {}; /** - * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback + * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} + * callback * @param {INIT=} opt_initialValue * @return {RET} * @template INIT,RET @@ -489,7 +583,8 @@ TypedArray.prototype.map = function(callback, opt_thisArg) {}; TypedArray.prototype.reduce = function(callback, opt_initialValue) {}; /** - * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback + * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} + * callback * @param {INIT=} opt_initialValue * @return {RET} * @template INIT,RET @@ -582,13 +677,12 @@ TypedArray.prototype.toString = function() {}; TypedArray.prototype[Symbol.iterator] = function() {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} If the user passes a backing array, then indexed * accesses will modify the backing array. JSCompiler does not model @@ -608,7 +702,7 @@ function Int8Array(length, opt_byteOffset, opt_length) {} Int8Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -626,13 +720,12 @@ Int8Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -642,7 +735,7 @@ function Uint8Array(length, opt_byteOffset, opt_length) {} Uint8Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -660,13 +753,12 @@ Uint8Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -676,7 +768,7 @@ function Uint8ClampedArray(length, opt_byteOffset, opt_length) {} Uint8ClampedArray.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -703,13 +795,12 @@ var CanvasPixelArray; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -719,7 +810,7 @@ function Int16Array(length, opt_byteOffset, opt_length) {} Int16Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -737,13 +828,12 @@ Int16Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -753,7 +843,7 @@ function Uint16Array(length, opt_byteOffset, opt_length) {} Uint16Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -771,13 +861,12 @@ Uint16Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -787,7 +876,7 @@ function Int32Array(length, opt_byteOffset, opt_length) {} Int32Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -805,13 +894,12 @@ Int32Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -821,7 +909,7 @@ function Uint32Array(length, opt_byteOffset, opt_length) {} Uint32Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -839,13 +927,12 @@ Uint32Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -855,7 +942,7 @@ function Float32Array(length, opt_byteOffset, opt_length) {} Float32Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -873,13 +960,12 @@ Float32Array.of = function(var_args) {}; /** - * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array - * or buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * length or array or buffer * @param {number=} opt_byteOffset * @param {number=} opt_length * @constructor * @extends {TypedArray} - * @noalias * @throws {Error} * @modifies {arguments} */ @@ -889,7 +975,7 @@ function Float64Array(length, opt_byteOffset, opt_length) {} Float64Array.BYTES_PER_ELEMENT; /** - * @param {!Array} source + * @param {string|!IArrayLike|!Iterable} source * @param {function(this:S, number): number=} opt_mapFn * @param {S=} opt_this * @template S @@ -907,12 +993,76 @@ Float64Array.of = function(var_args) {}; /** - * @param {ArrayBuffer} buffer + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * lengthOrArrayOrBuffer + * @param {number=} byteOffset + * @param {number=} bufferLength + * @constructor + * @extends {TypedArray} + * @throws {Error} + * @modifies {arguments} + */ +function BigInt64Array(lengthOrArrayOrBuffer, byteOffset, bufferLength) {} + +/** @const {number} */ +BigInt64Array.BYTES_PER_ELEMENT; + +/** + * @param {string|!IArrayLike|!Iterable} source + * @param {function(this:S, bigint): bigint=} mapFn + * @param {S=} thisArg + * @template S + * @return {!BigInt64Array} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from + */ +BigInt64Array.from = function(source, mapFn, thisArg) {}; + +/** + * @param {...bigint} var_args + * @return {!BigInt64Array} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of + */ +BigInt64Array.of = function(var_args) {}; + + +/** + * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer} + * lengthOrArrayOrBuffer + * @param {number=} byteOffset + * @param {number=} bufferLength + * @constructor + * @extends {TypedArray} + * @throws {Error} + * @modifies {arguments} + */ +function BigUint64Array(lengthOrArrayOrBuffer, byteOffset, bufferLength) {} + +/** @const {number} */ +BigUint64Array.BYTES_PER_ELEMENT; + +/** + * @param {string|!IArrayLike|!Iterable} source + * @param {function(this:S, bigint): bigint=} mapFn + * @param {S=} thisArg + * @template S + * @return {!BigUint64Array} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from + */ +BigUint64Array.from = function(source, mapFn, thisArg) {}; + +/** + * @param {...bigint} var_args + * @return {!BigUint64Array} + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of + */ +BigUint64Array.of = function(var_args) {}; + +/** + * @param {ArrayBuffer|SharedArrayBuffer} buffer * @param {number=} opt_byteOffset * @param {number=} opt_byteLength * @constructor * @extends {ArrayBufferView} - * @noalias * @throws {Error} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/DataView */ @@ -980,6 +1130,22 @@ DataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {}; */ DataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {}; +/** + * @param {number} byteOffset + * @param {boolean=} littleEndian + * @return {bigint} + * @throws {Error} + */ +DataView.prototype.getBigInt64 = function(byteOffset, littleEndian) {}; + +/** + * @param {number} byteOffset + * @param {boolean=} littleEndian + * @return {bigint} + * @throws {Error} + */ +DataView.prototype.getBigUint64 = function(byteOffset, littleEndian) {}; + /** * @param {number} byteOffset * @param {number} value @@ -1052,6 +1218,24 @@ DataView.prototype.setFloat32 = function( DataView.prototype.setFloat64 = function( byteOffset, value, opt_littleEndian) {}; +/** + * @param {number} byteOffset + * @param {bigint} value + * @param {boolean=} littleEndian + * @throws {Error} + * @return {undefined} + */ +DataView.prototype.setBigInt64 = function(byteOffset, value, littleEndian) {}; + +/** + * @param {number} byteOffset + * @param {bigint} value + * @param {boolean=} littleEndian + * @throws {Error} + * @return {undefined} + */ +DataView.prototype.setBigUint64 = function(byteOffset, value, littleEndian) {}; + /** * @see https://github.com/promises-aplus/promises-spec @@ -1066,6 +1250,7 @@ var Thenable; * {@see goog.Thenable} inherits from this making all promises * interoperate. * @interface + * @struct * @template TYPE */ function IThenable() {} @@ -1077,8 +1262,8 @@ function IThenable() {} * @return {RESULT} * @template VALUE * - * When a Promise (or thenable) is returned from the fulfilled callback, - * the result is the payload of that promise, not the promise itself. + * When a `Thenable` is fulfilled or rejected with another `Thenable`, the + * payload of the second is used as the payload of the first. * * @template RESULT := type('IThenable', * cond(isUnknown(VALUE), unknown(), @@ -1144,6 +1329,50 @@ Promise.reject = function(opt_error) {}; */ Promise.all = function(iterable) {}; +/** + * Record type representing a single element of the array value one gets from + * Promise.allSettled. + * + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled + * @record + * @template VALUE + */ +Promise.AllSettledResultElement = function() {}; + +/** + * 'fulfilled' or 'rejected' to indicate the final state of the corresponding + * Promise. + * @type {string} + */ +Promise.AllSettledResultElement.prototype.status; + +/** + * Exists only if the status field is 'fulfilled' + * @type {VALUE|undefined} + */ +Promise.AllSettledResultElement.prototype.value; + +/** + * Exists only if the status field is 'rejected' + * @type {*|undefined} + */ +Promise.AllSettledResultElement.prototype.reason; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled + * @param {!Iterable} iterable + * @return {!Promise>>} + * @template VALUE + * @template RESULT := mapunion(VALUE, (V) => + * cond(isUnknown(V), + * unknown(), + * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), + * templateTypeOf(V, 0), + * cond(sub(V, 'Thenable'), unknown(), V)))) + * =: + */ +Promise.allSettled = function(iterable) {}; + /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise @@ -1167,8 +1396,8 @@ Promise.race = function(iterable) {}; * @return {RESULT} * @template VALUE * - * When a Promise (or thenable) is returned from the fulfilled callback, - * the result is the payload of that promise, not the promise itself. + * When a `Thenable` is fulfilled or rejected with another `Thenable`, the + * payload of the second is used as the payload of the first. * * @template RESULT := type('Promise', * cond(isUnknown(VALUE), unknown(), @@ -1185,13 +1414,38 @@ Promise.prototype.then = function(opt_onFulfilled, opt_onRejected) {}; /** - * @param {function(*): RESULT} onRejected - * @return {!Promise} - * @template RESULT + * @param {function(*):VALUE} onRejected + * @return {!Promise} A Promise of the original type or a possibly + * a different type depending on whether the parent promise was rejected. + * + * @template VALUE + * + * When a `Thenable` is rejected with another `Thenable`, the payload of the + * second is used as the payload of the first. + * + * @template RESULT := cond( + * isUnknown(VALUE), + * unknown(), + * mapunion(VALUE, (V) => + * cond( + * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), + * templateTypeOf(V, 0), + * cond( + * sub(V, 'Thenable'), + * unknown(), + * V)))) + * =: */ Promise.prototype.catch = function(onRejected) {}; +/** + * @param {function()} callback + * @return {!Promise} + */ +Promise.prototype.finally = function(callback) {}; + + /** * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of * @param {...T} var_args @@ -1216,6 +1470,14 @@ Array.from = function(arrayLike, opt_mapFn, opt_this) {}; Array.prototype.keys; +/** + * @return {!IteratorIterable} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values + */ +Array.prototype.values; + + /** * @return {!IteratorIterable>} Iterator of [key, value] pairs. */ @@ -1223,32 +1485,32 @@ Array.prototype.entries; /** - * @param {!function(this:S, T, number, !Array): boolean} predicate + * @param {function(this:S, T, number, !Array): boolean} predicateFn * @param {S=} opt_this * @return {T|undefined} * @this {IArrayLike|string} * @template T,S * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find */ -Array.prototype.find = function(predicate, opt_this) {}; +Array.prototype.find = function(predicateFn, opt_this) {}; /** - * @param {!function(this:S, T, number, !Array): boolean} predicate + * @param {function(this:S, T, number, !Array): boolean} predicateFn * @param {S=} opt_this * @return {number} * @this {IArrayLike|string} * @template T,S * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex */ -Array.prototype.findIndex = function(predicate, opt_this) {}; +Array.prototype.findIndex = function(predicateFn, opt_this) {}; /** * @param {T} value * @param {number=} opt_begin * @param {number=} opt_end - * @return {!IArrayLike} + * @return {!Array} * @this {!IArrayLike|string} * @template T * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill @@ -1261,22 +1523,60 @@ Array.prototype.fill = function(value, opt_begin, opt_end) {}; * @param {number} start * @param {number=} opt_end * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin + * @this {!IArrayLike|string} * @template T - * @return {!IArrayLike} + * @return {!Array} */ Array.prototype.copyWithin = function(target, start, opt_end) {}; /** + * NOTE: this is an ES2016 (ES7) extern. * @param {T} searchElement * @param {number=} opt_fromIndex * @return {boolean} * @this {!IArrayLike|string} * @template T + * @nosideeffects * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes */ Array.prototype.includes = function(searchElement, opt_fromIndex) {}; +/** + * Generates an array by passing every element of this array to a callback that + * returns an array of zero or more elements to be added to the result. + * + * NOTE: The specified behavior of the method is that the callback can return + * either an Array, which will be flattened into the result, or a non-array, + * which will simply be included. + * + * However, while defining that in the type information here is possible it's + * very hard to understand both for humans and automated tools other than + * closure-compiler that process these files. Also, we think it's best to + * encourage writing callbacks that just always return an Array for the sake + * of readability. + * + * The polyfill for this method provided by closure-compiler does behave as + * defined in the specification, though. + * + * @param {function(this: THIS, T, number, !IArrayLike): !Array} + * callback + * @param {THIS=} thisArg + * @return {!Array} + * @this {!IArrayLike} + * @template T, THIS, S + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap + */ +Array.prototype.flatMap = function(callback, thisArg) {}; + +/** + * @param {number=} depth + * @return {!Array} + * @this {!IArrayLike} + * @template T, S + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat + */ +Array.prototype.flat = function(depth) {}; /** * @param {!Object} obj @@ -1316,9 +1616,9 @@ Number.MAX_SAFE_INTEGER; /** - * Parse an integer. Use of {@code parseInt} without {@code base} is strictly + * Parse an integer. Use of `parseInt` without `base` is strictly * banned in Google. If you really want to parse octal or hex based on the - * leader, then pass {@code undefined} as the base. + * leader, then pass `undefined` as the base. * * @param {string} string * @param {number|undefined} radix @@ -1372,7 +1672,7 @@ Number.isSafeInteger = function(value) {}; /** * @param {!Object} target - * @param {...Object} var_args + * @param {...(Object|null|undefined)} var_args * @return {!Object} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign */ @@ -1380,6 +1680,7 @@ Object.assign = function(target, var_args) {}; /** * TODO(dbeam): find a better place for ES2017 externs like this one. + * NOTE: this is an ES2017 (ES8) extern. * @param {!Object} obj * @return {!Array} values * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values @@ -1389,6 +1690,7 @@ Object.assign = function(target, var_args) {}; Object.values = function(obj) {}; /** + * NOTE: this is an ES2017 (ES8) extern. * @param {!Object} obj * @return {!Array>} entries * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries @@ -1397,6 +1699,23 @@ Object.values = function(obj) {}; */ Object.entries = function(obj) {}; +/** + * @param {!Iterable<*>} iter + * @return {!Object} + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries + */ +Object.fromEntries = function(iter) {}; + +/** + * NOTE: this is an ES2017 (ES8) extern. + * @param {!Object} obj + * @return {!Object} descriptors + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors + * @throws {Error} + * @template T + */ +Object.getOwnPropertyDescriptors = function(obj) {}; + /** @@ -1406,29 +1725,30 @@ Object.entries = function(obj) {}; var Reflect = {}; /** - * @param {function(this: THIS, ...?): RESULT} target + * @param {function(this: THIS, ...?): RESULT} targetFn * @param {THIS} thisArg - * @param {!Array} argList + * @param {!Array} argList * @return {RESULT} * @template THIS, RESULT * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply */ -Reflect.apply = function(target, thisArg, argList) {}; +Reflect.apply = function(targetFn, thisArg, argList) {}; /** - * @param {function(new: ?, ...?)} target - * @param {!Array} argList - * @param {function(new: TARGET, ...?)=} opt_newTarget + * @param {function(new: ?, ...?)} targetConstructorFn + * @param {!Array} argList + * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn * @return {TARGET} * @template TARGET * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct */ -Reflect.construct = function(target, argList, opt_newTarget) {}; +Reflect.construct = function( + targetConstructorFn, argList, opt_newTargetConstructorFn) {}; /** * @param {!Object} target * @param {string} propertyKey - * @param {!Object} attributes + * @param {!ObjectPropertyDescriptor} attributes * @return {boolean} * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty */ @@ -1518,3 +1838,204 @@ Reflect.set = function(target, propertyKey, value, opt_receiver) {}; * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf */ Reflect.setPrototypeOf = function(target, proto) {}; + + +/** + * @const + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics + */ +var Atomics = {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.add = function(typedArray, index, value) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.and = function(typedArray, index, value) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} expectedValue + * @param {number} replacementValue + * @return {number} + */ +Atomics.compareExchange = function( + typedArray, index, expectedValue, replacementValue) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.exchange = function(typedArray, index, value) {}; + +/** + * @param {number} size + * @return {boolean} + */ +Atomics.isLockFree = function(size) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @return {number} + */ +Atomics.load = function(typedArray, index) {}; + +/** + * @param {!Int32Array} typedArray + * @param {number} index + * @param {number=} count + * @return {number} + */ +Atomics.notify = function(typedArray, index, count) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.or = function(typedArray, index, value) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.store = function(typedArray, index, value) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.sub = function(typedArray, index, value) {}; + +/** + * @param {!Int32Array} typedArray + * @param {number} index + * @param {number} value + * @param {number=} timeout + * @return {String} + */ +Atomics.wait = function(typedArray, index, value, timeout) {}; + +/** + * @param {!Int32Array} typedArray + * @param {number} index + * @param {number=} count + * @return {number} + */ +Atomics.wake = function(typedArray, index, count) {}; + +/** + * @param {!TypedArray} typedArray + * @param {number} index + * @param {number} value + * @return {number} + */ +Atomics.xor = function(typedArray, index, value) {}; + + +/** + * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for + * anything. + * https://github.com/google/closure-compiler/issues/3489 + * @interface + * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T + * @see https://tc39.github.io/proposal-async-iteration/ + */ +function AsyncIterator() {} + +/** + * @param {?=} opt_value + * @return {!Promise>} + */ +AsyncIterator.prototype.next; + + +/** + * @interface + * @template VALUE + */ +function AsyncIterable() {} + + +/** + * @return {!AsyncIterator} + */ +AsyncIterable.prototype[Symbol.asyncIterator] = function() {}; + + +/** + * @interface + * @extends {AsyncIterator} + * @extends {AsyncIterable} + * @template VALUE + * @see https://tc39.github.io/proposal-async-iteration/ + */ +function AsyncIteratorIterable() {} + +/** + * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for + * anything. https://github.com/google/closure-compiler/issues/3489 + * @interface + * @see https://tc39.github.io/proposal-async-iteration/ + * @extends {AsyncIteratorIterable} + * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T + */ +function AsyncGenerator() {} + +/** + * @param {?=} opt_value + * @return {!Promise>} + * @override + */ +AsyncGenerator.prototype.next = function(opt_value) {}; + +/** + * @param {VALUE} value + * @return {!Promise>} + */ +AsyncGenerator.prototype.return = function(value) {}; + +/** + * @param {?} exception + * @return {!Promise>} + */ +AsyncGenerator.prototype.throw = function(exception) {}; + +/** + * @constructor + * @struct + * @param {TYPE} value + * @template TYPE + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef + */ +function WeakRef(value) {} + +/** + * @return {TYPE} + * @nosideeffects + */ +WeakRef.prototype.deref = function() {}; + +/** + * @type {!Global} + */ +var globalThis; diff --git a/javascript/externs/es/es6_collections.js b/javascript/externs/es/es6_collections.js index ce1456c9709b..9d8457053f09 100644 --- a/javascript/externs/es/es6_collections.js +++ b/javascript/externs/es/es6_collections.js @@ -27,24 +27,25 @@ * @param {Iterable>|!Array>=} opt_iterable * @implements {Iterable>} * @template KEY, VALUE + * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map */ function Map(opt_iterable) {} /** @return {void} */ -Map.prototype.clear; +Map.prototype.clear = function() {}; /** * @param {KEY} key * @return {boolean} */ -Map.prototype.delete; +Map.prototype.delete = function(key) {}; /** * @return {!IteratorIterable>} * @nosideeffects */ -Map.prototype.entries; +Map.prototype.entries = function() {}; /** * @param {function(this:THIS, VALUE, KEY, MAP)} callback @@ -52,26 +53,27 @@ Map.prototype.entries; * @this {MAP} * @template MAP,THIS */ -Map.prototype.forEach; +Map.prototype.forEach = function(callback, opt_thisArg) {}; /** * @param {KEY} key * @return {VALUE} * @nosideeffects */ -Map.prototype.get; +Map.prototype.get = function(key) {}; /** * @param {KEY} key * @return {boolean} * @nosideeffects */ -Map.prototype.has; +Map.prototype.has = function(key) {}; /** * @return {!IteratorIterable} + * @nosideeffects */ -Map.prototype.keys; +Map.prototype.keys = function() {}; /** * @param {KEY} key @@ -80,7 +82,7 @@ Map.prototype.keys; * @this {THIS} * @template THIS */ -Map.prototype.set; +Map.prototype.set = function(key, value) {}; /** * @type {number} @@ -92,7 +94,7 @@ Map.prototype.size; * @return {!IteratorIterable} * @nosideeffects */ -Map.prototype.values; +Map.prototype.values = function() {}; /** * @return {!Iterator>} @@ -104,32 +106,33 @@ Map.prototype[Symbol.iterator] = function() {}; * @constructor @struct * @param {Iterable>|!Array>=} opt_iterable * @template KEY, VALUE + * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap */ function WeakMap(opt_iterable) {} /** @return {void} */ -WeakMap.prototype.clear; +WeakMap.prototype.clear = function() {}; /** * @param {KEY} key * @return {boolean} */ -WeakMap.prototype.delete; +WeakMap.prototype.delete = function(key) {}; /** * @param {KEY} key * @return {VALUE} * @nosideeffects */ -WeakMap.prototype.get; +WeakMap.prototype.get = function(key) {}; /** * @param {KEY} key * @return {boolean} * @nosideeffects */ -WeakMap.prototype.has; +WeakMap.prototype.has = function(key) {}; /** * @param {KEY} key @@ -138,15 +141,14 @@ WeakMap.prototype.has; * @this {THIS} * @template THIS */ -WeakMap.prototype.set; - - +WeakMap.prototype.set = function(key, value) {}; /** * @constructor @struct * @param {Iterable|Array=} opt_iterable * @implements {Iterable} * @template VALUE + * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set */ function Set(opt_iterable) {} @@ -157,25 +159,25 @@ function Set(opt_iterable) {} * @this {THIS} * @template THIS */ -Set.prototype.add; +Set.prototype.add = function(value) {}; /** * @return {void} */ -Set.prototype.clear; +Set.prototype.clear = function() {}; /** * @param {VALUE} value * @return {boolean} */ -Set.prototype.delete; +Set.prototype.delete = function(value) {}; /** * @return {!IteratorIterable>} Where each array has two entries: * [value, value] * @nosideeffects */ -Set.prototype.entries; +Set.prototype.entries = function() {}; /** * @param {function(this: THIS, VALUE, VALUE, SET)} callback @@ -183,14 +185,14 @@ Set.prototype.entries; * @this {SET} * @template SET,THIS */ -Set.prototype.forEach; +Set.prototype.forEach = function(callback, opt_thisArg) {}; /** * @param {VALUE} value * @return {boolean} * @nosideeffects */ -Set.prototype.has; +Set.prototype.has = function(value) {}; /** * @type {number} (readonly) @@ -201,13 +203,13 @@ Set.prototype.size; * @return {!IteratorIterable} * @nosideeffects */ -Set.prototype.keys; +Set.prototype.keys = function() {}; /** * @return {!IteratorIterable} * @nosideeffects */ -Set.prototype.values; +Set.prototype.values = function() {}; /** * @return {!Iterator} @@ -220,6 +222,7 @@ Set.prototype[Symbol.iterator] = function() {}; * @constructor @struct * @param {Iterable|Array=} opt_iterable * @template VALUE + * @nosideeffects * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set */ function WeakSet(opt_iterable) {} @@ -230,22 +233,22 @@ function WeakSet(opt_iterable) {} * @this {THIS} * @template THIS */ -WeakSet.prototype.add; +WeakSet.prototype.add = function(value) {}; /** * @return {void} */ -WeakSet.prototype.clear; +WeakSet.prototype.clear = function() {}; /** * @param {VALUE} value * @return {boolean} */ -WeakSet.prototype.delete; +WeakSet.prototype.delete = function(value) {}; /** * @param {VALUE} value * @return {boolean} * @nosideeffects */ -WeakSet.prototype.has; +WeakSet.prototype.has = function(value) {}; diff --git a/javascript/externs/es/intl.js b/javascript/externs/es/intl.js index d1404872af30..eed3320b55f7 100644 --- a/javascript/externs/es/intl.js +++ b/javascript/externs/es/intl.js @@ -26,7 +26,7 @@ var Intl = {}; /** * NOTE: this API is not from ecma402 and is subject to change. - * @param {string|Array.=} opt_locales + * @param {string|Array=} opt_locales * @param {{type: (string|undefined)}=} * opt_options * @constructor @@ -35,6 +35,7 @@ Intl.v8BreakIterator = function(opt_locales, opt_options) {}; /** * @param {string} text + * @return {undefined} */ Intl.v8BreakIterator.prototype.adoptText = function(text) {}; @@ -60,7 +61,7 @@ Intl.v8BreakIterator.prototype.next = function() {}; /** * @constructor - * @param {string|Array.=} opt_locales + * @param {string|Array=} opt_locales * @param {{usage: (string|undefined), localeMatcher: (string|undefined), * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined), * numeric: (boolean|undefined), caseFirst: (string|undefined)}=} @@ -69,8 +70,9 @@ Intl.v8BreakIterator.prototype.next = function() {}; Intl.Collator = function(opt_locales, opt_options) {}; /** - * @param {Array.} locales + * @param {Array} locales * @param {{localeMatcher: (string|undefined)}=} opt_options + * @return {Array} */ Intl.Collator.supportedLocalesOf = function(locales, opt_options) {}; @@ -90,7 +92,7 @@ Intl.Collator.prototype.resolvedOptions = function() {}; /** * @constructor - * @param {string|Array.=} opt_locales + * @param {string|Array=} opt_locales * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined), * numberingSystem: (string|undefined), style: (string|undefined), * currency: (string|undefined), currencyDisplay: (string|undefined), @@ -104,8 +106,9 @@ Intl.Collator.prototype.resolvedOptions = function() {}; Intl.NumberFormat = function(opt_locales, opt_options) {}; /** - * @param {Array.} locales + * @param {Array} locales * @param {{localeMatcher: (string|undefined)}=} opt_options + * @return {Array} */ Intl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {}; @@ -115,6 +118,13 @@ Intl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {}; */ Intl.NumberFormat.prototype.format = function(num) {}; +/** + * @param {number} num + * @return {!Array<{type: string, value: string}>} + * @see http://www.ecma-international.org/ecma-402/#sec-intl.numberformat.prototype.formattoparts + */ +Intl.NumberFormat.prototype.formatToParts = function(num) {}; + /** * @return {{locale: string, numberingSystem: string, style: string, * currency: (string|undefined), currencyDisplay: (string|undefined), @@ -126,7 +136,7 @@ Intl.NumberFormat.prototype.resolvedOptions = function() {}; /** * @constructor - * @param {string|Array.=} opt_locales + * @param {string|Array=} opt_locales * @param {{localeMatcher: (string|undefined), * formatMatcher: (string|undefined), calendar: (string|undefined), * numberingSystem: (string|undefined), tz: (string|undefined), @@ -140,17 +150,24 @@ Intl.NumberFormat.prototype.resolvedOptions = function() {}; Intl.DateTimeFormat = function(opt_locales, opt_options) {}; /** - * @param {Array.} locales + * @param {Array} locales * @param {{localeMatcher: string}=} opt_options + * @return {Array} */ Intl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {}; /** - * @param {number} date + * @param {(!Date|number)=} date * @return {string} */ Intl.DateTimeFormat.prototype.format = function(date) {}; +/** + * @param {(!Date|number)=} date + * @return {Array<{type: string, value: string}>} + */ +Intl.DateTimeFormat.prototype.formatToParts = function(date) {}; + /** * @return {{locale: string, calendar: string, numberingSystem: string, * timeZone: (string|undefined), weekday: (string|undefined), @@ -161,3 +178,74 @@ Intl.DateTimeFormat.prototype.format = function(date) {}; * hour12: (boolean|undefined)}} */ Intl.DateTimeFormat.prototype.resolvedOptions = function() {}; + +/** + * @constructor + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax + * @param {string|Array=} opt_locales + * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=} + * opt_options + */ +Intl.PluralRules = function(opt_locales, opt_options) {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax + * @param {Array} locales + * @param {{localeMatcher: string}=} opt_options + * @return {Array} + */ +Intl.PluralRules.supportedLocalesOf = function(locales, opt_options) {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax + * @return {{locale: string, pluralCategories: Array, type: string}} + */ +Intl.PluralRules.prototype.resolvedOptions = function() {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax + * @param {number} number + * @return {string} + */ +Intl.PluralRules.prototype.select = function(number) {}; + +/** + * @constructor + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax + * @param {string|Array=} opt_locales + * @param {{localeMatcher: (string|undefined), + * numeric: (string|undefined), + * style: (string|undefined)}=} + * opt_options + */ +Intl.RelativeTimeFormat = function(opt_locales, opt_options) {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax + * @param {Array} locales + * @param {{localeMatcher: string}=} opt_options + * @return {Array} + */ +Intl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax + * @param {number} value + * @param {string} unit + * @return {string} + */ +Intl.RelativeTimeFormat.prototype.format = function(value, unit) {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax + * @param {number} value + * @param {string} unit + * @return {Array} + */ +Intl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax + * @return {{locale: string, pluralCategories: Array, type: string}} + */ +Intl.RelativeTimeFormat.prototype.resolvedOptions = function() {}; From be70510c64f4f15a49fd979f2ecd1e36c2e32d35 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 20 Jan 2021 16:13:28 +0100 Subject: [PATCH 2/6] update jQuery extern --- javascript/externs/lib/jquery-3.2.js | 60 ++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/javascript/externs/lib/jquery-3.2.js b/javascript/externs/lib/jquery-3.2.js index a94876ef6d85..192b2732285a 100644 --- a/javascript/externs/lib/jquery-3.2.js +++ b/javascript/externs/lib/jquery-3.2.js @@ -200,7 +200,7 @@ jQuery.prototype.add = function(arg1, context) {}; jQuery.prototype.addBack = function(arg1) {}; /** - * @param {(string|function(number,String))} arg1 + * @param {(string|Array|function(number,String))} arg1 * @return {!jQuery} */ jQuery.prototype.addClass = function(arg1) {}; @@ -305,8 +305,16 @@ jQuery.prototype.append = function(arg1, content) {}; jQuery.prototype.appendTo = function(target) {}; /** - * @param {(string|Object)} arg1 - * @param {(string|number|boolean|function(number,string))=} arg2 + * Only call this method with the following combinations of arguments: + * function(string, (string|number|undefined)) + * function(!Object) + * function(string, function(this:Element number,string):(string|number)) + * + * See https://api.jquery.com/attr/#attr2 + * + * @param {(string|!Object)} arg1 + * @param {(string|number|function(this:Element,number,string):(string|number))=} + * arg2 * @return {(string|!jQuery)} */ jQuery.prototype.attr = function(arg1, arg2) {}; @@ -331,6 +339,7 @@ jQuery.prototype.bind = function(arg1, eventData, arg3) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "blur", handler ) instead. */ jQuery.prototype.blur = function(arg1, handler) {}; @@ -408,6 +417,7 @@ jQuery.callbacks.prototype.remove = function(callbacks) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "change", handler ) instead. */ jQuery.prototype.change = function(arg1, handler) {}; @@ -428,6 +438,7 @@ jQuery.prototype.clearQueue = function(queueName) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "click", handler ) instead. */ jQuery.prototype.click = function(arg1, handler) {}; @@ -461,6 +472,14 @@ jQuery.contains = function(container, contained) {}; */ jQuery.prototype.contents = function() {}; +/** + * @param {(function(!jQuery.Event)|Object)=} arg1 + * @param {function(!jQuery.Event)=} handler + * @return {!jQuery} + * @deprecated Please use .on( "contextmenu", handler ) instead. + */ +jQuery.prototype.contextmenu = function(arg1, handler) {}; + /** * @param {(string|Object)} arg1 * @param {(string|number|function(number,*))=} arg2 @@ -491,6 +510,7 @@ jQuery.prototype.data = function(arg1, value) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "dblclick", handler ) instead. */ jQuery.prototype.dblclick = function(arg1, handler) {}; @@ -845,7 +865,7 @@ jQuery.Event.prototype.type; /** @type {Window} */ jQuery.Event.prototype.view; -/** @type {number} */ +/** @type {number} @deprecated */ jQuery.Event.prototype.which; /** @@ -922,6 +942,7 @@ jQuery.fn = jQuery.prototype; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "focus", handler ) instead. */ jQuery.prototype.focus = function(arg1, handler) {}; @@ -929,6 +950,7 @@ jQuery.prototype.focus = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "focusin", handler ) instead. */ jQuery.prototype.focusin = function(arg1, handler) {}; @@ -936,6 +958,7 @@ jQuery.prototype.focusin = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "focusout", handler ) instead. */ jQuery.prototype.focusout = function(arg1, handler) {}; @@ -1040,6 +1063,7 @@ jQuery.holdReady = function(hold) {}; * @param {function(!jQuery.Event)} arg1 * @param {function(!jQuery.Event)=} handlerOut * @return {!jQuery} + * @deprecated Please use .on( "mouseenter", handler ) and .on( "mouseleave", handler ) instead. */ jQuery.prototype.hover = function(arg1, handlerOut) {}; @@ -1121,6 +1145,7 @@ jQuery.isEmptyObject = function(obj) {}; * @param {*} obj * @return {boolean} * @nosideeffects + * @deprecated */ jQuery.isFunction = function(obj) {}; @@ -1128,6 +1153,7 @@ jQuery.isFunction = function(obj) {}; * @param {*} value * @return {boolean} * @nosideeffects + * @deprecated */ jQuery.isNumeric = function(value) {}; @@ -1142,6 +1168,7 @@ jQuery.isPlainObject = function(obj) {}; * @param {*} obj * @return {boolean} * @nosideeffects + * @deprecated */ jQuery.isWindow = function(obj) {}; @@ -1262,6 +1289,7 @@ jQuery.jqXHR.prototype.then = * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "keydown", handler ) instead. */ jQuery.prototype.keydown = function(arg1, handler) {}; @@ -1269,6 +1297,7 @@ jQuery.prototype.keydown = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "keypress", handler ) instead. */ jQuery.prototype.keypress = function(arg1, handler) {}; @@ -1276,6 +1305,7 @@ jQuery.prototype.keypress = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "keyup", handler ) instead. */ jQuery.prototype.keyup = function(arg1, handler) {}; @@ -1290,7 +1320,7 @@ jQuery.prototype.length; /** * @param {*} obj - * @return {Array<*>} + * @return {!Array<*>} * @nosideeffects */ jQuery.makeArray = function(obj) {}; @@ -1320,6 +1350,7 @@ jQuery.merge = function(first, second) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mousedown", handler ) instead. */ jQuery.prototype.mousedown = function(arg1, handler) {}; @@ -1327,6 +1358,7 @@ jQuery.prototype.mousedown = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mousenter", handler ) instead. */ jQuery.prototype.mouseenter = function(arg1, handler) {}; @@ -1334,6 +1366,7 @@ jQuery.prototype.mouseenter = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mouseleave", handler ) instead. */ jQuery.prototype.mouseleave = function(arg1, handler) {}; @@ -1341,6 +1374,7 @@ jQuery.prototype.mouseleave = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mousemove", handler ) instead. */ jQuery.prototype.mousemove = function(arg1, handler) {}; @@ -1348,6 +1382,7 @@ jQuery.prototype.mousemove = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mouseout", handler ) instead. */ jQuery.prototype.mouseout = function(arg1, handler) {}; @@ -1355,6 +1390,7 @@ jQuery.prototype.mouseout = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mouseover", handler ) instead. */ jQuery.prototype.mouseover = function(arg1, handler) {}; @@ -1362,6 +1398,7 @@ jQuery.prototype.mouseover = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "mouseup", handler ) instead. */ jQuery.prototype.mouseup = function(arg1, handler) {}; @@ -1389,7 +1426,7 @@ jQuery.prototype.nextUntil = function(arg1, filter) {}; /** * @param {boolean=} removeAll - * @return {Object} + * @return {!typeof jQuery} */ jQuery.noConflict = function(removeAll) {}; @@ -1408,6 +1445,7 @@ jQuery.prototype.not = function(arg1) {}; /** * @return {number} * @nosideeffects + * @deprecated */ jQuery.now = function() {}; @@ -1655,6 +1693,7 @@ jQuery.prototype.prop = function(arg1, arg2) {}; /** * @param {...*} var_args * @return {function()} + * @deprecated */ jQuery.proxy = function(var_args) {}; @@ -1709,7 +1748,7 @@ jQuery.prototype.remove = function(selector) {}; jQuery.prototype.removeAttr = function(attributeName) {}; /** - * @param {(string|function(number,string))=} arg1 + * @param {(string|Array|function(number,string))=} arg1 * @return {!jQuery} */ jQuery.prototype.removeClass = function(arg1) {}; @@ -1749,6 +1788,7 @@ jQuery.prototype.replaceWith = function(arg1) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "resize", handler ) instead. */ jQuery.prototype.resize = function(arg1, handler) {}; @@ -1756,6 +1796,7 @@ jQuery.prototype.resize = function(arg1, handler) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "scroll", handler ) instead. */ jQuery.prototype.scroll = function(arg1, handler) {}; @@ -1775,6 +1816,7 @@ jQuery.prototype.scrollTop = function(value) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "select", handler ) instead. */ jQuery.prototype.select = function(arg1, handler) {}; @@ -1859,6 +1901,7 @@ jQuery.prototype.stop = function(arg1, arg2, jumpToEnd) {}; * @param {(function(!jQuery.Event)|Object)=} arg1 * @param {function(!jQuery.Event)=} handler * @return {!jQuery} + * @deprecated Please use .on( "submit", handler ) instead. */ jQuery.prototype.submit = function(arg1, handler) {}; @@ -1932,7 +1975,7 @@ jQuery.prototype.toArray = function() {}; jQuery.prototype.toggle = function(arg1, arg2, arg3) {}; /** - * @param {(string|function(number,string,boolean))} arg1 + * @param {(string|Array|function(number,string,boolean))} arg1 * @param {boolean=} flag * @return {!jQuery} */ @@ -1963,6 +2006,7 @@ jQuery.trim = function(str) {}; * @param {*} obj * @return {string} * @nosideeffects + * @deprecated */ jQuery.type = function(obj) {}; From bcd7af395ec0a3d4b09d6c21a437b725397e2836 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 20 Jan 2021 17:46:41 +0100 Subject: [PATCH 3/6] update V8 extern --- javascript/externs/vm/v8.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/javascript/externs/vm/v8.js b/javascript/externs/vm/v8.js index be11bd83a557..2652c0601aed 100644 --- a/javascript/externs/vm/v8.js +++ b/javascript/externs/vm/v8.js @@ -28,6 +28,15 @@ function CallSite() {} +/** + * Runs the garbage collector, provided that you start V8 with --expose-gc or + * Chrome with --js-flags="--expose-gc". + * See https://v8.dev/docs/memory-leaks + * @type {undefined|function()} + */ +CallSite.prototype.gc; + + /** * Returns the value of this. * @return {Object|undefined} From 067dab4d29279fa8b77a5e6defb1c85ca8d7c1f7 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 20 Jan 2021 18:18:31 +0100 Subject: [PATCH 4/6] remove duplicate externs --- javascript/externs/web/intl.js | 167 ------------------------- javascript/externs/web/w3c_encoding.js | 54 -------- 2 files changed, 221 deletions(-) delete mode 100644 javascript/externs/web/intl.js delete mode 100644 javascript/externs/web/w3c_encoding.js diff --git a/javascript/externs/web/intl.js b/javascript/externs/web/intl.js deleted file mode 100644 index a70f9bad2a92..000000000000 --- a/javascript/externs/web/intl.js +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2013 The Closure Compiler Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @fileoverview Definitions for the JS Internationalization API as defined in - * http://www.ecma-international.org/ecma-402/1.0/ - * - * @externs - */ - -/** @const */ -var Intl = {}; - -/** - * NOTE: this API is not from ecma402 and is subject to change. - * @param {string|Array=} opt_locales - * @param {{type: (string|undefined)}=} - * opt_options - * @constructor - */ -Intl.v8BreakIterator = function(opt_locales, opt_options) {}; - -/** - * @param {string} text - * @return {undefined} - */ -Intl.v8BreakIterator.prototype.adoptText = function(text) {}; - -/** - * @return {string} - */ -Intl.v8BreakIterator.prototype.breakType = function() {}; - -/** - * @return {number} - */ -Intl.v8BreakIterator.prototype.current = function() {}; - -/** - * @return {number} - */ -Intl.v8BreakIterator.prototype.first = function() {}; - -/** - * @return {number} - */ -Intl.v8BreakIterator.prototype.next = function() {}; - -/** - * @constructor - * @param {string|Array=} opt_locales - * @param {{usage: (string|undefined), localeMatcher: (string|undefined), - * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined), - * numeric: (boolean|undefined), caseFirst: (string|undefined)}=} - * opt_options - */ -Intl.Collator = function(opt_locales, opt_options) {}; - -/** - * @param {Array} locales - * @param {{localeMatcher: (string|undefined)}=} opt_options - * @return {Array} - */ -Intl.Collator.supportedLocalesOf = function(locales, opt_options) {}; - -/** - * @param {string} arg1 - * @param {string} arg2 - * @return {number} - */ -Intl.Collator.prototype.compare = function(arg1, arg2) {}; - -/** - * @return {{locale: string, usage: string, sensitivity: string, - * ignorePunctuation: boolean, collation: string, numeric: boolean, - * caseFirst: string}} - */ -Intl.Collator.prototype.resolvedOptions = function() {}; - -/** - * @constructor - * @param {string|Array=} opt_locales - * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined), - * numberingSystem: (string|undefined), style: (string|undefined), - * currency: (string|undefined), currencyDisplay: (string|undefined), - * minimumIntegerDigits: (number|undefined), - * minimumFractionDigits: (number|undefined), - * maximumFractionDigits: (number|undefined), - * minimumSignificantDigits: (number|undefined), - * maximumSignificantDigits: (number|undefined)}=} - * opt_options - */ -Intl.NumberFormat = function(opt_locales, opt_options) {}; - -/** - * @param {Array} locales - * @param {{localeMatcher: (string|undefined)}=} opt_options - * @return {Array} - */ -Intl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {}; - -/** - * @param {number} num - * @return {string} - */ -Intl.NumberFormat.prototype.format = function(num) {}; - -/** - * @return {{locale: string, numberingSystem: string, style: string, - * currency: (string|undefined), currencyDisplay: (string|undefined), - * minimumIntegerDigits: number, minimumFractionDigits: number, - * maximumFractionDigits: number, minimumSignificantDigits: number, - * maximumSignificantDigits: number, useGrouping: boolean}} - */ -Intl.NumberFormat.prototype.resolvedOptions = function() {}; - -/** - * @constructor - * @param {string|Array=} opt_locales - * @param {{localeMatcher: (string|undefined), - * formatMatcher: (string|undefined), calendar: (string|undefined), - * numberingSystem: (string|undefined), tz: (string|undefined), - * weekday: (string|undefined), era: (string|undefined), - * year: (string|undefined), month: (string|undefined), - * day: (string|undefined), hour: (string|undefined), - * minute: (string|undefined), second: (string|undefined), - * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=} - * opt_options - */ -Intl.DateTimeFormat = function(opt_locales, opt_options) {}; - -/** - * @param {Array} locales - * @param {{localeMatcher: string}=} opt_options - * @return {Array} - */ -Intl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {}; - -/** - * @param {(!Date|number)=} date - * @return {string} - */ -Intl.DateTimeFormat.prototype.format = function(date) {}; - -/** - * @return {{locale: string, calendar: string, numberingSystem: string, - * timeZone: (string|undefined), weekday: (string|undefined), - * era: (string|undefined), year: (string|undefined), - * month: (string|undefined), day: (string|undefined), - * hour: (string|undefined), minute: (string|undefined), - * second: (string|undefined), timeZoneName: (string|undefined), - * hour12: (boolean|undefined)}} - */ -Intl.DateTimeFormat.prototype.resolvedOptions = function() {}; diff --git a/javascript/externs/web/w3c_encoding.js b/javascript/externs/web/w3c_encoding.js deleted file mode 100644 index 947821a90979..000000000000 --- a/javascript/externs/web/w3c_encoding.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2015 The Closure Compiler Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @fileoverview Definitions for W3C's Encoding specification - * https://encoding.spec.whatwg.org - * @externs - */ - -/** - * @constructor - * @param {string=} encoding - * @param {Object=} options - */ -function TextDecoder(encoding, options) {} - -/** @type {string} **/ TextDecoder.prototype.encoding; -/** @type {boolean} **/ TextDecoder.prototype.fatal; -/** @type {boolean} **/ TextDecoder.prototype.ignoreBOM; - -/** - * @param {!Uint8Array} input - * @param {Object=} options - * @return {string} - */ -TextDecoder.prototype.decode = function decode(input, options) {}; - -/** - * @constructor - * @param {string=} encoding - * @param {Object=} options - */ -function TextEncoder(encoding, options) {} - -/** @type {string} **/ TextEncoder.prototype.encoding; - -/** - * @param {string} input - * @return {!Uint8Array} - */ -TextEncoder.prototype.encode = function(input) {}; From 24517abdffaf79eea30f161cde0b50e40c5c3444 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 20 Jan 2021 18:19:12 +0100 Subject: [PATCH 5/6] add new externs to web --- javascript/externs/web/es6_proxy.js | 143 + javascript/externs/web/fido.js | 94 + javascript/externs/web/google_legacy.js | 31 + .../externs/web/intersection_observer.js | 178 ++ javascript/externs/web/mediakeys.js | 305 ++ .../externs/web/nonstandard_anim_timing.js | 97 + javascript/externs/web/nonstandard_audio.js | 82 + javascript/externs/web/nonstandard_console.js | 66 + .../externs/web/nonstandard_indexeddb.js | 78 + .../web/nonstandard_navigation_timing.js | 38 + javascript/externs/web/nonstandard_rtc.js | 44 + .../externs/web/nonstandard_selection.js | 80 + javascript/externs/web/w3c_abort.js | 50 + javascript/externs/web/w3c_audio.js | 1587 ++++++++++ javascript/externs/web/w3c_clipboard.js | 40 + javascript/externs/web/w3c_clipboardevent.js | 47 + .../externs/web/w3c_composition_event.js | 93 + javascript/externs/web/w3c_eventsource.js | 110 + javascript/externs/web/w3c_fileapi.js | 295 ++ javascript/externs/web/w3c_geometry1.js | 899 ++++++ javascript/externs/web/w3c_keyboardlock.js | 47 + .../externs/web/w3c_mediacapabilities.js | 206 ++ javascript/externs/web/w3c_netinfo.js | 85 + javascript/externs/web/w3c_payment_request.js | 401 +++ javascript/externs/web/w3c_pointerlock.js | 63 + javascript/externs/web/w3c_referrer_policy.js | 36 + .../externs/web/w3c_screen_wake_lock.js | 58 + javascript/externs/web/w3c_selection.js | 209 ++ javascript/externs/web/w3c_speech.js | 412 +++ javascript/externs/web/w3c_trusted_types.js | 139 + javascript/externs/web/w3c_vibration.js | 38 + javascript/externs/web/w3c_worklets.js | 54 + javascript/externs/web/web_animations.js | 362 +++ javascript/externs/web/web_app_manifest.js | 50 + javascript/externs/web/webassembly.js | 176 ++ javascript/externs/web/webgl2.js | 2727 +++++++++++++++++ javascript/externs/web/webgl2_compute.js | 1609 ++++++++++ javascript/externs/web/whatwg_console.js | 152 + .../externs/web/wicg_file_system_access.js | 331 ++ javascript/externs/web/wicg_floc.js | 27 + javascript/externs/web/wicg_resizeobserver.js | 77 + javascript/externs/web/wicg_trust_token.js | 89 + javascript/externs/web/wicg_uach.js | 85 + 43 files changed, 11790 insertions(+) create mode 100644 javascript/externs/web/es6_proxy.js create mode 100644 javascript/externs/web/fido.js create mode 100644 javascript/externs/web/google_legacy.js create mode 100644 javascript/externs/web/intersection_observer.js create mode 100644 javascript/externs/web/mediakeys.js create mode 100644 javascript/externs/web/nonstandard_anim_timing.js create mode 100644 javascript/externs/web/nonstandard_audio.js create mode 100644 javascript/externs/web/nonstandard_console.js create mode 100644 javascript/externs/web/nonstandard_indexeddb.js create mode 100644 javascript/externs/web/nonstandard_navigation_timing.js create mode 100644 javascript/externs/web/nonstandard_rtc.js create mode 100644 javascript/externs/web/nonstandard_selection.js create mode 100644 javascript/externs/web/w3c_abort.js create mode 100644 javascript/externs/web/w3c_audio.js create mode 100644 javascript/externs/web/w3c_clipboard.js create mode 100644 javascript/externs/web/w3c_clipboardevent.js create mode 100644 javascript/externs/web/w3c_composition_event.js create mode 100644 javascript/externs/web/w3c_eventsource.js create mode 100644 javascript/externs/web/w3c_fileapi.js create mode 100644 javascript/externs/web/w3c_geometry1.js create mode 100644 javascript/externs/web/w3c_keyboardlock.js create mode 100644 javascript/externs/web/w3c_mediacapabilities.js create mode 100644 javascript/externs/web/w3c_netinfo.js create mode 100644 javascript/externs/web/w3c_payment_request.js create mode 100644 javascript/externs/web/w3c_pointerlock.js create mode 100644 javascript/externs/web/w3c_referrer_policy.js create mode 100644 javascript/externs/web/w3c_screen_wake_lock.js create mode 100644 javascript/externs/web/w3c_selection.js create mode 100644 javascript/externs/web/w3c_speech.js create mode 100644 javascript/externs/web/w3c_trusted_types.js create mode 100644 javascript/externs/web/w3c_vibration.js create mode 100644 javascript/externs/web/w3c_worklets.js create mode 100644 javascript/externs/web/web_animations.js create mode 100644 javascript/externs/web/web_app_manifest.js create mode 100644 javascript/externs/web/webassembly.js create mode 100644 javascript/externs/web/webgl2.js create mode 100644 javascript/externs/web/webgl2_compute.js create mode 100644 javascript/externs/web/whatwg_console.js create mode 100644 javascript/externs/web/wicg_file_system_access.js create mode 100644 javascript/externs/web/wicg_floc.js create mode 100644 javascript/externs/web/wicg_resizeobserver.js create mode 100644 javascript/externs/web/wicg_trust_token.js create mode 100644 javascript/externs/web/wicg_uach.js diff --git a/javascript/externs/web/es6_proxy.js b/javascript/externs/web/es6_proxy.js new file mode 100644 index 000000000000..21fc96d86cde --- /dev/null +++ b/javascript/externs/web/es6_proxy.js @@ -0,0 +1,143 @@ +/* + * Copyright 2018 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for ECMAScript 6 Proxy objects. + * @see https://tc39.github.io/ecma262/#sec-proxy-objects + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy + * @externs + */ + + +/** + * @record + * @template TARGET + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler + */ +function ProxyHandler() {} + +/** + * @type {(function(TARGET):?Object)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf + */ +ProxyHandler.prototype.getPrototypeOf /* = function(target) {} */; + +/** + * @type {(function(TARGET, ?Object):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf + */ +ProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */; + +/** + * @type {(function(TARGET):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible + */ +ProxyHandler.prototype.isExtensible /* = function(target) {} */; + +/** + * @type {(function(TARGET):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions + */ +ProxyHandler.prototype.preventExtensions /* = function(target) {} */; + +/** + * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor + */ +ProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */; + +/** + * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty + */ +ProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */; + +/** + * @type {(function(TARGET, (string|symbol)):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has + */ +ProxyHandler.prototype.has /* = function(target, prop) {} */; + +/** + * @type {(function(TARGET, (string|symbol), !Object):*)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get + */ +ProxyHandler.prototype.get /* = function(target, prop, receiver) {} */; + +/** + * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set + */ +ProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */; + +/** + * @type {(function(TARGET, (string|symbol)):boolean)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty + */ +ProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */; + +/** + * @type {(function(TARGET):!Array<(string|symbol)>)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys + */ +ProxyHandler.prototype.ownKeys /* = function(target) {} */; + +/** + * @type {(function(TARGET, *, !Array):*)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply + */ +ProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */; + +/** + * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined} + * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct + */ +ProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */; + + +/** + * @constructor + * @param {TARGET} target + * @param {!ProxyHandler} handler + * @template TARGET + * @see https://tc39.github.io/ecma262/#sec-proxy-constructor + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax + */ +function Proxy(target, handler) {} + +/** + * @param {TARGET} target + * @param {!ProxyHandler} handler + * @return {{proxy: !Proxy, revoke: function():void}} + * @template TARGET + * @see https://tc39.github.io/ecma262/#sec-proxy.revocable + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable + */ +Proxy.revocable = function(target, handler) {}; diff --git a/javascript/externs/web/fido.js b/javascript/externs/web/fido.js new file mode 100644 index 000000000000..98c75317ea2f --- /dev/null +++ b/javascript/externs/web/fido.js @@ -0,0 +1,94 @@ +/* + * Copyright 2018 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions from the FIDO Specifications + * @see https://fidoalliance.org/download/ + * + * @externs + * @author arnarbi@gmail.com (Arnar Birgisson) + */ + +/** + * U2F JavaScript API namespace + * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html + * @const + */ +var u2f = {}; + +/** + * Data object for a single sign request. + * @typedef {string} + */ +u2f.Transport; + +/** + * Data object for a registered key. + * @typedef {{ + * version: string, + * keyHandle: string, + * transports: (!Array|undefined), + * appId: ?string + * }} + */ +u2f.RegisteredKey; + +/** + * An error object for responses + * @typedef {{ + * errorCode: number, + * errorMessage: ?string + * }} + */ +u2f.Error; + +/** + * Data object for a sign response. + * @typedef {{ + * keyHandle: string, + * signatureData: string, + * clientData: string + * }} + */ +u2f.SignResponse; + +/** + * @typedef {{ + * version: string, + * challenge: string + * }} + */ +u2f.RegisterRequest + +/** + * @param {string} appId + * @param {string} challenge + * @param {!Array} registeredKeys + * @param {function((!u2f.Error|!u2f.SignResponse))} callback + * @param {number=} opt_timeoutSeconds + */ +u2f.sign = function( + appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {}; + +/** + * @param {string} appId + * @param {!Array} registerRequests + * @param {!Array} registeredKeys + * @param {function((!u2f.Error|!u2f.SignResponse))} callback + * @param {number=} opt_timeoutSeconds + */ +u2f.register = function( + appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {}; diff --git a/javascript/externs/web/google_legacy.js b/javascript/externs/web/google_legacy.js new file mode 100644 index 000000000000..c8851d276897 --- /dev/null +++ b/javascript/externs/web/google_legacy.js @@ -0,0 +1,31 @@ +/* + * Copyright 2010 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Declaration of the type level google namespace. + * @externs + * @author nicksantos@google.com (Nick Santos) + */ + +/** + * Suppresses the compiler warning when multiple externs files declare the + * google namespace. + * @suppress {duplicate,strictMissingProperties} + * NOTE: This definition should be marked \@const, and when it is we can remove + * the "strictMissingProperties" suppression. + */ +// TODO(nicksantos): Consolidate to one google namespace declaration. +var google = {}; diff --git a/javascript/externs/web/intersection_observer.js b/javascript/externs/web/intersection_observer.js new file mode 100644 index 000000000000..0dd991fcf4f1 --- /dev/null +++ b/javascript/externs/web/intersection_observer.js @@ -0,0 +1,178 @@ +/* + * Copyright 2016 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Externs for Intersection Observer objects. + * @see https://w3c.github.io/IntersectionObserver/ + * @externs + */ + +// TODO(user): Once the Intersection Observer spec is adopted by W3C, add +// a w3c_ prefix to this file's name. + + +/** + * These contain the information provided from a change event. + * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry + * @record + */ +function IntersectionObserverEntry() {} + +/** + * The time the change was observed. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time + * @const {number} + */ +IntersectionObserverEntry.prototype.time; + +/** + * The root intersection rectangle, if target belongs to the same unit of + * related similar-origin browsing contexts as the intersection root, null + * otherwise. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds + * @const {{top: number, right: number, bottom: number, left: number, + * height: number, width: number}} + */ +IntersectionObserverEntry.prototype.rootBounds; + +/** + * The rectangle describing the element being observed. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect + * @const {!{top: number, right: number, bottom: number, left: number, + * height: number, width: number}} + */ +IntersectionObserverEntry.prototype.boundingClientRect; + +/** + * The rectangle describing the intersection between the observed element and + * the viewport. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect + * @const {!{top: number, right: number, bottom: number, left: number, + * height: number, width: number}} + */ +IntersectionObserverEntry.prototype.intersectionRect; + +/** + * Ratio of intersectionRect area to boundingClientRect area. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio + * @const {number} + */ +IntersectionObserverEntry.prototype.intersectionRatio; + +/** + * The Element whose intersection with the intersection root changed. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target + * @const {!Element} + */ +IntersectionObserverEntry.prototype.target; + +/** + * Whether or not the target is intersecting with the root. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting + * @const {boolean} + */ +IntersectionObserverEntry.prototype.isIntersecting; + +/** + * Whether or not the target is visible with the root. + * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible + * @const {boolean|undefined} + */ +IntersectionObserverEntry.prototype.isVisible; + +/** + * Callback for the IntersectionObserver. + * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback + * @typedef {function(!Array,!IntersectionObserver)} + */ +var IntersectionObserverCallback; + +/** + * Options for the IntersectionObserver. + * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init + * @typedef {{ + * threshold: (!Array|number|undefined), + * delay: (number|undefined), + * trackVisibility: (boolean|undefined), + * root: (?Element|undefined), + * rootMargin: (string|undefined) + * }} + */ +var IntersectionObserverInit; + +/** + * This is the constructor for Intersection Observer objects. + * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface + * @param {!IntersectionObserverCallback} handler The callback for the observer. + * @param {!IntersectionObserverInit=} opt_options The object defining the + * thresholds, etc. + * @constructor + */ +function IntersectionObserver(handler, opt_options) {}; + +/** + * The root Element to use for intersection, or null if the observer uses the + * implicit root. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root + * @const {?Element} + */ +IntersectionObserver.prototype.root; + +/** + * Offsets applied to the intersection root’s bounding box, effectively growing + * or shrinking the box that is used to calculate intersections. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin + * @const {string} + */ +IntersectionObserver.prototype.rootMargin; + +/** + * A list of thresholds, sorted in increasing numeric order, where each + * threshold is a ratio of intersection area to bounding box area of an observed + * target. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds + * @const {!Array} + */ +IntersectionObserver.prototype.thresholds; + +/** + * This is used to set which element to observe. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe + * @param {!Element} element The element to observe. + * @return {undefined} + */ +IntersectionObserver.prototype.observe = function(element) {}; + +/** + * This is used to stop observing a given element. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve + * @param {!Element} element The elmenent to stop observing. + * @return {undefined} + */ +IntersectionObserver.prototype.unobserve = function(element) {}; + +/** + * Disconnect. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect + */ +IntersectionObserver.prototype.disconnect = function() {}; + +/** + * Take records. + * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords + * @return {!Array.} + */ +IntersectionObserver.prototype.takeRecords = function() {}; diff --git a/javascript/externs/web/mediakeys.js b/javascript/externs/web/mediakeys.js new file mode 100644 index 000000000000..e6230288fc17 --- /dev/null +++ b/javascript/externs/web/mediakeys.js @@ -0,0 +1,305 @@ +/* + * Copyright 2015 The Closure Compiler authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @fileoverview MediaKey externs. + * Based on {@link https://w3c.github.io/encrypted-media/ EME draft 5 December + * 2019}. + * @externs + */ + + +/** + * @typedef {{ + * contentType: string, + * encryptionScheme: (?string|undefined), + * robustness: (string|undefined) + * }} + * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary + */ +var MediaKeySystemMediaCapability; + + +/** @typedef {{ + * label: (string|undefined), + * initDataTypes: (!Array|undefined), + * audioCapabilities: (!Array|undefined), + * videoCapabilities: (!Array|undefined), + * distinctiveIdentifier: (string|undefined), + * persistentState: (string|undefined), + * sessionTypes: (!Array|undefined) + * }} + * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary + */ +var MediaKeySystemConfiguration; + + +/** + * @param {string} keySystem + * @param {!Array} supportedConfigurations + * @return {!Promise} + * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess + */ +Navigator.prototype.requestMediaKeySystemAccess = + function(keySystem, supportedConfigurations) {}; + + +/** @const {MediaKeys} */ +HTMLMediaElement.prototype.mediaKeys; + + +/** + * @param {MediaKeys} mediaKeys + * @return {!Promise} + * @see https://w3c.github.io/encrypted-media/#dom-htmlmediaelement-setmediakeys + */ +HTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {}; + + + +/** + * @interface + * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface + */ +function MediaKeySystemAccess() {} + + +/** @return {!Promise} */ +MediaKeySystemAccess.prototype.createMediaKeys = function() {}; + + +/** @return {!MediaKeySystemConfiguration} */ +MediaKeySystemAccess.prototype.getConfiguration = function() {}; + + +/** @const {string} */ +MediaKeySystemAccess.prototype.keySystem; + + + +/** + * @interface + * @see https://w3c.github.io/encrypted-media/#mediakeys-interface + */ +function MediaKeys() {} + + +/** + * @param {string=} opt_sessionType defaults to "temporary" + * @return {!MediaKeySession} + * @throws {TypeError} if opt_sessionType is invalid. + */ +MediaKeys.prototype.createSession = function(opt_sessionType) {}; + + +/** + * @param {!BufferSource} serverCertificate + * @return {!Promise} + */ +MediaKeys.prototype.setServerCertificate = function(serverCertificate) {}; + + + +/** + * @interface + * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface + */ +function MediaKeyStatusMap() {} + + +/** @const {number} */ +MediaKeyStatusMap.prototype.size; + + +/** + * Array entry 0 is the key, 1 is the value. + * @return {!Iterator>} + */ +MediaKeyStatusMap.prototype.entries = function() {}; + + +/** + * The function is called with each value. + * @param {function(string, !BufferSource)} callback A callback function to run for + * each media key. The first parameter is the key status; the second + * parameter is the key ID. + * @return {undefined} + */ +MediaKeyStatusMap.prototype.forEach = function(callback) {}; + + +/** + * @param {!BufferSource} keyId + * @return {string|undefined} + */ +MediaKeyStatusMap.prototype.get = function(keyId) {}; + + +/** + * @param {!BufferSource} keyId + * @return {boolean} + */ +MediaKeyStatusMap.prototype.has = function(keyId) {}; + + +/** + * @return {!Iterator} + */ +MediaKeyStatusMap.prototype.keys = function() {}; + + +/** + * @return {!Iterator} + */ +MediaKeyStatusMap.prototype.values = function() {}; + + + +/** + * @interface + * @extends {EventTarget} + * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface + */ +function MediaKeySession() {} + + +/** @const {string} */ +MediaKeySession.prototype.sessionId; + + +/** @const {number} */ +MediaKeySession.prototype.expiration; + + +/** @const {!Promise} */ +MediaKeySession.prototype.closed; + + +/** @const {!MediaKeyStatusMap} */ +MediaKeySession.prototype.keyStatuses; + + +/** + * @param {string} initDataType + * @param {!BufferSource} initData + * @return {!Promise} + */ +MediaKeySession.prototype.generateRequest = function(initDataType, initData) {}; + + +/** + * @param {string} sessionId + * @return {!Promise}} + */ +MediaKeySession.prototype.load = function(sessionId) {}; + + +/** + * @param {!BufferSource} response + * @return {!Promise} + */ +MediaKeySession.prototype.update = function(response) {}; + + +/** @return {!Promise} */ +MediaKeySession.prototype.close = function() {}; + + +/** @return {!Promise} */ +MediaKeySession.prototype.remove = function() {}; + + +/** @override */ +MediaKeySession.prototype.addEventListener = function( + type, listener, opt_options) {}; + + +/** @override */ +MediaKeySession.prototype.removeEventListener = function( + type, listener, opt_options) {}; + + +/** @override */ +MediaKeySession.prototype.dispatchEvent = function(evt) {}; + +/** + * @record + * @extends {EventInit} + * @see https://w3c.github.io/encrypted-media/#dom-mediakeymessageeventinit + */ +function MediaKeyMessageEventInit() {}; + +/** @type {string} */ +MediaKeyMessageEventInit.prototype.messageType; + +/** @type {!ArrayBuffer} */ +MediaKeyMessageEventInit.prototype.message; + + +/** + * @constructor + * @param {string} type + * @param {MediaKeyMessageEventInit} eventInitDict + * @extends {Event} + * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent + */ +function MediaKeyMessageEvent(type, eventInitDict) {} + + +/** @const {string} */ +MediaKeyMessageEvent.prototype.messageType; + + +/** @const {!ArrayBuffer} */ +MediaKeyMessageEvent.prototype.message; + + +/** @const {!MediaKeySession} */ +MediaKeyMessageEvent.prototype.target; + +/** + * @record + * @extends {EventInit} + * @see https://w3c.github.io/encrypted-media/#dom-mediaencryptedeventinit + */ +function MediaEncryptedEventInit() {}; + +/** @type {(string | undefined)} */ +MediaEncryptedEventInit.prototype.initDataType; + +/** @type {(ArrayBuffer | undefined)} */ +MediaEncryptedEventInit.prototype.initData; + +/** + * @constructor + * @param {string} type + * @param {MediaEncryptedEventInit=} opt_eventInitDict + * @extends {Event} + * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent + */ +function MediaEncryptedEvent(type, opt_eventInitDict) {} + + +/** @const {string} */ +MediaEncryptedEvent.prototype.initDataType; + + +/** @const {ArrayBuffer} */ +MediaEncryptedEvent.prototype.initData; + + +/** @const {!HTMLMediaElement} */ +MediaEncryptedEvent.prototype.target; + diff --git a/javascript/externs/web/nonstandard_anim_timing.js b/javascript/externs/web/nonstandard_anim_timing.js new file mode 100644 index 000000000000..b1683ec31bce --- /dev/null +++ b/javascript/externs/web/nonstandard_anim_timing.js @@ -0,0 +1,97 @@ +/* + * Copyright 2011 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @fileoverview Nonstandard definitions for timing control for script base animations. + * + * @externs + */ + +/** + * @param {!FrameRequestCallback} callback + * @param {Element=} opt_element + * @return {number} + */ +function webkitRequestAnimationFrame(callback, opt_element) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function webkitCancelRequestAnimationFrame(handle) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function webkitCancelAnimationFrame(handle) {}; + +/** + * @param {?FrameRequestCallback} callback It's legitimate to pass a null + * callback and listen on the MozBeforePaint event instead. + * @param {Element=} opt_element + * @return {number} + */ +function mozRequestAnimationFrame(callback, opt_element) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function mozCancelRequestAnimationFrame(handle) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function mozCancelAnimationFrame(handle) {}; + +/** + * @param {!FrameRequestCallback} callback + * @param {Element=} opt_element + * @return {number} + */ +function msRequestAnimationFrame(callback, opt_element) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function msCancelRequestAnimationFrame(handle) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function msCancelAnimationFrame(handle) {}; + +/** + * @param {!FrameRequestCallback} callback + * @param {Element=} opt_element + * @return {number} + */ +function oRequestAnimationFrame(callback, opt_element) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function oCancelRequestAnimationFrame(handle) {}; + +/** + * @param {number} handle + * @return {undefined} + */ +function oCancelAnimationFrame(handle) {}; diff --git a/javascript/externs/web/nonstandard_audio.js b/javascript/externs/web/nonstandard_audio.js new file mode 100644 index 000000000000..ee175bf8df34 --- /dev/null +++ b/javascript/externs/web/nonstandard_audio.js @@ -0,0 +1,82 @@ +/* + * Copyright 2012 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Nonstandard definitions for the API related to audio. + * + * @externs + */ + +/** + * Definitions for the Web Audio API with webkit prefix. + */ + +/** + * @constructor + * @extends {AudioContext} + */ +function webkitAudioContext() {} + +/** + * @param {number} numberOfChannels + * @param {number} length + * @param {number} sampleRate + * @constructor + * @extends {OfflineAudioContext} + */ +function webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {} + +/** + * @constructor + * @extends {AudioPannerNode} + */ +function webkitAudioPannerNode() {} + +/** + * @constructor + * @extends {PannerNode} + */ +function webkitPannerNode() {} + +/** + * Definitions for the Audio API as implemented in Firefox. + * Please note that this document describes a non-standard experimental API. + * This API is considered deprecated. + * @see https://developer.mozilla.org/en/DOM/HTMLAudioElement + */ + +/** + * @param {string=} src + * @constructor + * @extends {HTMLAudioElement} + */ +function Audio(src) {} + +/** + * @param {number} channels + * @param {number} rate + */ +Audio.prototype.mozSetup = function(channels, rate) {}; + +/** + * @param {Array|Float32Array} buffer + */ +Audio.prototype.mozWriteAudio = function(buffer) {}; + +/** + * @return {number} + */ +Audio.prototype.mozCurrentSampleOffset = function() {}; diff --git a/javascript/externs/web/nonstandard_console.js b/javascript/externs/web/nonstandard_console.js new file mode 100644 index 000000000000..b6c1af55277f --- /dev/null +++ b/javascript/externs/web/nonstandard_console.js @@ -0,0 +1,66 @@ +/* + * Copyright 2019 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for console debugging facilities implemented in + * various browsers but not part of https://console.spec.whatwg.org/. + * @externs + */ + +/** + * @constructor + * @see https://cs.chromium.org/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs + */ +function MemoryInfo() {}; + +/** @type {number} */ +MemoryInfo.prototype.totalJSHeapSize; + +/** @type {number} */ +MemoryInfo.prototype.usedJSHeapSize; + +/** @type {number} */ +MemoryInfo.prototype.jsHeapSizeLimit; + +/** + * @param {*} value + * @return {undefined} + */ +Console.prototype.markTimeline = function(value) {}; + +/** + * @param {string=} title + * @return {undefined} + */ +Console.prototype.profile = function(title) {}; + +/** @type {Array} */ +Console.prototype.profiles; + +/** + * @param {string=} title + * @return {undefined} + */ +Console.prototype.profileEnd = function(title) {}; + +/** + * @param {*} value + * @return {undefined} + */ +Console.prototype.timeStamp = function(value) {}; + +/** @type {MemoryInfo} */ +Console.prototype.memory; diff --git a/javascript/externs/web/nonstandard_indexeddb.js b/javascript/externs/web/nonstandard_indexeddb.js new file mode 100644 index 000000000000..b7334b6e6540 --- /dev/null +++ b/javascript/externs/web/nonstandard_indexeddb.js @@ -0,0 +1,78 @@ +/* + * Copyright 2011 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Browser specific definitions for W3C's IndexedDB API + * @externs + */ + +/** @type {!IDBFactory|undefined} */ +Window.prototype.moz_indexedDB; + +/** @type {!IDBFactory|undefined} */ +Window.prototype.mozIndexedDB; + +/** @type {!IDBFactory|undefined} */ +Window.prototype.webkitIndexedDB; + +/** @type {!IDBFactory|undefined} */ +Window.prototype.msIndexedDB; + +/** + * @constructor + * @extends {IDBRequest} + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest + * @see https://www.w3.org/TR/IndexedDB-2/#request-api + */ +function webkitIDBRequest() {} + +/** + * @constructor + * @extends {IDBCursor} + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor + * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface + */ +function webkitIDBCursor() {} + +/** + * @constructor + * @extends {IDBTransaction} + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction + * @see https://www.w3.org/TR/IndexedDB-2/#transaction + */ +function webkitIDBTransaction() {} + +/** + * @constructor + * @extends {IDBKeyRange} + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange + * @see https://www.w3.org/TR/IndexedDB-2/#keyrange + */ +function webkitIDBKeyRange() {} + +/** + * @param {string} type + * @param {!IDBVersionChangeEventInit=} eventInit + * @constructor + * @extends {IDBVersionChangeEvent} + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent + */ +function webkitIDBVersionChangeEvent(type, eventInit) {} + +/** + * @const {string} + */ +webkitIDBVersionChangeEvent.prototype.version; diff --git a/javascript/externs/web/nonstandard_navigation_timing.js b/javascript/externs/web/nonstandard_navigation_timing.js new file mode 100644 index 000000000000..fa2c8b58e764 --- /dev/null +++ b/javascript/externs/web/nonstandard_navigation_timing.js @@ -0,0 +1,38 @@ +/* + * Copyright 2011 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Nonstandard Definitions for W3C's Navigation Timing + * specification. + * + * @externs + */ + +// Nonstandard. Only available in Blink. +// Returns more granular results with the --enable-memory-info flag. +/** @type {MemoryInfo} */ Performance.prototype.memory; + +/** + * Clear out the buffer of performance timing events for webkit browsers. + * @return {undefined} + */ +Performance.prototype.webkitClearResourceTimings = function() {}; + +/** + * @return {number} + * @nosideeffects + */ +Performance.prototype.webkitNow = function() {}; diff --git a/javascript/externs/web/nonstandard_rtc.js b/javascript/externs/web/nonstandard_rtc.js new file mode 100644 index 000000000000..a9c5f5ae6158 --- /dev/null +++ b/javascript/externs/web/nonstandard_rtc.js @@ -0,0 +1,44 @@ +/* + * Copyright 2019 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Nonstandard definitions for components of the WebRTC browser + * API. + * + * @externs + */ + +/** + * @type {function(new: MediaStream, + * (!MediaStream|!Array)=)} + */ +var webkitMediaStream; + +/** + * @param {MediaStreamConstraints} constraints A MediaStreamConstraints object. + * @param {function(!MediaStream)} successCallback + * A NavigatorUserMediaSuccessCallback function. + * @param {function(!NavigatorUserMediaError)=} errorCallback A + * NavigatorUserMediaErrorCallback function. + * @see http://dev.w3.org/2011/webrtc/editor/getusermedia.html + * @see https://www.w3.org/TR/mediacapture-streams/ + * @return {undefined} + */ +Navigator.prototype.webkitGetUserMedia = function( + constraints, successCallback, errorCallback) {}; + +/** @const */ +var webkitRTCPeerConnection = RTCPeerConnection; diff --git a/javascript/externs/web/nonstandard_selection.js b/javascript/externs/web/nonstandard_selection.js new file mode 100644 index 000000000000..248f5dd9a5eb --- /dev/null +++ b/javascript/externs/web/nonstandard_selection.js @@ -0,0 +1,80 @@ +/* + * Copyright 2011 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Nonstandard enhancements to W3C's Selection API. + * + * @externs + */ + +// The following were sources from the webkit externs. + +/** @type {?Node} */ +Selection.prototype.baseNode; + +/** @type {number} */ +Selection.prototype.baseOffset; + +/** @type {?Node} */ +Selection.prototype.extentNode; + +/** @type {number} */ +Selection.prototype.extentOffset; + +/** + * @param {string} alter + * @param {string} direction + * @param {string} granularity + * @return {undefined} + */ +Selection.prototype.modify = function(alter, direction, granularity) {}; + + +// The following were sources from the gecko externs. + + +/** + * @see https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange + */ +Selection.prototype.selectionLanguageChange; + + +// The following were sources from the ie externs. + + +/** + * @type {?Selection} + * @see http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx + */ +Document.prototype.selection; + +/** + * @return {undefined} + * @see http://msdn.microsoft.com/en-us/library/ms536418(VS.85).aspx + */ +Selection.prototype.clear = function() {}; + +/** + * @return {?TextRange|?ControlRange} + * @see http://msdn.microsoft.com/en-us/library/ms536394(VS.85).aspx + */ +Selection.prototype.createRange = function() {}; + +/** + * @return {?Array} + * @see http://msdn.microsoft.com/en-us/library/ms536396(VS.85).aspx + */ +Selection.prototype.createRangeCollection = function() {}; diff --git a/javascript/externs/web/w3c_abort.js b/javascript/externs/web/w3c_abort.js new file mode 100644 index 000000000000..cd023450ca5d --- /dev/null +++ b/javascript/externs/web/w3c_abort.js @@ -0,0 +1,50 @@ +/* + * Copyright 2018 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for AbortController + * @see https://dom.spec.whatwg.org/#aborting-ongoing-activities + * @externs + */ + + + +/** + * @record + * @extends {EventTarget} + * @see https://dom.spec.whatwg.org/#interface-AbortSignal + */ +function AbortSignal() {} + +/** @type {boolean} */ +AbortSignal.prototype.aborted; + +/** @type {?function(!Event)} */ +AbortSignal.prototype.onabort; + + + +/** + * @constructor + * @see https://dom.spec.whatwg.org/#interface-abortcontroller + */ +function AbortController() {} + +/** @const {!AbortSignal} */ +AbortController.prototype.signal; + +/** @return {void} */ +AbortController.prototype.abort = function() {}; diff --git a/javascript/externs/web/w3c_audio.js b/javascript/externs/web/w3c_audio.js new file mode 100644 index 000000000000..4a8729846cc0 --- /dev/null +++ b/javascript/externs/web/w3c_audio.js @@ -0,0 +1,1587 @@ +/* + * Copyright 2012 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for the API related to audio. + * Definitions for the Web Audio API. + * This file is based on the W3C Working Draft 08 December 2015. + * @see http://www.w3.org/TR/webaudio/ + * + * @externs + */ + +/** + * @implements {EventTarget} + * @constructor + */ +function BaseAudioContext() {} + +/** @type {!AudioDestinationNode} */ +BaseAudioContext.prototype.destination; + +/** @type {number} */ +BaseAudioContext.prototype.sampleRate; + +/** @type {number} */ +BaseAudioContext.prototype.currentTime; + +/** @type {!AudioListener} */ +BaseAudioContext.prototype.listener; + +/** @type {!AudioWorklet} */ +BaseAudioContext.prototype.audioWorklet; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#BaseAudioContext for valid values + */ +BaseAudioContext.prototype.state; + +/** + * @param {number} numberOfChannels + * @param {number} length + * @param {number} sampleRate + * @return {!AudioBuffer} + */ +BaseAudioContext.prototype.createBuffer = + function(numberOfChannels, length, sampleRate) {}; + +/** + * @param {!ArrayBuffer} audioData + * @param {function(!AudioBuffer)=} successCallback + * @param {function(?)=} errorCallback + * @return {!Promise} + */ +BaseAudioContext.prototype.decodeAudioData = + function(audioData, successCallback, errorCallback) {}; + +/** + * @return {!AudioBufferSourceNode} + */ +BaseAudioContext.prototype.createBufferSource = function() {}; + +/** + * @deprecated Use createAudioWorker instead + * @param {number=} bufferSize + * @param {number=} numberOfInputChannels_opt + * @param {number=} numberOfOutputChannels_opt + * @return {!ScriptProcessorNode} + */ +BaseAudioContext.prototype.createScriptProcessor = function(bufferSize, + numberOfInputChannels_opt, numberOfOutputChannels_opt) {}; + +/** + * @return {!AnalyserNode} + */ +BaseAudioContext.prototype.createAnalyser = function() {}; + +/** + * @return {!GainNode} + */ +BaseAudioContext.prototype.createGain = function() {}; + +/** + * @param {number=} maxDelayTime + * @return {!DelayNode} + */ +BaseAudioContext.prototype.createDelay = function(maxDelayTime) {}; + +/** + * @return {!BiquadFilterNode} + */ +BaseAudioContext.prototype.createBiquadFilter = function() {}; + +/** + * @return {!WaveShaperNode} + */ +BaseAudioContext.prototype.createWaveShaper = function() {}; + +/** + * @return {!PannerNode} + */ +BaseAudioContext.prototype.createPanner = function() {}; + +/** + * @return {!StereoPannerNode} + */ +BaseAudioContext.prototype.createStereoPanner = function() {}; + +/** + * @return {!ConvolverNode} + */ +BaseAudioContext.prototype.createConvolver = function() {}; + +/** + * @param {number=} numberOfOutputs + * @return {!ChannelSplitterNode} + */ +BaseAudioContext.prototype.createChannelSplitter = function(numberOfOutputs) {}; + +/** + * @param {number=} numberOfInputs + * @return {!ChannelMergerNode} + */ +BaseAudioContext.prototype.createChannelMerger = function(numberOfInputs) {}; + +/** + * @return {!ConstantSourceNode} + */ +BaseAudioContext.prototype.createConstantSource = function() {}; + +/** + * @return {!DynamicsCompressorNode} + */ +BaseAudioContext.prototype.createDynamicsCompressor = function() {}; + +/** + * @return {!OscillatorNode} + */ +BaseAudioContext.prototype.createOscillator = function() {}; + +/** + * @param {!Float32Array} real + * @param {!Float32Array} imag + * @return {!PeriodicWave} + */ +BaseAudioContext.prototype.createPeriodicWave = function(real, imag) {}; + +/** + * @return {!Promise} + */ +BaseAudioContext.prototype.resume = function() {}; + +/** + * @return {!Promise} + */ +BaseAudioContext.prototype.suspend = function() {}; + +/** + * @return {!Promise} + */ +BaseAudioContext.prototype.close = function() {}; + +/** @type {?function(!Event)} */ +BaseAudioContext.prototype.onstatechange; + +/** + * @param {string} scriptURL + * @return {!Promise} + */ +BaseAudioContext.prototype.createAudioWorker = function(scriptURL) {}; + +/** + * @param {!IArrayLike} feedforward + * @param {!IArrayLike} feedback + * @return {!IIRFilterNode} + */ +BaseAudioContext.prototype.createIIRFilter = function(feedforward, feedback) {}; + +/** + * @return {!SpatialPannerNode} + */ +BaseAudioContext.prototype.createSpatialPanner = function() {}; + +/** + * @record + * @see https://webaudio.github.io/web-audio-api/#idl-def-AudioContextOptions + */ +function AudioContextOptions() {}; + +/** @type {(undefined|string|number)} */ +AudioContextOptions.prototype.latencyHint; + +/** @type {(undefined|number)} */ +AudioContextOptions.prototype.sampleRate; + +/** + * Includes the non-standard contextOptions optional options parameter + * implemented by Chrome and Firefox. + * @param {!AudioContextOptions=} contextOptions + * @constructor + * @extends {BaseAudioContext} + */ +function AudioContext(contextOptions) {} + +/** + * @param {!HTMLMediaElement} mediaElement + * @return {!MediaElementAudioSourceNode} + */ +AudioContext.prototype.createMediaElementSource = function(mediaElement) {}; + +/** + * @return {!MediaStreamAudioDestinationNode} + */ +AudioContext.prototype.createMediaStreamDestination = function() {}; + +/** + * @param {!MediaStream} mediaStream + * @return {!MediaStreamAudioSourceNode} + */ +AudioContext.prototype.createMediaStreamSource = function(mediaStream) {}; + +/** + * @deprecated Use createScriptProcessor instead. + * @param {number} bufferSize + * @param {number} numberOfInputs + * @param {number} numberOfOuputs + * @return {!ScriptProcessorNode} + */ +AudioContext.prototype.createJavaScriptNode = function(bufferSize, + numberOfInputs, numberOfOuputs) {}; + +/** + * @deprecated Use createGain instead. + * @return {!GainNode} + */ +AudioContext.prototype.createGainNode = function() {}; + +/** + * @deprecated Use createDelay instead. + * @param {number=} maxDelayTime + * @return {!DelayNode} + */ +AudioContext.prototype.createDelayNode = function(maxDelayTime) {}; + +/** + * @param {number} numberOfChannels + * @param {number} length + * @param {number} sampleRate + * @constructor + * @extends {BaseAudioContext} + */ +function OfflineAudioContext(numberOfChannels, length, sampleRate) {} + +/** + * @return {!Promise} + */ +OfflineAudioContext.prototype.startRendering = function() {}; + +/** @type {function(!OfflineAudioCompletionEvent)} */ +OfflineAudioContext.prototype.oncomplete; + +/** + * @constructor + * @extends {Event} + */ +function OfflineAudioCompletionEvent() {} + +/** @type {AudioBuffer} */ +OfflineAudioCompletionEvent.prototype.renderedBuffer; + +/** + * @constructor + * @implements {EventTarget} + * @see https://www.w3.org/TR/webaudio/#the-audionode-interface + */ +function AudioNode() {} + +/** + * @override + */ +AudioNode.prototype.addEventListener = function(type, listener, + opt_useCapture) {}; + +/** + * @override + */ +AudioNode.prototype.removeEventListener = function(type, listener, + opt_useCapture) {}; + +/** + * @override + * @return {boolean} + */ +AudioNode.prototype.dispatchEvent = function(evt) {}; + +/** + * @param {!AudioNode|!AudioParam} destination + * @param {number=} output + * @param {number=} input + * @return {AudioNode|void} + */ +AudioNode.prototype.connect = function(destination, output, input) {}; + +/** + * @param {!AudioNode|!AudioParam|number=} destination + * @param {number=} output + * @param {number=} input + */ +AudioNode.prototype.disconnect = function(destination, output, input) {}; + +/** @type {!AudioContext} */ +AudioNode.prototype.context; + +/** @type {number} */ +AudioNode.prototype.numberOfInputs; + +/** @type {number} */ +AudioNode.prototype.numberOfOutputs; + +/** @type {number} */ +AudioNode.prototype.channelCount; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values + */ +AudioNode.prototype.channelCountMode; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values + */ +AudioNode.prototype.channelInterpretation; + +/** + * @constructor + * @extends {AudioNode} + */ +function AudioSourceNode() {} + +/** + * @constructor + * @extends {AudioNode} + */ +function AudioDestinationNode() {} + +/** + * @deprecated Use AudioDestinationNode#maxChannelCount + * @type {number} + */ +AudioDestinationNode.prototype.numberOfChannels; + +/** @type {number} */ +AudioDestinationNode.prototype.maxChannelCount; + +/** + * @constructor + */ +function AudioParam() {} + +/** @type {number} */ +AudioParam.prototype.value; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#dom-audioparam-automationrate for valid + * values. + */ +AudioParam.prototype.automationRate; + +/** + * @deprecated + * @type {number} + */ +AudioParam.prototype.maxValue; + +/** + * @deprecated + * @type {number} + */ +AudioParam.prototype.minValue; + +/** @type {number} */ +AudioParam.prototype.defaultValue; + +/** + * @deprecated + * @type {number} + */ +AudioParam.prototype.units; + +/** + * @param {number} value + * @param {number} startTime + * @return {!AudioParam} + * @throws {!TypeError} if startTime is negative or not a finite number + */ +AudioParam.prototype.setValueAtTime = function(value, startTime) {}; + +/** + * @param {number} value + * @param {number} endTime + * @return {!AudioParam} + * @throws {!TypeError} if endTime is negative or not a finite number + */ +AudioParam.prototype.linearRampToValueAtTime = function(value, endTime) {}; + +/** + * @param {number} value + * @param {number} endTime + * @return {!AudioParam} + * @throws {!TypeError} if endTime is negative or not a finite number + */ +AudioParam.prototype.exponentialRampToValueAtTime = function(value, endTime) {}; + +/** + * @param {number} target + * @param {number} startTime + * @param {number} timeConstant + * @return {!AudioParam} + * @throws {!TypeError} if startTime is negative or not a finite number, or + * timeConstant is not strictly positive + */ +AudioParam.prototype.setTargetAtTime = function(target, startTime, + timeConstant) {}; + +/** + * @deprecated Use setTargetAtTime instead. + * @param {number} target + * @param {number} startTime + * @param {number} timeConstant + * @return {!AudioParam} + */ +AudioParam.prototype.setTargetValueAtTime = function(target, startTime, + timeConstant) {}; + +/** + * @param {!Float32Array} values + * @param {number} startTime + * @param {number} duration + * @return {!AudioParam} + * @throws {!TypeError} if startTime is negative or not a finite number + */ +AudioParam.prototype.setValueCurveAtTime = function(values, startTime, + duration) {}; + +/** + * @param {number} startTime + * @return {!AudioParam} + * @throws {!TypeError} if startTime is negative or not a finite number + */ +AudioParam.prototype.cancelScheduledValues = function(startTime) {}; + +/** + * @constructor + * @extends {AudioParam} + */ +function AudioGain() {} + +/** + * @constructor + * @extends {AudioNode} + */ +function GainNode() {} + +/** @type {!AudioParam} */ +GainNode.prototype.gain; + +/** + * @constructor + * @extends {AudioNode} + */ +function DelayNode() {} + +/** @type {!AudioParam} */ +DelayNode.prototype.delayTime; + +/** + * @constructor + */ +function AudioBuffer() {} + +/** + * @deprecated + * @type {!AudioGain} + */ +AudioBuffer.prototype.gain; + +/** @type {number} */ +AudioBuffer.prototype.sampleRate; + +/** @type {number} */ +AudioBuffer.prototype.length; + +/** @type {number} */ +AudioBuffer.prototype.duration; + +/** @type {number} */ +AudioBuffer.prototype.numberOfChannels; + +/** + * @param {number} channel + * @return {!Float32Array} + */ +AudioBuffer.prototype.getChannelData = function(channel) {}; + +/** + * @param {!Float32Array} destination + * @param {number} channelNumber + * @param {number=} startInChannel + */ +AudioBuffer.prototype.copyFromChannel = function(destination, + channelNumber, startInChannel) {}; + +/** + * @param {!Float32Array} source + * @param {number} channelNumber + * @param {number=} startInChannel + */ +AudioBuffer.prototype.copyToChannel = function(source, channelNumber, + startInChannel) {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function AudioBufferSourceNode() {} + +/** + * @deprecated + * @const {number} + */ +AudioBufferSourceNode.prototype.UNSCHEDULED_STATE; + +/** + * @deprecated + * @const {number} + */ +AudioBufferSourceNode.prototype.SCHEDULED_STATE; + +/** + * @deprecated + * @const {number} + */ +AudioBufferSourceNode.prototype.PLAYING_STATE; + +/** + * @deprecated + * @const {number} + */ +AudioBufferSourceNode.prototype.FINISHED_STATE; + +/** + * @deprecated + * @type {number} + */ +AudioBufferSourceNode.prototype.playbackState; + +/** @type {AudioBuffer} */ +AudioBufferSourceNode.prototype.buffer; + +/** + * @deprecated + * @type {number} + */ +AudioBufferSourceNode.prototype.gain; + +/** @type {!AudioParam} */ +AudioBufferSourceNode.prototype.playbackRate; + +/** @type {boolean} */ +AudioBufferSourceNode.prototype.loop; + +/** @type {number} */ +AudioBufferSourceNode.prototype.loopStart; + +/** @type {number} */ +AudioBufferSourceNode.prototype.loopEnd; + +/** @type {?function(!Event): void} */ +AudioBufferSourceNode.prototype.onended; + +/** @type {!AudioParam} */ +AudioBufferSourceNode.prototype.detune; + +/** + * @param {number=} when + * @param {number=} opt_offset + * @param {number=} opt_duration + * @throws {!TypeError} if any parameter is negative + */ +AudioBufferSourceNode.prototype.start = function(when, opt_offset, + opt_duration) {}; + +/** + * @param {number=} when + * @throws {!TypeError} if when is negative + */ +AudioBufferSourceNode.prototype.stop = function(when) {}; + +/** + * @deprecated Use AudioBufferSourceNode#start + * @param {number} when + * @return {undefined} + */ +AudioBufferSourceNode.prototype.noteOn = function(when) {}; + +/** + * @param {number=} when + * @param {number=} opt_offset + * @param {number=} opt_duration + * @deprecated Use AudioBufferSourceNode#start + */ +AudioBufferSourceNode.prototype.noteGrainOn = function(when, opt_offset, + opt_duration) {}; + +/** + * @param {number} when + * @deprecated Use AudioBufferSourceNode#stop + */ +AudioBufferSourceNode.prototype.noteOff = function(when) {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function MediaElementAudioSourceNode() {} + +/** + * @constructor + */ +function AudioWorker() {} + +/** @type {?function(!Event)} */ +AudioWorker.prototype.onloaded; + +/** @type {?function(!Event)} */ +AudioWorker.prototype.onmessage; + +/** @type {!Array} */ +AudioWorker.prototype.parameters; + +/** + * @param {string} name + * @param {number} defaultValue + * @return {!AudioParam} + */ +AudioWorker.prototype.addParameter = function(name, defaultValue) {}; + +/** + * @param {number} numberOfInputs + * @param {number} numberOfOutputs + * @return {!AudioWorkerNode} + */ +AudioWorker.prototype.createNode = function(numberOfInputs, numberOfOutputs) {}; + +/** + * @param {*} message + * @param {!Array=} transfer + */ +AudioWorker.prototype.postMessage = function(message, transfer) {}; + +/** + * @param {string} name + */ +AudioWorker.prototype.removeParameter = function(name) {}; + +/** + */ +AudioWorker.prototype.terminate = function() {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function AudioWorkerNode() {} + +/** @type {?function(!Event)} */ +AudioWorkerNode.prototype.onmessage; + +/** + * @param {*} message + * @param {!Array=} transfer + */ +AudioWorkerNode.prototype.postMessage = function(message, transfer) {}; + +/** + * @constructor + */ +function AudioWorkerParamDescriptor() {} + +/** @type {number} */ +AudioWorkerParamDescriptor.prototype.defaultValue; + +/** @type {string} */ +AudioWorkerParamDescriptor.prototype.name; + +/** + * @constructor + */ +function AudioWorkerGlobalScope() {} + +/** @type {?function(!Event)} */ +AudioWorkerGlobalScope.prototype.onaudioprocess; + +/** @type {?function(!Event)} */ +AudioWorkerGlobalScope.prototype.onnodecreate; + +/** @type {!Array} */ +AudioWorkerGlobalScope.prototype.parameters; + +/** @type {number} */ +AudioWorkerGlobalScope.prototype.sampleRate; + +/** + * @param {string} name + * @param {number} defaultValue + * @return {!AudioParam} + */ +AudioWorkerGlobalScope.prototype.addParameter = function(name, defaultValue) {}; + +/** + * @param {string} name + */ +AudioWorkerGlobalScope.prototype.removeParameter = function(name) {}; + +/** + * @constructor + */ +function AudioWorkerNodeProcessor() {} + +/** @type {?function(!Event)} */ +AudioWorkerNodeProcessor.prototype.onmessage; + +/** + * @param {*} message + * @param {!Array=} transfer + */ +AudioWorkerNodeProcessor.prototype.postMessage = function(message, transfer) {}; + +/** + * @constructor + * @extends {AudioNode} + * @deprecated Use AudioWorkerNode + */ +function JavaScriptAudioNode() {} + +/** + * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))} + * @deprecated Use AudioWorkerNode + */ +JavaScriptAudioNode.prototype.onaudioprocess; + +/** + * @type {number} + * @deprecated Use AudioWorkerNode + */ +JavaScriptAudioNode.prototype.bufferSize; + +/** + * @constructor + * @extends {AudioNode} + * @deprecated Use AudioWorkerNode + */ +function ScriptProcessorNode() {} + +/** + * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))} + * @deprecated Use AudioWorkerNode + */ +ScriptProcessorNode.prototype.onaudioprocess; + +/** + * @type {number} + * @deprecated Use AudioWorkerNode + */ +ScriptProcessorNode.prototype.bufferSize; + +/** + * @constructor + * @extends {Event} + */ +function AudioWorkerNodeCreationEvent() {} + +/** @type {!Array} */ +AudioWorkerNodeCreationEvent.prototype.inputs; + +/** @type {!AudioWorkerNodeProcessor} */ +AudioWorkerNodeCreationEvent.prototype.node; + +/** @type {!Array} */ +AudioWorkerNodeCreationEvent.prototype.outputs; + +/** + * @constructor + * @extends {Event} + */ +function AudioProcessEvent() {} + +/** @type {!Float32Array} */ +AudioProcessEvent.prototype.inputs; + +/** @type {!AudioWorkerNodeProcessor} */ +AudioProcessEvent.prototype.node; + +/** @type {!Float32Array} */ +AudioProcessEvent.prototype.outputs; + +/** @type {!Object} */ +AudioProcessEvent.prototype.parameters; + +/** @type {number} */ +AudioProcessEvent.prototype.playbackTime; + +/** + * @constructor + * @extends {Event} + * @deprecated Use AudioProcessEvent + */ +function AudioProcessingEvent() {} + +/** + * @type {!ScriptProcessorNode} + * @deprecated Use AudioProcessEvent + */ +AudioProcessingEvent.prototype.node; + +/** + * @type {number} + * @deprecated Use AudioProcessEvent + */ +AudioProcessingEvent.prototype.playbackTime; + +/** + * @type {!AudioBuffer} + * @deprecated Use AudioProcessEvent + */ +AudioProcessingEvent.prototype.inputBuffer; + +/** + * @type {!AudioBuffer} + * @deprecated Use AudioProcessEvent + */ +AudioProcessingEvent.prototype.outputBuffer; + +/** + * @deprecated + * @constructor + * @extends {AudioNode} + */ +function AudioPannerNode() {} + +/** + * @deprecated + * @const {number} + */ +AudioPannerNode.prototype.EQUALPOWER; + +/** + * @deprecated + * @const {number} + */ +AudioPannerNode.prototype.HRTF; + +/** + * @deprecated + * @const {number} + */ +AudioPannerNode.prototype.SOUNDFIELD; + +/** + * @deprecated + * @const {number} + */ +AudioPannerNode.prototype.LINEAR_DISTANCE; + +/** + * @deprecated + * @const {number} + */ +AudioPannerNode.prototype.INVERSE_DISTANCE; + +/** + * @deprecated + * @const {number} + */ +AudioPannerNode.prototype.EXPONENTIAL_DISTANCE; + +/** + * @deprecated + * @type {number|string} + */ +AudioPannerNode.prototype.panningModel; + +/** + * @deprecated + * @param {number} x + * @param {number} y + * @param {number} z + * @return {undefined} + */ +AudioPannerNode.prototype.setPosition = function(x, y, z) {}; + +/** + * @deprecated + * @param {number} x + * @param {number} y + * @param {number} z + * @return {undefined} + */ +AudioPannerNode.prototype.setOrientation = function(x, y, z) {}; + +/** + * @deprecated + * @param {number} x + * @param {number} y + * @param {number} z + * @return {undefined} + */ +AudioPannerNode.prototype.setVelocity = function(x, y, z) {}; + +/** + * @deprecated + * @type {number|string} + */ +AudioPannerNode.prototype.distanceModel; + +/** + * @deprecated + * @type {number} + */ +AudioPannerNode.prototype.refDistance; + +/** + * @deprecated + * @type {number} + */ +AudioPannerNode.prototype.maxDistance; + +/** + * @deprecated + * @type {number} + */ +AudioPannerNode.prototype.rolloffFactor; + +/** + * @deprecated + * @type {number} + */ +AudioPannerNode.prototype.coneInnerAngle; + +/** + * @deprecated + * @type {number} + */ +AudioPannerNode.prototype.coneOuterAngle; + +/** + * @deprecated + * @type {number} + */ +AudioPannerNode.prototype.coneOuterGain; + +/** + * @deprecated + * @type {!AudioGain} + */ +AudioPannerNode.prototype.coneGain; + +/** + * @deprecated + * @type {!AudioGain} + */ +AudioPannerNode.prototype.distanceGain; + +/** + * @constructor + * @extends {AudioNode} + */ +function PannerNode() {} + +/** @type {number} */ +PannerNode.prototype.coneInnerAngle; + +/** @type {number} */ +PannerNode.prototype.coneOuterAngle; + +/** @type {number} */ +PannerNode.prototype.coneOuterGain; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values + */ +PannerNode.prototype.distanceModel; + +/** @type {number} */ +PannerNode.prototype.maxDistance; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values + */ +PannerNode.prototype.panningModel; + +/** @type {number} */ +PannerNode.prototype.refDistance; + +/** @type {number} */ +PannerNode.prototype.rolloffFactor; + +/** + * @param {number} x + * @param {number} y + * @param {number} z + */ +PannerNode.prototype.setOrientation = function(x, y, z) {}; + +/** + * @param {number} x + * @param {number} y + * @param {number} z + */ +PannerNode.prototype.setPosition = function(x, y, z) {}; + +/** + * @param {number} x + * @param {number} y + * @param {number} z + */ +PannerNode.prototype.setVelocity = function(x, y, z) {}; + +/** + * @constructor + * @deprecated Use SpatialListener + */ +function AudioListener() {} + +/** + * @type {number} + * @deprecated Use SpatialListener + */ +AudioListener.prototype.gain; + +/** + * @type {number} + * @deprecated Use SpatialListener + */ +AudioListener.prototype.dopplerFactor; + +/** + * @type {number} + * @deprecated Use SpatialListener + */ +AudioListener.prototype.speedOfSound; + +/** + * @param {number} x + * @param {number} y + * @param {number} z + * @deprecated Use SpatialListener + */ +AudioListener.prototype.setPosition = function(x, y, z) {}; + +/** + * @param {number} x + * @param {number} y + * @param {number} z + * @param {number} xUp + * @param {number} yUp + * @param {number} zUp + * @deprecated Use SpatialListener + */ +AudioListener.prototype.setOrientation = function(x, y, z, xUp, yUp, zUp) {}; + +/** + * @param {number} x + * @param {number} y + * @param {number} z + * @deprecated Use SpatialListener + */ +AudioListener.prototype.setVelocity = function(x, y, z) {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function SpatialPannerNode() {} + +/** @type {number} */ +SpatialPannerNode.prototype.coneInnerAngle; + +/** @type {number} */ +SpatialPannerNode.prototype.coneOuterAngle; + +/** @type {number} */ +SpatialPannerNode.prototype.coneOuterGain; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values + */ +SpatialPannerNode.prototype.distanceModel; + +/** @type {number} */ +SpatialPannerNode.prototype.maxDistance; + +/** @type {!AudioParam} */ +SpatialPannerNode.prototype.orientationX; + +/** @type {!AudioParam} */ +SpatialPannerNode.prototype.orientationY; + +/** @type {!AudioParam} */ +SpatialPannerNode.prototype.orientationZ; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values + */ +SpatialPannerNode.prototype.panningModel; + +/** @type {!AudioParam} */ +SpatialPannerNode.prototype.positionX; + +/** @type {!AudioParam} */ +SpatialPannerNode.prototype.positionY; + +/** @type {!AudioParam} */ +SpatialPannerNode.prototype.positionZ; + +/** @type {number} */ +SpatialPannerNode.prototype.refDistance; + +/** @type {number} */ +SpatialPannerNode.prototype.rolloffFactor; + +/** + * @constructor + */ +function SpatialListener() {} + +/** @type {!AudioParam} */ +SpatialListener.prototype.forwardX; + +/** @type {!AudioParam} */ +SpatialListener.prototype.forwardY; + +/** @type {!AudioParam} */ +SpatialListener.prototype.forwardZ; + +/** @type {!AudioParam} */ +SpatialListener.prototype.positionX; + +/** @type {!AudioParam} */ +SpatialListener.prototype.positionY; + +/** @type {!AudioParam} */ +SpatialListener.prototype.positionZ; + +/** @type {!AudioParam} */ +SpatialListener.prototype.upX; + +/** @type {!AudioParam} */ +SpatialListener.prototype.upY; + +/** @type {!AudioParam} */ +SpatialListener.prototype.upZ; + +/** + * @constructor + * @extends {AudioNode} + * @see http://webaudio.github.io/web-audio-api/#the-stereopannernode-interface + */ +function StereoPannerNode() {} + +/** @type {!AudioParam} */ +StereoPannerNode.prototype.pan; + +/** + * @constructor + * @extends {AudioNode} + */ +function ConvolverNode() {} + +/** @type {?AudioBuffer} */ +ConvolverNode.prototype.buffer; + +/** @type {boolean} */ +ConvolverNode.prototype.normalize; + +/** + * @constructor + * @extends {AudioNode} + */ +var AnalyserNode = function() {}; + +/** + * @param {!Float32Array} array + */ +AnalyserNode.prototype.getFloatFrequencyData = function(array) {}; + +/** + * @param {!Uint8Array} array + */ +AnalyserNode.prototype.getByteFrequencyData = function(array) {}; + +/** + * @param {!Uint8Array} array + */ +AnalyserNode.prototype.getByteTimeDomainData = function(array) {}; + +/** + * @param {!Float32Array} array + */ +AnalyserNode.prototype.getFloatTimeDomainData = function(array) {}; + +/** @type {number} */ +AnalyserNode.prototype.fftSize; + +/** @type {number} */ +AnalyserNode.prototype.frequencyBinCount; + +/** @type {number} */ +AnalyserNode.prototype.minDecibels; + +/** @type {number} */ +AnalyserNode.prototype.maxDecibels; + +/** @type {number} */ +AnalyserNode.prototype.smoothingTimeConstant; + +/** + * @constructor + * @extends {AnalyserNode} + * @deprecated Use AnalyserNode + * + * This constructor has been added for backwards compatibility. + */ +var RealtimeAnalyserNode = function() {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function ChannelSplitterNode() {} + +/** + * @constructor + * @extends {ChannelSplitterNode} + * @deprecated Use ChannelSplitterNode + * + * This constructor has been added for backwards compatibility. + */ +function AudioChannelSplitter() {} + +/** + * @constructor + * @extends {AudioNode} + */ +function ChannelMergerNode() {} + +/** + * @constructor + * @extends {ChannelMergerNode} + * @deprecated Use ChannelMergerNode + * + * This constructor has been added for backwards compatibility. + */ +function AudioChannelMerger() {} + +/** + * @constructor + * @extends {AudioNode} + */ +function DynamicsCompressorNode() {} + +/** @type {!AudioParam} */ +DynamicsCompressorNode.prototype.threshold; + +/** @type {!AudioParam} */ +DynamicsCompressorNode.prototype.knee; + +/** @type {!AudioParam} */ +DynamicsCompressorNode.prototype.ratio; + +/** @type {number} */ +DynamicsCompressorNode.prototype.reduction; + +/** @type {!AudioParam} */ +DynamicsCompressorNode.prototype.attack; + +/** @type {!AudioParam} */ +DynamicsCompressorNode.prototype.release; + +/** + * @constructor + * @extends {AudioNode} + */ +function BiquadFilterNode() {} + +/** + * A read-able and write-able string that specifies the type of the filter. + * See http://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface + * for valid values. + * @type {string} + */ +BiquadFilterNode.prototype.type; + +/** @type {!AudioParam} */ +BiquadFilterNode.prototype.frequency; + +/** @type {!AudioParam} */ +BiquadFilterNode.prototype.detune; + +/** @type {!AudioParam} */ +BiquadFilterNode.prototype.Q; + +/** @type {!AudioParam} */ +BiquadFilterNode.prototype.gain; +/** + * @param {Float32Array} frequencyHz + * @param {Float32Array} magResponse + * @param {Float32Array} phaseResponse + * @return {undefined} + */ +BiquadFilterNode.prototype.getFrequencyResponse = function( + frequencyHz, magResponse, phaseResponse) {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function IIRFilterNode() {} + +/** + * @param {!Float32Array} frequencyHz + * @param {!Float32Array} magResponse + * @param {!Float32Array} phaseResponse + * @return {undefined} + */ +IIRFilterNode.prototype.getFrequencyResponse = function( + frequencyHz, magResponse, phaseResponse) {}; + +/** + * @constructor + * @extends {AudioNode} + */ +function WaveShaperNode() {} + +/** @type {Float32Array} */ +WaveShaperNode.prototype.curve; + +/** @type {string} */ +WaveShaperNode.prototype.oversample; + +/** + * @deprecated + * @constructor + */ +function WaveTable() {} + +/** + * @constructor + * @extends {AudioNode} + */ +function OscillatorNode() {} + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#the-oscillatornode-interface for valid values + */ +OscillatorNode.prototype.type; + +/** + * @deprecated + * @type {number} + */ +OscillatorNode.prototype.playbackState; + +/** @type {!AudioParam} */ +OscillatorNode.prototype.frequency; + +/** @type {!AudioParam} */ +OscillatorNode.prototype.detune; + +/** + * @param {number=} when + */ +OscillatorNode.prototype.start = function(when) {}; + +/** + * @param {number=} when + */ +OscillatorNode.prototype.stop = function(when) {}; + +/** + * @deprecated + * @param {!WaveTable} waveTable + */ +OscillatorNode.prototype.setWaveTable = function(waveTable) {}; + +/** + * @param {!PeriodicWave} periodicWave + */ +OscillatorNode.prototype.setPeriodicWave = function(periodicWave) {}; + +/** @type {?function(!Event)} */ +OscillatorNode.prototype.onended; + +/** + * @constructor + */ +function PeriodicWave() {} + +/** + * @record + * @see https://www.w3.org/TR/webaudio/#dictdef-constantsourceoptions + */ +function ConstantSourceOptions() {}; + +/** @const {(number|undefined)} */ +ConstantSourceOptions.offset; + +/** + * @param {!BaseAudioContext} context + * @param {!ConstantSourceOptions=} options + * @constructor + * @extends {AudioNode} + * @see https://www.w3.org/TR/webaudio/#ConstantSourceNode + */ +function ConstantSourceNode(context, options) {} + +/** + * @param {number=} when + */ +ConstantSourceNode.prototype.start = function(when) {}; + +/** + * @param {number=} when + */ +ConstantSourceNode.prototype.stop = function(when) {}; + +/** @type {!AudioParam} */ +ConstantSourceNode.prototype.offset; + +/** + * @constructor + * @extends {AudioNode} + */ +function MediaStreamAudioSourceNode() {} + +/** + * @constructor + * @extends {AudioNode} + */ +function MediaStreamAudioDestinationNode() {} + +/** @type {!MediaStream} */ +MediaStreamAudioDestinationNode.prototype.stream; + +/** + * @constructor + * @see https://www.w3.org/TR/webaudio/#audioworklet + * @implements {Worklet} + */ +function AudioWorklet() {} + +/** + * @constructor + * @see https://www.w3.org/TR/webaudio/#audioworkletglobalscope + * @implements {WorkletGlobalScope} + */ +function AudioWorkletGlobalScope() {} + +/** @type {number} */ +AudioWorkletGlobalScope.prototype.currentFrame; + +/** @type {number} */ +AudioWorkletGlobalScope.prototype.currentTime; + +/** @type {number} */ +AudioWorkletGlobalScope.prototype.sampleRate; + +/** + * @param {!string} name + * @param {!function()} processorCtor + */ +AudioWorkletGlobalScope.prototype.registerProcessor = function( + name, processorCtor) {}; + +/** + * @constructor + * @extends {AudioNode} + * @param {!BaseAudioContext} context + * @param {string} name + * @param {!AudioWorkletNodeOptions=} options + * @see https://www.w3.org/TR/webaudio/#audioworkletnode + */ +function AudioWorkletNode(context, name, options) {} + +/** @type {!EventListener|function()} */ +AudioWorkletNode.prototype.onprocesserror; + +/** @type {!Object} */ +AudioWorkletNode.prototype.parameters; + +/** @type {!MessagePort} */ +AudioWorkletNode.prototype.port; + +/** + * @record + * @see https://webaudio.github.io/web-audio-api/#dictdef-audioworkletnodeoptions + */ +function AudioWorkletNodeOptions() {}; + +/** @type {number} */ +AudioWorkletNodeOptions.prototype.numberOfInputs; + +/** @type {number} */ +AudioWorkletNodeOptions.prototype.numberOfOutputs; + +/** @type {!Array} */ +AudioWorkletNodeOptions.prototype.outputChannelCount; + +/** @type {!Object} */ +AudioWorkletNodeOptions.prototype.parameterData; + +/** @type {?Object} */ +AudioWorkletNodeOptions.prototype.processorOptions; + +/** + * @constructor + * @param {!AudioWorkletNodeOptions=} options + * @see https://www.w3.org/TR/webaudio/#audioworkletprocessor + */ +function AudioWorkletProcessor(options) {} + +/** @type {!MessagePort} */ +AudioWorkletProcessor.prototype.port; + +/** + * @param {!Array>} inputs + * @param {!Array>} outputs + * @param {!Object} parameters + * @return {boolean} + */ +AudioWorkletProcessor.prototype.process = function( + inputs, outputs, parameters) {}; + +/** + * @record + * @see https://www.w3.org/TR/webaudio/#dictdef-audioparamdescriptor + */ +function AudioParamDescriptor() {}; + +/** + * @type {string} + * See https://www.w3.org/TR/webaudio/#dom-audioparam-automationrate for valid + * values. + */ +AudioParamDescriptor.prototype.automationRate; + +/** @type {number} */ +AudioParamDescriptor.prototype.defaultValue; + +/** @type {number} */ +AudioParamDescriptor.prototype.maxValue; + +/** @type {number} */ +AudioParamDescriptor.prototype.minValue; + +/** @type {string} */ +AudioParamDescriptor.prototype.name; diff --git a/javascript/externs/web/w3c_clipboard.js b/javascript/externs/web/w3c_clipboard.js new file mode 100644 index 000000000000..bf8b441b0db2 --- /dev/null +++ b/javascript/externs/web/w3c_clipboard.js @@ -0,0 +1,40 @@ +/* + * Copyright 2018 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Declaration of the asynchronous clipboard Web API. + * @externs + */ + +/** + * @interface + * @see https://w3c.github.io/clipboard-apis/#async-clipboard-api + */ +function Clipboard() {} + +/** + * @return {!Promise} + */ +Clipboard.prototype.readText = function() {}; + +/** + * @param {string} text + * @return {!Promise} + */ +Clipboard.prototype.writeText = function(text) {}; + +/** @const {!Clipboard} */ +Navigator.prototype.clipboard; diff --git a/javascript/externs/web/w3c_clipboardevent.js b/javascript/externs/web/w3c_clipboardevent.js new file mode 100644 index 000000000000..16c6de5386cd --- /dev/null +++ b/javascript/externs/web/w3c_clipboardevent.js @@ -0,0 +1,47 @@ +/* + * Copyright 2015 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's ClipboardEvent API. + * @see http://www.w3.org/TR/clipboard-apis/ + * + * @externs + */ + + + +/** + * @record + * @extends {EventInit} + * @see https://www.w3.org/TR/clipboard-apis/#dfn-eventinit + */ +function ClipboardEventInit() {} + +/** @type {?DataTransfer|undefined} */ +ClipboardEventInit.prototype.clipboardData; + + +/** + * @constructor + * @extends {Event} + * @param {string} type + * @param {ClipboardEventInit=} opt_eventInitDict + */ +function ClipboardEvent(type, opt_eventInitDict) {} + + +/** @const {?DataTransfer} */ +ClipboardEvent.prototype.clipboardData; diff --git a/javascript/externs/web/w3c_composition_event.js b/javascript/externs/web/w3c_composition_event.js new file mode 100644 index 000000000000..4aa48782eeb7 --- /dev/null +++ b/javascript/externs/web/w3c_composition_event.js @@ -0,0 +1,93 @@ +/* + * Copyright 2018 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Composition Events specification. + * @externs + */ + +/** + * The `CompositionEvent` interface provides specific contextual information + * associated with Composition Events. + * @see https://www.w3.org/TR/uievents/#interface-compositionevent + * @record + * @extends {UIEventInit} + */ +function CompositionEventInit() {} + +/** + * `data` holds the value of the characters generated by an input method. This + * MAY be a single Unicode character or a non-empty sequence of Unicode + * characters. This attribute MAY be the empty string. The un-initialized value + * of this attribute MUST be "" (the empty string). + * @type {string} + */ +CompositionEventInit.prototype.data; + +/** + * Composition Events provide a means for inputing text in a supplementary or + * alternate manner than by Keyboard Events, in order to allow the use of + * characters that might not be commonly available on keyboard. For example, + * Composition Events might be used to add accents to characters despite their + * absence from standard US keyboards, to build up logograms of many Asian + * languages from their base components or categories, to select word choices + * from a combination of key presses on a mobile device keyboard, or to convert + * voice commands into text using a speech recognition processor. + * + * Conceptually, a composition session consists of one `compositionstart` event, + * one or more `compositionupdate` events, and one `compositionend` event, with + * the value of the data attribute persisting between each stage of this event + * chain during each session. + * + * Not all IME systems or devices expose the necessary data to the DOM, so the + * active composition string (the "Reading Window" or "candidate selection" menu + * option) might not be available through this interface, in which case the + * selection MAY be represented by the empty string. + * + * @see https://www.w3.org/TR/uievents/#events-compositionevents + * @param {string} type + * @param {!CompositionEventInit=} opt_eventInitDict + * @extends {UIEvent} + * @constructor + */ +function CompositionEvent(type, opt_eventInitDict) {} + +/** + * Initializes attributes of a `CompositionEvent` object. This method has the + * same behavior as `UIEvent.initUIEvent()`. The value of `detail` remains + * undefined. + * + * @see https://www.w3.org/TR/uievents/#idl-interface-CompositionEvent-initializers + * @param {string} typeArg + * @param {boolean} canBubbleArg + * @param {boolean} cancelableArg + * @param {?Window} viewArg + * @param {string} dataArg + * @param {string} localeArg + * @return {undefined} + */ +CompositionEvent.prototype.initCompositionEvent = function( + typeArg, canBubbleArg, cancelableArg, viewArg, dataArg, localeArg) {}; + +/** + * @type {string} + */ +CompositionEvent.prototype.data; + +/** + * @type {string} + */ +CompositionEvent.prototype.locale; diff --git a/javascript/externs/web/w3c_eventsource.js b/javascript/externs/web/w3c_eventsource.js new file mode 100644 index 000000000000..d490f4646b1b --- /dev/null +++ b/javascript/externs/web/w3c_eventsource.js @@ -0,0 +1,110 @@ +/* + * Copyright 2012 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's EventSource API. + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events + * + * @externs + */ + +/** @record */ +function EventSourceInit() {}; + +/** @type {(boolean|undefined)} */ +EventSourceInit.prototype.withCredentials; + +/** + * @constructor + * @implements {EventTarget} + * @param {string} url + * @param {EventSourceInit=} opt_eventSourceInitDict + */ +function EventSource(url, opt_eventSourceInitDict) {} + +/** @override */ +EventSource.prototype.addEventListener = function(type, listener, opt_options) { +}; + +/** @override */ +EventSource.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +EventSource.prototype.dispatchEvent = function(evt) {}; + +/** + * @const {string} + */ +EventSource.prototype.url; + +/** @const {boolean} */ +EventSource.prototype.withCredentials; + +/** + * @const {number} + */ +EventSource.prototype.CONNECTING; + +/** + * @const {number} + */ +EventSource.CONNECTING; + +/** + * @const {number} + */ +EventSource.prototype.OPEN; + +/** + * @const {number} + */ +EventSource.OPEN; + +/** + * @const {number} + */ +EventSource.prototype.CLOSED; + +/** + * @const {number} + */ +EventSource.CLOSED; + +/** + * @const {number} + */ +EventSource.prototype.readyState; + +/** + * @type {?function(!Event): void} + */ +EventSource.prototype.onopen = function(e) {}; + +/** + * @type {?function(!MessageEvent): void} + */ +EventSource.prototype.onmessage = function(e) {}; + +/** + * @type {?function(!Event): void} + */ +EventSource.prototype.onerror = function(e) {}; + +/** + * @return {undefined} + */ +EventSource.prototype.close = function() {}; diff --git a/javascript/externs/web/w3c_fileapi.js b/javascript/externs/web/w3c_fileapi.js new file mode 100644 index 000000000000..353b58f6938c --- /dev/null +++ b/javascript/externs/web/w3c_fileapi.js @@ -0,0 +1,295 @@ +/* + * Copyright 2010 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @fileoverview Definitions for objects in the File API, File Writer API, and + * File System API. Details of the API are at: + * http://www.w3.org/TR/FileAPI/ + * + * @externs + */ + +/** @record */ +function BlobPropertyBag() {}; + +/** @type {(string|undefined)} */ +BlobPropertyBag.prototype.type; + +/** + * @see http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob + * @param {Array=} opt_blobParts + * @param {BlobPropertyBag=} opt_options + * @constructor + * @nosideeffects + */ +function Blob(opt_blobParts, opt_options) {} + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-size + * @type {number} + */ +Blob.prototype.size; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-type + * @type {string} + */ +Blob.prototype.type; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-slice + * @param {number=} start + * @param {number=} length + * @param {string=} opt_contentType + * @return {!Blob} + * @nosideeffects + */ +Blob.prototype.slice = function(start, length, opt_contentType) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#arraybuffer-method-algo + * @return {!Promise} + * @nosideeffects + */ +Blob.prototype.arrayBuffer = function() {}; + +/** + * @see https://www.w3.org/TR/FileAPI/#dom-blob-text + * @return {!Promise} + * @nosideeffects + */ +Blob.prototype.text = function() {}; + + +/** + * @record + * @extends {BlobPropertyBag} + **/ +function FilePropertyBag() {}; + +/** @type {(number|undefined)} */ +FilePropertyBag.prototype.lastModified; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-file + * @param {!Array=} contents + * @param {string=} name + * @param {FilePropertyBag=} properties + * @constructor + * @extends {Blob} + */ +function File(contents, name, properties) {} + +/** + * Chrome uses this instead of name. + * @deprecated Use name instead. + * @type {string} + */ +File.prototype.fileName; + +/** + * Chrome uses this instead of size. + * @deprecated Use size instead. + * @type {string} + */ +File.prototype.fileSize; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-name + * @type {string} + */ +File.prototype.name; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate + * @type {Date} + */ +File.prototype.lastModifiedDate; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-lastModified + * @type {number} + */ +File.prototype.lastModified; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-filereader + * @constructor + * @implements {EventTarget} + */ +function FileReader() {} + +/** @override */ +FileReader.prototype.addEventListener = function(type, listener, opt_options) { +}; + +/** @override */ +FileReader.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +FileReader.prototype.dispatchEvent = function(evt) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBuffer + * @param {!Blob} blob + * @return {undefined} + */ +FileReader.prototype.readAsArrayBuffer = function(blob) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringAsync + * @param {!Blob} blob + * @return {undefined} + */ +FileReader.prototype.readAsBinaryString = function(blob) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsText + * @param {!Blob} blob + * @param {string=} encoding + * @return {undefined} + */ +FileReader.prototype.readAsText = function(blob, encoding) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURL + * @param {!Blob} blob + * @return {undefined} + */ +FileReader.prototype.readAsDataURL = function(blob) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-abort + * @return {undefined} + */ +FileReader.prototype.abort = function() {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-empty + * @const {number} + */ +FileReader.prototype.EMPTY; + +/** @const {number} */ +FileReader.EMPTY; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-loading + * @const {number} + */ +FileReader.prototype.LOADING; + +/** @const {number} */ +FileReader.LOADING; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-done + * @const {number} + */ +FileReader.prototype.DONE; + +/** @const {number} */ +FileReader.DONE; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readystate + * @type {number} + */ +FileReader.prototype.readyState; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-result + * @type {string|Blob|ArrayBuffer} + */ +FileReader.prototype.result; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-error + * @type {DOMError} + */ +FileReader.prototype.error; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-onloadstart + * @type {?function(!ProgressEvent)} + */ +FileReader.prototype.onloadstart; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-onprogress + * @type {?function(!ProgressEvent)} + */ +FileReader.prototype.onprogress; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-onload + * @type {?function(!ProgressEvent)} + */ +FileReader.prototype.onload; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-onabort + * @type {?function(!ProgressEvent)} + */ +FileReader.prototype.onabort; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-onerror + * @type {?function(!ProgressEvent)} + */ +FileReader.prototype.onerror; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-onloadend + * @type {?function(!ProgressEvent)} + */ +FileReader.prototype.onloadend; + + +/** + * @see http://www.w3.org/TR/FileAPI/#FileReaderSyncSync + * @constructor + */ +function FileReaderSync() {} + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBufferSync + * @param {!Blob} blob + * @return {!ArrayBuffer} + */ +FileReaderSync.prototype.readAsArrayBuffer = function(blob) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringSync + * @param {!Blob} blob + * @return {string} + */ +FileReaderSync.prototype.readAsBinaryString = function(blob) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsTextSync + * @param {!Blob} blob + * @param {string=} encoding + * @return {string} + */ +FileReaderSync.prototype.readAsText = function(blob, encoding) {}; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURLSync + * @param {!Blob} blob + * @return {string} + */ +FileReaderSync.prototype.readAsDataURL = function(blob) {}; diff --git a/javascript/externs/web/w3c_geometry1.js b/javascript/externs/web/w3c_geometry1.js new file mode 100644 index 000000000000..7a40715ad0dd --- /dev/null +++ b/javascript/externs/web/w3c_geometry1.js @@ -0,0 +1,899 @@ +/* + * Copyright 2018 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Geometry Interfaces Module Level 1 spec. + * The whole file has been fully type annotated. Created from + * https://www.w3.org/TR/geometry-1/ + * + * @externs + */ + +/** + * @deprecated ClientRect has been replaced by DOMRect in the latest spec. + * @constructor + * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04 + */ +function ClientRect() {} + +/** + * @type {number} + * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top + */ +ClientRect.prototype.top; + +/** + * @type {number} + * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right + */ +ClientRect.prototype.right; + +/** + * @type {number} + * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom + */ +ClientRect.prototype.bottom; + +/** + * @type {number} + * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left + */ +ClientRect.prototype.left; + +/** + * @type {number} + * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width + */ +ClientRect.prototype.width; + +/** + * @type {number} + * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height + */ +ClientRect.prototype.height; + +/** + * @constructor + * @extends {ClientRect} for backwards compatibility + * @param {number=} x + * @param {number=} y + * @param {number=} width + * @param {number=} height + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly + */ +function DOMRectReadOnly(x, y, width, height) {} + +/** + * @param {!DOMRectInit} other + * @return {!DOMRectReadOnly} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect + */ +DOMRectReadOnly.prototype.fromRect = function(other) {}; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x + */ +DOMRectReadOnly.prototype.x; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y + */ +DOMRectReadOnly.prototype.y; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width + */ +DOMRectReadOnly.prototype.width; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height + */ +DOMRectReadOnly.prototype.height; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top + */ +DOMRectReadOnly.prototype.top; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right + */ +DOMRectReadOnly.prototype.right; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom + */ +DOMRectReadOnly.prototype.bottom; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left + */ +DOMRectReadOnly.prototype.left; + +/** + * @constructor + * @extends {DOMRectReadOnly} + * @param {number=} x + * @param {number=} y + * @param {number=} width + * @param {number=} height + * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect + */ +function DOMRect(x, y, width, height) {} + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x + */ +DOMRect.prototype.x; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y + */ +DOMRect.prototype.y; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width + */ +DOMRect.prototype.width; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height + */ +DOMRect.prototype.height; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top + */ +DOMRect.prototype.top; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right + */ +DOMRect.prototype.right; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom + */ +DOMRect.prototype.bottom; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left + */ +DOMRect.prototype.left; + +/** + * @constructor + * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit + */ +function DOMRectInit() {} + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x + */ +DOMRectInit.prototype.x; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y + */ +DOMRectInit.prototype.y; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width + */ +DOMRectInit.prototype.width; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height + */ +DOMRectInit.prototype.height; + +/** + * @constructor + * @param {number=} x + * @param {number=} y + * @param {number=} z + * @param {number=} w + * @see https://www.w3.org/TR/geometry-1/#dom-dompointreadonly-dompointreadonly + */ +function DOMPointReadOnly(x, y, z, w) {} + +/** + * @param {!DOMPointInit} other + * @return {!DOMPointReadOnly} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointreadonly-frompoint + */ +DOMPointReadOnly.prototype.fromPoint = function(other) {}; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointreadonly-x + */ +DOMPointReadOnly.prototype.x; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointreadonly-y + */ +DOMPointReadOnly.prototype.y; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointreadonly-z + */ +DOMPointReadOnly.prototype.z; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointreadonly-w + */ +DOMPointReadOnly.prototype.w; + +/** + * @constructor + * @extends {DOMPointReadOnly} + * @param {number=} x + * @param {number=} y + * @param {number=} z + * @param {number=} w + * @see https://www.w3.org/TR/geometry-1/#dom-dompoint-dompoint + */ +function DOMPoint(x, y, z, w) {} + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompoint-x + */ +DOMPoint.prototype.x; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompoint-y + */ +DOMPoint.prototype.y; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompoint-z + */ +DOMPoint.prototype.z; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompoint-w + */ +DOMPoint.prototype.w; + +/** + * @record + * @see https://www.w3.org/TR/geometry-1/#dictdef-dompointinit + */ +function DOMPointInit() {} + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointinit-x + */ +DOMPointInit.prototype.x; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointinit-y + */ +DOMPointInit.prototype.y; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointinit-z + */ +DOMPointInit.prototype.z; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dompointinit-w + */ +DOMPointInit.prototype.w; + +/** + * @constructor + * @implements {DOMMatrixInit} + * @param {string|Array} init + * @see https://www.w3.org/TR/geometry-1/#dommatrixreadonly + */ +function DOMMatrixReadOnly(init) {} + +/** + * @param {!DOMMatrixInit} other + * @return {!DOMMatrixReadOnly} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-frommatrix + */ +DOMMatrixReadOnly.fromMatrix = function(other) {}; + +/** + * @param {!Float32Array} array32 + * @return {!DOMMatrixReadOnly} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-fromfloat32array + */ +DOMMatrixReadOnly.fromFloat32Array = function(array32) {}; + +/** + * @param {!Float64Array} array64 + * @return {!DOMMatrixReadOnly} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-fromfloat64array + */ +DOMMatrixReadOnly.fromFloat64Array = function(array64) {}; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-a + */ +DOMMatrixReadOnly.prototype.a; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-b + */ +DOMMatrixReadOnly.prototype.b; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-c + */ +DOMMatrixReadOnly.prototype.c; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-d + */ +DOMMatrixReadOnly.prototype.d; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-e + */ +DOMMatrixReadOnly.prototype.e; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-f + */ +DOMMatrixReadOnly.prototype.f; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m11 + */ +DOMMatrixReadOnly.prototype.m11; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m12 + */ +DOMMatrixReadOnly.prototype.m12; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m13 + */ +DOMMatrixReadOnly.prototype.m13; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m14 + */ +DOMMatrixReadOnly.prototype.m14; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m21 + */ +DOMMatrixReadOnly.prototype.m21; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m22 + */ +DOMMatrixReadOnly.prototype.m22; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m23 + */ +DOMMatrixReadOnly.prototype.m23; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m24 + */ +DOMMatrixReadOnly.prototype.m24; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m31 + */ +DOMMatrixReadOnly.prototype.m31; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m32 + */ +DOMMatrixReadOnly.prototype.m32; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m33 + */ +DOMMatrixReadOnly.prototype.m33; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m34 + */ +DOMMatrixReadOnly.prototype.m34; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m41 + */ +DOMMatrixReadOnly.prototype.m41; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m42 + */ +DOMMatrixReadOnly.prototype.m42; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m43 + */ +DOMMatrixReadOnly.prototype.m43; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-m44 + */ +DOMMatrixReadOnly.prototype.m44; + +/** + * @type {boolean} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-is2d + */ +DOMMatrixReadOnly.prototype.is2D; + +/** + * @type {boolean} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-isidentity + */ +DOMMatrixReadOnly.prototype.isIdentity; + +/** + * @param {number=} tx + * @param {number=} ty + * @param {number=} tz + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-translate + */ +DOMMatrixReadOnly.prototype.translate = function(tx, ty, tz) {}; + +/** + * @param {number=} scaleX + * @param {number=} scaleY + * @param {number=} scaleZ + * @param {number=} originX + * @param {number=} originY + * @param {number=} originZ + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-scale + */ +DOMMatrixReadOnly.prototype.scale = function( + scaleX, scaleY, scaleZ, originX, originY, originZ) {}; + +/** + * @param {number=} scaleX + * @param {number=} scaleY + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-scalenonuniform + */ +DOMMatrixReadOnly.prototype.scaleNonUniform = function(scaleX, scaleY) {}; + +/** + * @param {number=} scale + * @param {number=} originX + * @param {number=} originY + * @param {number=} originZ + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-scale3d + */ +DOMMatrixReadOnly.prototype.scale3d = function( + scale, originX, originY, originZ) {}; + +/** + * @param {number=} rotX + * @param {number=} rotY + * @param {number=} rotZ + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-rotate + */ +DOMMatrixReadOnly.prototype.rotate = function(rotX, rotY, rotZ) {}; + +/** + * @param {number=} x + * @param {number=} y + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-rotatefromvector + */ +DOMMatrixReadOnly.prototype.rotateFromVector = function(x, y) {}; + +/** + * @param {number=} x + * @param {number=} y + * @param {number=} z + * @param {number=} angle + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-rotateaxisangle + */ +DOMMatrixReadOnly.prototype.rotateAxisAngle = function(x, y, z, angle) {}; + +/** + * @param {number=} sx + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-skewx + */ +DOMMatrixReadOnly.prototype.skewX = function(sx) {}; + +/** + * @param {number=} sy + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-skewy + */ +DOMMatrixReadOnly.prototype.skewY = function(sy) {}; + +/** + * @param {!DOMMatrixInit} other + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-multiply + */ +DOMMatrixReadOnly.prototype.multiply = function(other) {}; + +/** + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-flipx + */ +DOMMatrixReadOnly.prototype.flipX = function() {}; + +/** + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-flipy + */ +DOMMatrixReadOnly.prototype.flipY = function() {}; + +/** + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-inverse + */ +DOMMatrixReadOnly.prototype.inverse = function() {}; + +/** + * @param {!DOMPointInit} point + * @return {!DOMPoint} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-transformpoint + */ +DOMMatrixReadOnly.prototype.transformPoint = function(point) {}; + +/** + * @return {!Float32Array} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-tofloat32array + */ +DOMMatrixReadOnly.prototype.toFloat32Array = function() {}; + +/** + * @return {!Float64Array} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixreadonly-tofloat64array + */ +DOMMatrixReadOnly.prototype.toFloat64Array = function() {}; + +/** + * @constructor + * @extends {DOMMatrixReadOnly} + * @param {string|Array} init + * @see https://www.w3.org/TR/geometry-1/#dommatrix + */ +function DOMMatrix(init) {} + +/** + * @param {!DOMMatrixInit} other + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-frommatrix + */ +DOMMatrix.fromMatrix = function(other) {}; + +/** + * @param {!Float32Array} array32 + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-fromfloat32array + */ +DOMMatrix.fromFloat32Array = function(array32) {}; + +/** + * @param {!Float64Array} array64 + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-fromfloat64array + */ +DOMMatrix.fromFloat64Array = function(array64) {}; + +/** + * @param {!DOMMatrixInit} other + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-multiply + */ +DOMMatrix.prototype.multiplySelf = function(other) {}; + +/** + * @param {!DOMMatrixInit} other + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-premultiply + */ +DOMMatrix.prototype.preMultiplySelf = function(other) {}; + +/** + * @param {number=} tx + * @param {number=} ty + * @param {number=} tz + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-translate + */ +DOMMatrix.prototype.translateSelf = function(tx, ty, tz) {}; + +/** + * @param {number=} scaleX + * @param {number=} scaleY + * @param {number=} scaleZ + * @param {number=} originX + * @param {number=} originY + * @param {number=} originZ + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-scale + */ +DOMMatrix.prototype.scaleSelf = function( + scaleX, scaleY, scaleZ, originX, originY, originZ) {}; + +/** + * @param {number=} scale + * @param {number=} originX + * @param {number=} originY + * @param {number=} originZ + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-scale3d + */ +DOMMatrix.prototype.scale3dSelf = function(scale, originX, originY, originZ) {}; + +/** + * @param {number=} rotX + * @param {number=} rotY + * @param {number=} rotZ + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-rotate + */ +DOMMatrix.prototype.rotateSelf = function(rotX, rotY, rotZ) {}; + +/** + * @param {number=} x + * @param {number=} y + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-rotatefromvector + */ +DOMMatrix.prototype.rotateFromVectorSelf = function(x, y) {}; + +/** + * @param {number=} x + * @param {number=} y + * @param {number=} z + * @param {number=} angle + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-rotateaxisangle + */ +DOMMatrix.prototype.rotateAxisAngleSelf = function(x, y, z, angle) {}; + +/** + * @param {number=} sx + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-skewx + */ +DOMMatrix.prototype.skewXSelf = function(sx) {}; + +/** + * @param {number=} sy + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-skewy + */ +DOMMatrix.prototype.skewYSelf = function(sy) {}; + +/** + * @return {!DOMMatrix} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix-inverse + */ +DOMMatrix.prototype.inverseSelf = function() {}; + +/** + * @record + * @see https://www.w3.org/TR/geometry-1/#dictdef-dommatrix2dinit + */ +function DOMMatrix2DInit() {} + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-a + */ +DOMMatrix2DInit.prototype.a; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-b + */ +DOMMatrix2DInit.prototype.b; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-c + */ +DOMMatrix2DInit.prototype.c; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-d + */ +DOMMatrix2DInit.prototype.d; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-e + */ +DOMMatrix2DInit.prototype.e; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-f + */ +DOMMatrix2DInit.prototype.f; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-m11 + */ +DOMMatrix2DInit.prototype.m11; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-m12 + */ +DOMMatrix2DInit.prototype.m12; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-m21 + */ +DOMMatrix2DInit.prototype.m21; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-m22 + */ +DOMMatrix2DInit.prototype.m22; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-m41 + */ +DOMMatrix2DInit.prototype.m41; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrix2dinit-m42 + */ +DOMMatrix2DInit.prototype.m42; + +/** + * @record + * @extends {DOMMatrix2DInit} + * @see https://www.w3.org/TR/geometry-1/#dictdef-dommatrix + */ +function DOMMatrixInit() {} + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m13 + */ +DOMMatrixInit.prototype.m13; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m14 + */ +DOMMatrixInit.prototype.m14; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m23 + */ +DOMMatrixInit.prototype.m23; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m24 + */ +DOMMatrixInit.prototype.m24; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m31 + */ +DOMMatrixInit.prototype.m31; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m32 + */ +DOMMatrixInit.prototype.m32; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m33 + */ +DOMMatrixInit.prototype.m33; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m34 + */ +DOMMatrixInit.prototype.m34; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m43 + */ +DOMMatrixInit.prototype.m43; + +/** + * @type {number} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-m44 + */ +DOMMatrixInit.prototype.m44; + +/** + * @type {boolean} + * @see https://www.w3.org/TR/geometry-1/#dom-dommatrixinit-is2d + */ +DOMMatrixInit.prototype.is2D; diff --git a/javascript/externs/web/w3c_keyboardlock.js b/javascript/externs/web/w3c_keyboardlock.js new file mode 100644 index 000000000000..b532b32ae420 --- /dev/null +++ b/javascript/externs/web/w3c_keyboardlock.js @@ -0,0 +1,47 @@ +/* + * Copyright 2020 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for the W3C Keyboard Lock API. + * @see https://wicg.github.io/keyboard-lock/ + * @externs + */ + +/** + * Keyboard API object. + * @constructor + * @see https://w3c.github.io/keyboard-lock/#keyboard-interface + */ +function Keyboard() {} + +/** + * Lock the specified keys for this page, or all keys if keyCodes is omitted. + * @param {?Array=} keyCodes + * @return {!Promise} + */ +Keyboard.prototype.lock = function(keyCodes) {}; + +/** + * Unlock any locked keys. + */ +Keyboard.prototype.unlock = function() {}; + + +/** + * @type {!Keyboard} + * @see https://w3c.github.io/keyboard-lock/#API + */ +Navigator.prototype.keyboard; diff --git a/javascript/externs/web/w3c_mediacapabilities.js b/javascript/externs/web/w3c_mediacapabilities.js new file mode 100644 index 000000000000..85b9691e6de5 --- /dev/null +++ b/javascript/externs/web/w3c_mediacapabilities.js @@ -0,0 +1,206 @@ +/* + * Copyright 2019 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @fileoverview MediaCapabilities externs. + * Based on {@link https://w3c.github.io/media-capabilities/ MC draft 6 November + * 2019}. + * @externs + */ + +/** + * @typedef {string} + * @see https://w3c.github.io/media-capabilities/#enumdef-hdrmetadatatype + */ +var HdrMetadataType; + +/** + * @typedef {string} + * @see https://w3c.github.io/media-capabilities/#enumdef-colorgamut + */ +var ColorGamut; + +/** + * @typedef {string} + * @see https://w3c.github.io/media-capabilities/#enumdef-transferfunction + */ +var TransferFunction; + +/** + * @typedef {string} + * @see https://w3c.github.io/media-capabilities/#enumdef-mediadecodingtype + */ +var MediaDecodingType; + +/** + * @typedef {string} + * @see https://w3c.github.io/media-capabilities/#enumdef-mediaencodingtype + */ +var MediaEncodingType; + +/** + * @typedef {{ + * contentType: string, + * width: number, + * height: number, + * bitrate: number, + * framerate: number, + * hasAlphaChannel: (boolean|undefined), + * hdrMetadataType: (!HdrMetadataType|undefined), + * colorGamut: (!ColorGamut|undefined), + * transferFunction: (!TransferFunction|undefined) + * }} + * @see https://w3c.github.io/media-capabilities/#dictdef-videoconfiguration + */ +var VideoConfiguration; + +// NOTE: channels definition below is not yet stable in the spec as of Dec 2019. +// "The channels needs to be defined as a double (2.1, 4.1, 5.1, ...), an +// unsigned short (number of channels) or as an enum value. The current +// definition is a placeholder." +/** + * @typedef {{ + * contentType: string, + * channels: (*|undefined), + * bitrate: (number|undefined), + * samplerate: (number|undefined), + * spatialRendering: (boolean|undefined) + * }} + * @see https://w3c.github.io/media-capabilities/#dictdef-audioconfiguration + */ +var AudioConfiguration; + +// NOTE: encryptionScheme is not yet in the MC spec as of Dec 2019, but has +// already landed in EME and should be in MC soon. +// https://github.com/w3c/media-capabilities/issues/100 +/** + * @typedef {{ + * robustness: (string|undefined), + * encryptionScheme: (string|undefined) + * }} + * @see https://w3c.github.io/media-capabilities/#dictdef-keysystemtrackconfiguration + */ +var KeySystemTrackConfiguration; + +/** + * @typedef {{ + * keySystem: string, + * initDataType: (string|undefined), + * distinctiveIdentifier: (string|undefined), + * persistentState: (string|undefined), + * sessionTypes: (!Array|undefined), + * audio: (!KeySystemTrackConfiguration|undefined), + * video: (!KeySystemTrackConfiguration|undefined) + * }} + * @see https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitieskeysystemconfiguration + */ +var MediaCapabilitiesKeySystemConfiguration; + +/** + * @record + * @see https://w3c.github.io/media-capabilities/#dictdef-mediaconfiguration + */ +function MediaConfiguration() {} + +/** @type {!VideoConfiguration|undefined} */ +MediaConfiguration.prototype.video; + +/** @type {!AudioConfiguration|undefined} */ +MediaConfiguration.prototype.audio; + +/** + * @record + * @extends {MediaConfiguration} + * @see https://w3c.github.io/media-capabilities/#dictdef-mediadecodingconfiguration + */ +function MediaDecodingConfiguration() {} + +/** @type {!MediaDecodingType} */ +MediaDecodingConfiguration.prototype.type; + +/** @type {!MediaCapabilitiesKeySystemConfiguration|undefined} */ +MediaDecodingConfiguration.prototype.keySystemConfiguration; + +/** + * @record + * @extends {MediaConfiguration} + * @see https://w3c.github.io/media-capabilities/#dictdef-mediaencodingconfiguration + */ +function MediaEncodingConfiguration() {} + +/** @type {!MediaEncodingType} */ +MediaEncodingConfiguration.prototype.type; + +/** + * @record + * @see https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesinfo + */ +function MediaCapabilitiesInfo() {} + +/** @type {boolean} */ +MediaCapabilitiesInfo.prototype.supported; + +/** @type {boolean} */ +MediaCapabilitiesInfo.prototype.smooth; + +/** @type {boolean} */ +MediaCapabilitiesInfo.prototype.powerEfficient; + +/** + * @record + * @extends {MediaCapabilitiesInfo} + * @see https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesdecodinginfo + */ +function MediaCapabilitiesDecodingInfo() {} + +/** @type {?MediaKeySystemAccess} */ +MediaCapabilitiesDecodingInfo.prototype.keySystemAccess; + +/** @type {!MediaDecodingConfiguration} */ +MediaCapabilitiesDecodingInfo.prototype.configuration; + +/** + * @record + * @extends {MediaCapabilitiesInfo} + * @see https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesencodinginfo + */ +function MediaCapabilitiesEncodingInfo() {} + +/** @type {!MediaEncodingConfiguration} */ +MediaCapabilitiesEncodingInfo.prototype.configuration; + +/** + * @interface + * @see https://w3c.github.io/media-capabilities/#mediacapabilities + */ +function MediaCapabilities() {} + +/** + * @param {!MediaDecodingConfiguration} configuration + * @return {!Promise} + */ +MediaCapabilities.prototype.decodingInfo = function(configuration) {}; + +/** + * @param {!MediaEncodingConfiguration} configuration + * @return {!Promise} + */ +MediaCapabilities.prototype.encodingInfo = function(configuration) {}; + +/** @const {?MediaCapabilities} */ +Navigator.prototype.mediaCapabilities; + +/** @const {?MediaCapabilities} */ +WorkerNavigator.prototype.mediaCapabilities; diff --git a/javascript/externs/web/w3c_netinfo.js b/javascript/externs/web/w3c_netinfo.js new file mode 100644 index 000000000000..8c3e6548cf0e --- /dev/null +++ b/javascript/externs/web/w3c_netinfo.js @@ -0,0 +1,85 @@ +/* + * Copyright 2017 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Externs for the Network Information API. + * @externs + */ + +/** + * @see http://wicg.github.io/netinfo/#-dfn-networkinformation-dfn-interface + * @constructor + */ +function NetworkInformation() {} + +/** @type {ConnectionType} */ +NetworkInformation.prototype.type; + +/** @type {EffectiveConnectionType} */ +NetworkInformation.prototype.effectiveType; + +/** @type {Megabit} */ +NetworkInformation.prototype.downlinkMax; + +/** @type {Megabit} */ +NetworkInformation.prototype.downlink; + +/** @type {Millisecond} */ +NetworkInformation.prototype.rtt; + +/** @type {?function(Event)} */ +NetworkInformation.prototype.onchange; + +/** @type {boolean} */ +NetworkInformation.prototype.saveData; + +/** + * @typedef {number} + */ +var Megabit; + +/** + * @typedef {number} + */ +var Millisecond; + +/** + * Enum of: + * 'bluetooth', + * 'cellular', + * 'ethernet', + * 'mixed', + * 'none', + * 'other', + * 'unknown', + * 'wifi', + * 'wimax' + * @typedef {string} + */ +var ConnectionType; + +/** + * Enum of: + * '2g', + * '3g', + * '4g', + * 'slow-2g' + * @typedef {string} + */ +var EffectiveConnectionType; + +/** @type {!NetworkInformation} */ +Navigator.prototype.connection; diff --git a/javascript/externs/web/w3c_payment_request.js b/javascript/externs/web/w3c_payment_request.js new file mode 100644 index 000000000000..8d0aaf700b3f --- /dev/null +++ b/javascript/externs/web/w3c_payment_request.js @@ -0,0 +1,401 @@ +/* + * Copyright 2019 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Payment Request API. + * @see https://w3c.github.io/payment-request/ + * + * @externs + */ + +/** + * @constructor + * @param {!Array} methodData + * @param {!PaymentDetailsInit} details + * @param {!PaymentOptions=} options + * @implements {EventTarget} + * @see https://w3c.github.io/payment-request/#paymentrequest-interface + */ +function PaymentRequest(methodData, details, options) {} +/** + * @param {!Promise=} detailsPromise + * @return {!Promise} + */ +PaymentRequest.prototype.show = function(detailsPromise) {}; +/** @return {!Promise} */ +PaymentRequest.prototype.abort = function() {}; +/** @return {!Promise} */ +PaymentRequest.prototype.canMakePayment = function() {}; +/** @return {!Promise} */ +PaymentRequest.prototype.hasEnrolledInstrument = function() {}; +/** @const {string} */ +PaymentRequest.prototype.id; +/** @const {?PaymentAddress} */ +PaymentRequest.prototype.shippingAddress; +/** @const {?string} */ +PaymentRequest.prototype.shippingOption; +/** @const {?string} */ +PaymentRequest.prototype.shippingType; +/** @type {?function(!Event)} */ +PaymentRequest.prototype.onmerchantvalidation; +/** @type {?function(!Event)} */ +PaymentRequest.prototype.onshippingaddresschange; +/** @type {?function(!Event)} */ +PaymentRequest.prototype.onshippingoptionchange; +/** @type {?function(!Event)} */ +PaymentRequest.prototype.onpaymentmethodchange; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentmethoddata-dictionary + */ +function PaymentMethodData() {}; +/** @type {string} */ +PaymentMethodData.prototype.supportedMethods; +/** @type {!Object|undefined} */ +PaymentMethodData.prototype.data; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentcurrencyamount-dictionary + */ +function PaymentCurrencyAmount() {}; +/** @type {string} */ +PaymentCurrencyAmount.prototype.currency; +/** @type {string} */ +PaymentCurrencyAmount.prototype.value; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentdetailsbase-dictionary + */ +function PaymentDetailsBase() {}; +/** @type {!Array|undefined} */ +PaymentDetailsBase.prototype.displayItems; +/** @type {!Array|undefined} */ +PaymentDetailsBase.prototype.shippingOptions; +/** @type {!Array|undefined} */ +PaymentDetailsBase.prototype.modifiers; + +/** + * @extends {PaymentDetailsBase} + * @record + * @see https://w3c.github.io/payment-request/#paymentdetailsinit-dictionary + */ +function PaymentDetailsInit() {}; +/** @type {string|undefined} */ +PaymentDetailsInit.prototype.id; +/** @type {!PaymentItem} */ +PaymentDetailsInit.prototype.total; + +/** + * @extends {PaymentDetailsBase} + * @record + * @see https://w3c.github.io/payment-request/#paymentdetailsupdate-dictionary + */ +function PaymentDetailsUpdate() {}; +/** @type {string|undefined} */ +PaymentDetailsUpdate.prototype.error; +/** @type {!PaymentItem|undefined} */ +PaymentDetailsUpdate.prototype.total; +/** @type {!AddressErrors|undefined} */ +PaymentDetailsUpdate.prototype.shippingAddressErrors; +/** @type {!PayerErrors|undefined} */ +PaymentDetailsUpdate.prototype.payerErrors; +/** @type {!Object|undefined} */ +PaymentDetailsUpdate.prototype.paymentMethodErrors; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentdetailsmodifier-dictionary + */ +function PaymentDetailsModifier() {}; +/** @type {string} */ +PaymentDetailsModifier.prototype.supportedMethods; +/** @type {!PaymentItem|undefined} */ +PaymentDetailsModifier.prototype.total; +/** @type {!Array|undefined} */ +PaymentDetailsModifier.prototype.additionalDisplayItems; +/** @type {!Object|undefined} */ +PaymentDetailsModifier.prototype.data; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentoptions-dictionary + */ +function PaymentOptions() {}; +/** @type {boolean|undefined} */ +PaymentOptions.prototype.requestPayerName; +/** @type {boolean|undefined} */ +PaymentOptions.prototype.requestBillingAddress; +/** @type {boolean|undefined} */ +PaymentOptions.prototype.requestPayerEmail; +/** @type {boolean|undefined} */ +PaymentOptions.prototype.requestPayerPhone; +/** @type {boolean|undefined} */ +PaymentOptions.prototype.requestShipping; +/** @type {string|undefined} */ +PaymentOptions.prototype.shippingType; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentitem-dictionary + */ +function PaymentItem() {}; +/** @type {string} */ +PaymentItem.prototype.label; +/** @type {!PaymentCurrencyAmount} */ +PaymentItem.prototype.amount; +/** @type {boolean|undefined} */ +PaymentItem.prototype.pending; + +/** + * @interface + * @see https://w3c.github.io/payment-request/#paymentaddress-interface + */ +function PaymentAddress() {} +/** + * @return {Object} + * @override + */ +PaymentAddress.prototype.toJSON = function() {}; +/** @const {string|undefined} */ +PaymentAddress.prototype.city; +/** @const {string|undefined} */ +PaymentAddress.prototype.country; +/** @const {string|undefined} */ +PaymentAddress.prototype.dependentLocality; +/** @const {string|undefined} */ +PaymentAddress.prototype.organization; +/** @const {string|undefined} */ +PaymentAddress.prototype.phone; +/** @const {string|undefined} */ +PaymentAddress.prototype.postalCode; +/** @const {string|undefined} */ +PaymentAddress.prototype.recipient; +/** @const {string|undefined} */ +PaymentAddress.prototype.region; +/** @const {string|undefined} */ +PaymentAddress.prototype.sortingCode; +/** @const {!Array|undefined} */ +PaymentAddress.prototype.addressLine; + +/** + * @record + * @see https://w3c.github.io/payment-request/#addressinit-dictionary + */ +function AddressInit() {}; +/** @type {string|undefined} */ +AddressInit.prototype.country; +/** @type {!Array|undefined} */ +AddressInit.prototype.addressLine; +/** @type {string|undefined} */ +AddressInit.prototype.region; +/** @type {string|undefined} */ +AddressInit.prototype.city; +/** @type {string|undefined} */ +AddressInit.prototype.dependentLocality; +/** @type {string|undefined} */ +AddressInit.prototype.postalCode; +/** @type {string|undefined} */ +AddressInit.prototype.sortingCode; +/** @type {string|undefined} */ +AddressInit.prototype.organization; +/** @type {string|undefined} */ +AddressInit.prototype.recipient; +/** @type {string|undefined} */ +AddressInit.prototype.phone; + +/** + * @record + * @see https://w3c.github.io/payment-request/#addresserrors-dictionary + */ +function AddressErrors() {}; +/** @type {string|undefined} */ +AddressErrors.prototype.addressLine; +/** @type {string|undefined} */ +AddressErrors.prototype.city; +/** @type {string|undefined} */ +AddressErrors.prototype.country; +/** @type {string|undefined} */ +AddressErrors.prototype.dependentLocality; +/** @type {string|undefined} */ +AddressErrors.prototype.organization; +/** @type {string|undefined} */ +AddressErrors.prototype.phone; +/** @type {string|undefined} */ +AddressErrors.prototype.postalCode; +/** @type {string|undefined} */ +AddressErrors.prototype.recipient; +/** @type {string|undefined} */ +AddressErrors.prototype.region; +/** @type {string|undefined} */ +AddressErrors.prototype.sortingCode; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentshippingoption-dictionary + */ +function PaymentShippingOption() {}; +/** @type {string} */ +PaymentShippingOption.prototype.id; +/** @type {string} */ +PaymentShippingOption.prototype.label; +/** @type {!PaymentCurrencyAmount} */ +PaymentShippingOption.prototype.amount; +/** @type {boolean|undefined} */ +PaymentShippingOption.prototype.selected; + +/** + * @constructor + * @implements {EventTarget} + * @see https://w3c.github.io/payment-request/#paymentresponse-interface + */ +function PaymentResponse() {} +/** + * @return {!Object} + * @override + */ +PaymentResponse.prototype.toJSON = function() {}; +/** @const {string} */ +PaymentResponse.prototype.requestId; +/** @const {string} */ +PaymentResponse.prototype.methodName; +/** @const {!Object} */ +PaymentResponse.prototype.details; +/** @const {?PaymentAddress} */ +PaymentResponse.prototype.shippingAddress; +/** @const {?string} */ +PaymentResponse.prototype.shippingOption; +/** @const {?string} */ +PaymentResponse.prototype.payerName; +/** @const {?string} */ +PaymentResponse.prototype.payerEmail; +/** @const {?string} */ +PaymentResponse.prototype.payerPhone; +/** + * @param {string=} result + * @return {!Promise} + */ +PaymentResponse.prototype.complete = function(result) {}; +/** + * @param {!PaymentValidationErrors=} errorFields + * @return {!Promise} + */ +PaymentResponse.prototype.retry = function(errorFields) {}; +/** @type {?function(!Event)} */ +PaymentResponse.prototype.onpayerdetailchange; + +/** + * @record + * @see https://w3c.github.io/payment-request/#paymentvalidationerrors-dictionary + */ +function PaymentValidationErrors() {}; +/** @type {!PayerErrors|undefined} */ +PaymentValidationErrors.prototype.payer; +/** @type {!AddressErrors|undefined} */ +PaymentValidationErrors.prototype.shippingAddress; +/** @type {string|undefined} */ +PaymentValidationErrors.prototype.error; +/** @type {!Object|undefined} */ +PaymentValidationErrors.prototype.paymentMethod; + +/** + * @record + * @see https://w3c.github.io/payment-request/#payererrors-dictionary + */ +function PayerErrors() {}; +/** @type {string|undefined} */ +PayerErrors.prototype.email; +/** @type {string|undefined} */ +PayerErrors.prototype.name; +/** @type {string|undefined} */ +PayerErrors.prototype.phone; + +/** + * @constructor + * @param {string} type + * @param {!MerchantValidationEventInit=} eventInitDict + * @extends {Event} + * @see https://w3c.github.io/payment-request/#merchantvalidationevent-interface + */ +function MerchantValidationEvent(type, eventInitDict) {}; +/** @const {string} */ +MerchantValidationEvent.prototype.methodName; +/** @const {string} */ +MerchantValidationEvent.prototype.validationURL; +/** + * @param {!Promise} merchantSessionPromise + * @return {undefined} + */ +MerchantValidationEvent.prototype.complete = function( + merchantSessionPromise) {}; + +/** + * @extends {EventInit} + * @record + * @see https://w3c.github.io/payment-request/#merchantvalidationeventinit-dictionary + */ +function MerchantValidationEventInit() {}; +/** @type {string|undefined} */ +MerchantValidationEventInit.prototype.methodName; +/** @type {string|undefined} */ +MerchantValidationEventInit.prototype.validationURL; + +/** + * @constructor + * @param {string} type + * @param {!PaymentMethodChangeEventInit=} eventInitDict + * @extends {PaymentRequestUpdateEvent} + * @see https://w3c.github.io/payment-request/#paymentmethodchangeevent-interface + */ +function PaymentMethodChangeEvent(type, eventInitDict) {}; +/** @const {string} */ +PaymentMethodChangeEvent.prototype.methodName; +/** @const {?Object} */ +PaymentMethodChangeEvent.prototype.methodDetails; + +/** + * @extends {PaymentRequestUpdateEventInit} + * @record + * @see https://w3c.github.io/payment-request/#paymentmethodchangeeventinit-dictionary + */ +function PaymentMethodChangeEventInit() {}; +/** @type {string|undefined} */ +PaymentMethodChangeEventInit.prototype.methodName; +/** @type {?Object|undefined} */ +PaymentMethodChangeEventInit.prototype.methodDetails; + +/** + * @constructor + * @param {string} type + * @param {!PaymentRequestUpdateEventInit=} eventInitDict + * @extends {Event} + * @see https://w3c.github.io/payment-request/#paymentrequestupdateevent-interface + */ +function PaymentRequestUpdateEvent(type, eventInitDict) {}; +/** + * @param {!Promise} detailsPromise + * @return {undefined} + */ +PaymentRequestUpdateEvent.prototype.updateWith = function(detailsPromise) {}; + +/** + * @extends {EventInit} + * @record + * @see https://w3c.github.io/payment-request/#paymentrequestupdateeventinit-dictionary + */ +function PaymentRequestUpdateEventInit() {}; diff --git a/javascript/externs/web/w3c_pointerlock.js b/javascript/externs/web/w3c_pointerlock.js new file mode 100644 index 000000000000..e233acfebfb5 --- /dev/null +++ b/javascript/externs/web/w3c_pointerlock.js @@ -0,0 +1,63 @@ +/* + * Copyright 2015 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Pointer Lock API. + * @see https://w3c.github.io/pointerlock/ + * + * @externs + */ + +/** + * TODO(bradfordcsmith): update the link when PR is merged + * @see https://github.com/w3c/pointerlock/pull/49/ + * @record + */ +function PointerLockOptions() {} + +/** @type {undefined|boolean} */ +PointerLockOptions.prototype.unadjustedMovement; + +/** + * @see https://w3c.github.io/pointerlock/#widl-Element-requestPointerLock-void + * @param {!PointerLockOptions=} options + * @return {void|!Promise} + */ +Element.prototype.requestPointerLock = function(options) {}; + +/** + * @see https://w3c.github.io/pointerlock/#widl-Document-pointerLockElement + * @type {?Element} + */ +Document.prototype.pointerLockElement; + +/** + * @see https://w3c.github.io/pointerlock/#widl-Document-exitPointerLock-void + * @return {void} + */ +Document.prototype.exitPointerLock = function() {}; + +/** + * @see https://w3c.github.io/pointerlock/#widl-MouseEvent-movementX + * @type {number} + */ +MouseEvent.prototype.movementX; + +/** + * @see https://w3c.github.io/pointerlock/#widl-MouseEvent-movementY + * @type {number} + */ +MouseEvent.prototype.movementY; diff --git a/javascript/externs/web/w3c_referrer_policy.js b/javascript/externs/web/w3c_referrer_policy.js new file mode 100644 index 000000000000..3b2509ca69ef --- /dev/null +++ b/javascript/externs/web/w3c_referrer_policy.js @@ -0,0 +1,36 @@ +/* + * Copyright 2018 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's referrer policy specification. + * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-delivery + * @externs + */ + +/** @type {string} */ +HTMLAnchorElement.prototype.referrerPolicy; + +/** @type {string} */ +HTMLAreaElement.prototype.referrerPolicy; + +/** @type {string} */ +HTMLImageElement.prototype.referrerPolicy; + +/** @type {string} */ +HTMLIFrameElement.prototype.referrerPolicy; + +/** @type {string} */ +HTMLLinkElement.prototype.referrerPolicy; diff --git a/javascript/externs/web/w3c_screen_wake_lock.js b/javascript/externs/web/w3c_screen_wake_lock.js new file mode 100644 index 000000000000..20e9884230cd --- /dev/null +++ b/javascript/externs/web/w3c_screen_wake_lock.js @@ -0,0 +1,58 @@ +/* + * Copyright 2020 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Screen Wake Lock API + * W3C Editor's Draft 01 September 2020 + * @externs + * @see https://w3c.github.io/screen-wake-lock/ + */ + + +/** @type {!WakeLock} */ +Navigator.prototype.wakeLock; + + +/** + * @interface + * @see https://w3c.github.io/screen-wake-lock/#the-wakelock-interface + */ +function WakeLock() {}; + +/** + * @param {string} type + * @return {!Promise} + */ +WakeLock.prototype.request = function(type) {}; + + +/** + * @interface + * @extends {EventTarget} + * @see https://w3c.github.io/screen-wake-lock/#the-wakelocksentinel-interface + */ +function WakeLockSentinel() {}; + +/** @type {?function(!Event)} */ +WakeLockSentinel.prototype.onrelease; + +/** @return {!Promise} */ +WakeLockSentinel.prototype.release = function() {}; + +/** @type {boolean} @const */ +WakeLockSentinel.prototype.released; + +/** @type {string} @const */ +WakeLockSentinel.prototype.type; diff --git a/javascript/externs/web/w3c_selection.js b/javascript/externs/web/w3c_selection.js new file mode 100644 index 000000000000..36993c7127b6 --- /dev/null +++ b/javascript/externs/web/w3c_selection.js @@ -0,0 +1,209 @@ +/* + * Copyright 2008 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Selection API. + * + * @see https://w3c.github.io/selection-api/ + * + * @externs + */ + +/** + * @constructor + * @see http://w3c.github.io/selection-api/#selection-interface + */ +function Selection() {} + +/** + * @type {?Node} + * @see https://w3c.github.io/selection-api/#dom-selection-anchornode + */ +Selection.prototype.anchorNode; + +/** + * @type {number} + * @see https://w3c.github.io/selection-api/#dom-selection-anchoroffset + */ +Selection.prototype.anchorOffset; + +/** + * @type {?Node} + * @see https://w3c.github.io/selection-api/#dom-selection-focusnode + */ +Selection.prototype.focusNode; + +/** + * @type {number} + * @see https://w3c.github.io/selection-api/#dom-selection-focusoffset + */ +Selection.prototype.focusOffset; + +/** + * @type {boolean} + * @see https://w3c.github.io/selection-api/#dom-selection-iscollapsed + */ +Selection.prototype.isCollapsed; + +/** + * @type {number} + * @see https://w3c.github.io/selection-api/#dom-selection-rangecount + */ +Selection.prototype.rangeCount; + +/** + * @type {string} + * @see https://w3c.github.io/selection-api/#dom-selection-type + */ +Selection.prototype.type; + +/** + * @param {number} index + * @return {!Range} + * @nosideeffects + * @see https://w3c.github.io/selection-api/#dom-selection-getrangeat + */ +Selection.prototype.getRangeAt = function(index) {}; + +/** + * TODO(tjgq): Clean up internal usages and make the `range` parameter a + * `!Range` per the spec. + * @param {?Range} range + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-addrange + */ +Selection.prototype.addRange = function(range) {}; + +/** + * @param {!Range} range + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-removerange + */ +Selection.prototype.removeRange = function(range) {}; + +/** + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-removeallranges + */ +Selection.prototype.removeAllRanges = function() {}; + +/** + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-empty + */ +Selection.prototype.empty = function() {}; + +/** + * @param {?Node} node + * @param {number=} offset + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-collapse + */ +Selection.prototype.collapse = function(node, offset) {}; + +/** + * @param {?Node} node + * @param {number=} offset + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-setposition + */ +Selection.prototype.setPosition = function(node, offset) {}; + +/** + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-collapsetostart + */ +Selection.prototype.collapseToStart = function() {}; + +/** + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-collapsetoend + */ +Selection.prototype.collapseToEnd = function() {}; + +/** + * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node` + * per the spec. + * @param {?Node} node + * @param {number=} offset + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-extend + */ +Selection.prototype.extend = function(node, offset) {}; + +/** + * TODO(tjgq): Clean up internal usages and make the `anchorNode` and + * `focusNode` parameters `!Node` per the spec. + * @param {?Node} anchorNode + * @param {number} anchorOffset + * @param {?Node} focusNode + * @param {number} focusOffset + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-setbaseandextent + */ +Selection.prototype.setBaseAndExtent = function(anchorNode, anchorOffset, focusNode, focusOffset) {}; + +/** + * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node` + * per the spec. + * @param {?Node} node + * @return {undefined} + * @see http://w3c.github.io/selection-api/#dom-selection-selectallchildren + */ +Selection.prototype.selectAllChildren = function(node) {}; + +/** + * @return {undefined} + * @see https://w3c.github.io/selection-api/#dom-selection-deletefromdocument + */ +Selection.prototype.deleteFromDocument = function() {}; + +/** + * @param {!Node} node + * @param {boolean=} allowPartialContainment + * @return {boolean} + * @nosideeffects + * @see https://w3c.github.io/selection-api/#dom-selection-containsnode + */ +Selection.prototype.containsNode = function(node, allowPartialContainment) {}; + +/** + * @return {?Selection} + * @nosideeffects + * @see https://w3c.github.io/selection-api/#dom-window-getselection + */ +Window.prototype.getSelection = function() {}; + +/** + * @return {?Selection} + * @nosideeffects + * @see https://w3c.github.io/selection-api/#dom-document-getselection + */ +Document.prototype.getSelection = function() {}; + +/** + * TODO(tjgq): Clean up internal usages and make this `?function(!Event): void` + * per the spec. + * @type {?function(?Event)} + * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectstart + */ +Element.prototype.onselectstart; + +/** + * @type {?function(!Event): void} + * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectionchange + */ +Element.prototype.onselectionchange; diff --git a/javascript/externs/web/w3c_speech.js b/javascript/externs/web/w3c_speech.js new file mode 100644 index 000000000000..898eb98064f2 --- /dev/null +++ b/javascript/externs/web/w3c_speech.js @@ -0,0 +1,412 @@ +/* + * Copyright 2011 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Speech Input 2010 draft API and the + * 2012 Web Speech draft API (in progress). + * 2010 Speech Input API: + * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html + * 2012 Web Speech API: + * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html + * This file contains only those functions/properties that are actively + * used in the Voice Search experiment. Because the draft is under discussion + * and constantly evolving, this file does not attempt to stay in sync with it. + * + * @externs + */ + +// W3C Speech Input API implemented in Chrome M12 +/** + * @constructor + * @extends {UIEvent} + */ +function SpeechInputEvent() {} + +/** @type {SpeechInputResultList} */ +SpeechInputEvent.prototype.results; + + +/** + * @constructor + */ +function SpeechInputResultList() {} + +/** @type {number} */ +SpeechInputResultList.prototype.length; + + +/** + * @constructor + */ +function SpeechInputResult() {} + +/** @type {string} */ +SpeechInputResult.prototype.utterance; + +/** @type {number} */ +SpeechInputResult.prototype.confidence; + + +// HTMLInputElement +/** @type {boolean} */ +HTMLInputElement.prototype.webkitspeech; + +/** @type {?function (Event)} */ +HTMLInputElement.prototype.onwebkitspeechchange; + + + +// W3C Web Speech API implemented in Chrome M23 +/** + * @constructor + * @implements {EventTarget} + */ +function SpeechRecognition() {} + +/** @override */ +SpeechRecognition.prototype.addEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +SpeechRecognition.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +SpeechRecognition.prototype.dispatchEvent = function(evt) {}; + +/** @type {SpeechGrammarList} */ +SpeechRecognition.prototype.grammars; + +/** @type {string} */ +SpeechRecognition.prototype.lang; + +/** @type {boolean} */ +SpeechRecognition.prototype.continuous; + +/** @type {boolean} */ +SpeechRecognition.prototype.interimResults; + +/** @type {number} */ +SpeechRecognition.prototype.maxAlternatives; + +/** @type {string} */ +SpeechRecognition.prototype.serviceURI; + +/** @type {function()} */ +SpeechRecognition.prototype.start; + +/** @type {function()} */ +SpeechRecognition.prototype.stop; + +/** @type {function()} */ +SpeechRecognition.prototype.abort; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onaudiostart; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onsoundstart; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onspeechstart; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onspeechend; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onsoundend; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onaudioend; + +/** @type {?function(!SpeechRecognitionEvent)} */ +SpeechRecognition.prototype.onresult; + +/** @type {?function(!SpeechRecognitionEvent)} */ +SpeechRecognition.prototype.onnomatch; + +/** @type {?function(!SpeechRecognitionError)} */ +SpeechRecognition.prototype.onerror; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onstart; + +/** @type {?function(!Event)} */ +SpeechRecognition.prototype.onend; + + +/** + * @constructor + * @extends {Event} + */ +function SpeechRecognitionError() {} + +/** @type {string} */ +SpeechRecognitionError.prototype.error; + +/** @type {string} */ +SpeechRecognitionError.prototype.message; + + +/** + * @constructor + */ +function SpeechRecognitionAlternative() {} + +/** @type {string} */ +SpeechRecognitionAlternative.prototype.transcript; + +/** @type {number} */ +SpeechRecognitionAlternative.prototype.confidence; + + +/** + * @constructor + */ +function SpeechRecognitionResult() {} + +/** + * @type {number} + */ +SpeechRecognitionResult.prototype.length; + +/** + * @type {function(number): SpeechRecognitionAlternative} + */ +SpeechRecognitionResult.prototype.item = function(index) {}; + +/** + * @type {boolean} + */ +SpeechRecognitionResult.prototype.isFinal; + + +/** + * @constructor + */ +function SpeechRecognitionResultList() {} + +/** + * @type {number} + */ +SpeechRecognitionResultList.prototype.length; + +/** + * @type {function(number): SpeechRecognitionResult} + */ +SpeechRecognitionResultList.prototype.item = function(index) {}; + + +/** + * @constructor + * @extends {Event} + */ +function SpeechRecognitionEvent() {} + +/** @type {number} */ +SpeechRecognitionEvent.prototype.resultIndex; + +/** @type {SpeechRecognitionResultList} */ +SpeechRecognitionEvent.prototype.results; + +/** @type {*} */ +SpeechRecognitionEvent.prototype.interpretation; + +/** @type {Document} */ +SpeechRecognitionEvent.prototype.emma; + + +/** + * @constructor + */ +function SpeechGrammar() {} + +/** @type {string} */ +SpeechGrammar.prototype.src; + +/** @type {number} */ +SpeechGrammar.prototype.weight; + + +/** + * @constructor + */ +function SpeechGrammarList() {} + +/** + * @type {number} + */ +SpeechGrammarList.prototype.length; + +/** + * @type {function(number): SpeechGrammar} + */ +SpeechGrammarList.prototype.item = function(index) {}; + +/** + * @type {function(string, number)} + */ +SpeechGrammarList.prototype.addFromUri = function(src, weight) {}; + +/** + * @type {function(string, number)} + */ +SpeechGrammarList.prototype.addFromString = function(str, weight) {}; + + +// Webkit implementations of Web Speech API +/** + * @constructor + * @extends {SpeechGrammarList} + */ +function webkitSpeechGrammarList() {} + + +/** + * @constructor + * @extends {SpeechGrammar} + */ +function webkitSpeechGrammar() {} + + +/** + * @constructor + * @extends {SpeechRecognitionEvent} + */ +function webkitSpeechRecognitionEvent() {} + + +/** + * @constructor + * @extends {SpeechRecognitionError} + */ +function webkitSpeechRecognitionError() {} + + +/** + * @constructor + * @extends {SpeechRecognition} + */ +function webkitSpeechRecognition() {} + + + +// W3C Web Speech Synthesis API is implemented in Chrome M33 +/** + * @type {SpeechSynthesis} + * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section + */ +var speechSynthesis; + + +/** + * @constructor + * @param {string} text + */ +function SpeechSynthesisUtterance(text) {} + +/** @type {string} */ +SpeechSynthesisUtterance.prototype.text; + +/** @type {string} */ +SpeechSynthesisUtterance.prototype.lang; + +/** @type {number} */ +SpeechSynthesisUtterance.prototype.pitch; + +/** @type {number} */ +SpeechSynthesisUtterance.prototype.rate; + +/** @type {SpeechSynthesisVoice} */ +SpeechSynthesisUtterance.prototype.voice; + +/** @type {number} */ +SpeechSynthesisUtterance.prototype.volume; + +/** + * @param {Event} event + */ +SpeechSynthesisUtterance.prototype.onstart = function(event) {}; + +/** + * @param {Event} event + */ +SpeechSynthesisUtterance.prototype.onend = function(event) {}; + +/** + * @param {Event} event + */ +SpeechSynthesisUtterance.prototype.onerror = function(event) {}; + +/** + * @constructor + */ +function SpeechSynthesisVoice() {} + +/** @type {string} */ +SpeechSynthesisVoice.prototype.voiceURI; + +/** @type {string} */ +SpeechSynthesisVoice.prototype.name; + +/** @type {string} */ +SpeechSynthesisVoice.prototype.lang; + +/** @type {boolean} */ +SpeechSynthesisVoice.prototype.localService; + +/** @type {boolean} */ +SpeechSynthesisVoice.prototype.default; + + +/** + * @constructor + * @extends {Array} + */ +function SpeechSynthesisVoiceList() {} + + +/** + * @interface + * @extends {EventTarget} + */ +function SpeechSynthesis() {} + +/** + * @param {SpeechSynthesisUtterance} utterance + * @return {undefined} + */ +SpeechSynthesis.prototype.speak = function(utterance) {}; + +/** @type {function()} */ +SpeechSynthesis.prototype.cancel; + +/** @type {function()} */ +SpeechSynthesis.prototype.pause; + +/** @type {function()} */ +SpeechSynthesis.prototype.resume; + +/** + * @return {SpeechSynthesisVoiceList} + */ +SpeechSynthesis.prototype.getVoices = function() {}; + +/** + * @param {Event} event + * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html + */ +SpeechSynthesis.prototype.onvoiceschanged = function(event) {}; diff --git a/javascript/externs/web/w3c_trusted_types.js b/javascript/externs/web/w3c_trusted_types.js new file mode 100644 index 000000000000..a27409bc5bca --- /dev/null +++ b/javascript/externs/web/w3c_trusted_types.js @@ -0,0 +1,139 @@ +/* + * Copyright 2018 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for W3C's Trusted Types specification. + * @see https://w3c.github.io/webappsec-trusted-types/dist/spec/ + * @externs + */ + + +/** @constructor */ +function TrustedHTML() {} + +// function TrustedScript() was moved to `es3.js` so that is could be used by +// `eval()`. + +/** @constructor */ +function TrustedScriptURL() {} + + +/** + * @template Options + * @constructor + */ +function TrustedTypePolicy() {} + +/** + * @param {string} s + * @return {!TrustedHTML} + */ +TrustedTypePolicy.prototype.createHTML = function(s) {}; + +/** + * @param {string} s + * @return {!TrustedScript} + */ +TrustedTypePolicy.prototype.createScript = function(s) {}; + +/** + * @param {string} s + * @return {!TrustedScriptURL} + */ +TrustedTypePolicy.prototype.createScriptURL = function(s) {}; + + +/** @constructor */ +function TrustedTypePolicyFactory() {} + +/** @record @private */ +function TrustedTypePolicyOptions() {}; + +/** + * @type {(function(string, ...*): string)|undefined}, + */ +TrustedTypePolicyOptions.prototype.createHTML; + +/** + * @type {(function(string, ...*): string)|undefined}, + */ +TrustedTypePolicyOptions.prototype.createScript; + +/** + * @type {(function(string, ...*): string)|undefined}, + */ +TrustedTypePolicyOptions.prototype.createScriptURL; + + +/** + * @param {string} name + * @param {!TrustedTypePolicyOptions} policy + * @return {!TrustedTypePolicy} + */ +TrustedTypePolicyFactory.prototype.createPolicy = function(name, policy) {}; + + +/** + * @param {*} obj + * @return {boolean} + */ +TrustedTypePolicyFactory.prototype.isHTML = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + */ +TrustedTypePolicyFactory.prototype.isScript = function(obj) {}; + +/** + * @param {*} obj + * @return {boolean} + */ +TrustedTypePolicyFactory.prototype.isScriptURL = function(obj) {}; + + +/** @type {!TrustedHTML} */ +TrustedTypePolicyFactory.prototype.emptyHTML; + + +/** @type {!TrustedScript} */ +TrustedTypePolicyFactory.prototype.emptyScript; + +/** + * @param {string} tagName + * @param {string} attribute + * @param {string=} elementNs + * @param {string=} attrNs + * @return {?string} + */ +TrustedTypePolicyFactory.prototype.getAttributeType = function( + tagName, attribute, elementNs, attrNs) {}; + +/** + * @param {string} tagName + * @param {string} property + * @param {string=} elementNs + * @return {?string} + */ +TrustedTypePolicyFactory.prototype.getPropertyType = function( + tagName, property, elementNs) {}; + +/** @type {?TrustedTypePolicy} */ +TrustedTypePolicyFactory.prototype.defaultPolicy; + + +/** @type {!TrustedTypePolicyFactory} */ +var trustedTypes; diff --git a/javascript/externs/web/w3c_vibration.js b/javascript/externs/web/w3c_vibration.js new file mode 100644 index 000000000000..e30db412ed2f --- /dev/null +++ b/javascript/externs/web/w3c_vibration.js @@ -0,0 +1,38 @@ +/* + * Copyright 2017 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016" + * @see https://www.w3.org/TR/2016/REC-vibration-20161018/ + * + * @externs + * @author vobruba.martin@gmail.com (Martin Vobruba) + */ + + +/** + * @typedef {number|!Array} + * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern + */ +var VibratePattern; + + +/** + * @param {!VibratePattern} pattern + * @return {boolean} + * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern) + */ +Navigator.prototype.vibrate = function(pattern) {}; diff --git a/javascript/externs/web/w3c_worklets.js b/javascript/externs/web/w3c_worklets.js new file mode 100644 index 000000000000..3ac54f5fadf7 --- /dev/null +++ b/javascript/externs/web/w3c_worklets.js @@ -0,0 +1,54 @@ +/* + * Copyright 2020 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for the Worklets API. + * This file is based on the W3C Editor's Draft 07 April 2020. + * @see https://drafts.css-houdini.org/worklets/ + * + * @externs + */ + +/** + * @interface + * @see https://drafts.css-houdini.org/worklets/#the-global-scope + */ +function WorkletGlobalScope() {} + +/** + * @record + * @see https://drafts.css-houdini.org/worklets/#dictdef-workletoptions + */ +function WorkletOptions() {}; + +/** + * @type {!RequestCredentials} + * See https://fetch.spec.whatwg.org/#requestcredentials for valid values. + */ +WorkletOptions.prototype.credentials; + +/** + * @interface + * @see https://drafts.css-houdini.org/worklets/#worklet-section + */ +function Worklet() {} + +/** + * @param {string} moduleURL + * @param {!WorkletOptions=} options + * @return {!Promise} + */ +Worklet.prototype.addModule = function(moduleURL, options) {}; diff --git a/javascript/externs/web/web_animations.js b/javascript/externs/web/web_animations.js new file mode 100644 index 000000000000..b2c23b556d3f --- /dev/null +++ b/javascript/externs/web/web_animations.js @@ -0,0 +1,362 @@ +/* + * Copyright 2016 The Closure Compiler authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * @fileoverview Basic externs for the Web Animations API. This is not + * nessecarily exhaustive. For more information, see the spec- + * https://w3c.github.io/web-animations + * @externs + */ + + +/** + * @param {!Object} frames + * @param {(number|KeyframeAnimationOptions)=} options + * @return {!Animation} + * @see https://www.w3.org/TR/web-animations/#the-animatable-interface-mixin + */ +Element.prototype.animate = function(frames, options) {}; + +/** + * @return {!Array} + */ +Element.prototype.getAnimations = function() {}; + + +/** + * @constructor + * @param {?AnimationEffect=} effect + * @param {AnimationTimeline=} timeline + * @implements {EventTarget} + */ +var Animation = function(effect, timeline) {}; + +/** @override */ +Animation.prototype.addEventListener = function(type, listener, options) {}; + +/** @override */ +Animation.prototype.removeEventListener = function(type, listener, options) {}; + +/** @override */ +Animation.prototype.dispatchEvent = function(evt) {}; + +/** + * @return {undefined} + */ +Animation.prototype.cancel = function() {}; + +/** + * @return {undefined} + */ +Animation.prototype.finish = function() {}; + +/** + * @return {undefined} + */ +Animation.prototype.pause = function() {}; + +/** + * @return {undefined} + */ +Animation.prototype.play = function() {}; + +/** + * @return {undefined} + */ +Animation.prototype.reverse = function() {}; + +/** @type {number} */ +Animation.prototype.currentTime; + +/** @type {?AnimationEffect} */ +Animation.prototype.effect; + +/** @type {!Promise} */ +Animation.prototype.finished; + +/** @type {string} */ +Animation.prototype.id; + +/** @type {?function(!Event)} */ +Animation.prototype.oncancel; + +/** @type {?function(!Event)} */ +Animation.prototype.onfinish; + +/** @type {number} */ +Animation.prototype.playbackRate; + +/** @type {string} */ +Animation.prototype.playState; + +/** @type {!Promise} */ +Animation.prototype.ready; + +/** @type {number} */ +Animation.prototype.startTime; + +/** @type {!AnimationTimeline} */ +Animation.prototype.timeline; + + +/** + * @interface + */ +var AnimationEffect = function() {}; + +/** + * @return {!ComputedTimingProperties} + */ +AnimationEffect.prototype.getComputedTiming = function() {}; + +/** @param {AnimationEffectTimingProperties=} timing */ +AnimationEffect.prototype.updateTiming = function(timing) {}; + +/** @type {!AnimationEffectTiming} */ +AnimationEffect.prototype.timing; + +/** + * @constructor + * @param {Element} target + * @param {(!Array>|!Object>)} frames + * @param {(number|AnimationEffectTimingProperties)=} options + * @implements {AnimationEffect} + */ +var KeyframeEffectReadOnly = function(target, frames, options) {}; + +/** @override */ +KeyframeEffectReadOnly.prototype.getComputedTiming = function() {}; + +/** @override */ +KeyframeEffectReadOnly.prototype.timing; + + +/** + * @constructor + * @param {Element} target + * @param {(!Array>|!Object>)} frames + * @param {(number|AnimationEffectTimingProperties)=} options + * @extends {KeyframeEffectReadOnly} + */ +var KeyframeEffect = function(target, frames, options) {}; + + +/** + * @record + */ +var AnimationEffectTimingProperties = function() {}; + +/** @type {number|undefined} */ +AnimationEffectTimingProperties.prototype.delay; + +/** @type {number|undefined} */ +AnimationEffectTimingProperties.prototype.endDelay; + +/** @type {string|undefined} */ +AnimationEffectTimingProperties.prototype.fill; + +/** @type {number|undefined} */ +AnimationEffectTimingProperties.prototype.iterationStart; + +/** @type {number|undefined} */ +AnimationEffectTimingProperties.prototype.iterations; + +/** @type {number|string|undefined} */ +AnimationEffectTimingProperties.prototype.duration; + +/** @type {string|undefined} */ +AnimationEffectTimingProperties.prototype.direction; + +/** @type {string|undefined} */ +AnimationEffectTimingProperties.prototype.easing; + +/** + * @record + * @extends {AnimationEffectTimingProperties} + */ +var KeyframeEffectOptions = function() {}; + +/** + * Possible values: 'replace', 'accumulate' + * @type {string|undefined} + */ +KeyframeEffectOptions.prototype.iterationComposite; + +/** + * Possible values: 'replace', 'add', 'accumulate' + * @type {string|undefined} + */ +KeyframeEffectOptions.prototype.composite; + +/** + * @record + * @extends {KeyframeEffectOptions} + */ +var KeyframeAnimationOptions = function() {}; + +/** @type {string|undefined} */ +KeyframeAnimationOptions.prototype.id; + + +/** + * @record + * @extends {AnimationEffectTimingProperties} + */ +var ComputedTimingProperties = function() {}; + +/** @type {number} */ +ComputedTimingProperties.prototype.endTime; + +/** @type {number} */ +ComputedTimingProperties.prototype.activeDuration; + +/** @type {?number} */ +ComputedTimingProperties.prototype.localTime; + +/** @type {?number} */ +ComputedTimingProperties.prototype.progress; + +/** @type {?number} */ +ComputedTimingProperties.prototype.currentIteration; + + +/** + * @interface + */ +var AnimationEffectTimingReadOnly = function() {}; + +/** @type {number} */ +AnimationEffectTimingReadOnly.prototype.delay; + +/** @type {number} */ +AnimationEffectTimingReadOnly.prototype.endDelay; + +/** @type {string} */ +AnimationEffectTimingReadOnly.prototype.fill; + +/** @type {number} */ +AnimationEffectTimingReadOnly.prototype.iterationStart; + +/** @type {number} */ +AnimationEffectTimingReadOnly.prototype.iterations; + +/** @type {number|string} */ +AnimationEffectTimingReadOnly.prototype.duration; + +/** @type {string} */ +AnimationEffectTimingReadOnly.prototype.direction; + +/** @type {string} */ +AnimationEffectTimingReadOnly.prototype.easing; + + +/** + * @interface + * @extends {AnimationEffectTimingReadOnly} + */ +var AnimationEffectTiming = function() {}; + + +/** + * @interface + */ +var AnimationTimeline = function() {}; + +/** @type {?number} */ +AnimationTimeline.prototype.currentTime; + + +/** + * @constructor + * @implements {AnimationTimeline} + */ +var DocumentTimeline = function() {}; + +/** @override */ +DocumentTimeline.prototype.currentTime; + + +/** @type {!DocumentTimeline} */ +Document.prototype.timeline; + +/** + * Externs for the Web Animations API (Level 2 / Groups). + * + * This defines externs for the "-next" version of the Web Animations API + * polyfill found online at: + * https://github.com/web-animations/web-animations.js + * + * These features are NOT natively implemented in browsers and are not clearly + * part of the official spec. This is NOT intended to be exhaustive, and + * requires the base externs from web-animations.js. + * + */ + + +/** @type {Element} */ +KeyframeEffectReadOnly.prototype.target; + +/** @type {?function(number, !KeyframeEffect, !Animation)|undefined} */ +KeyframeEffectReadOnly.prototype.onsample; + + +/** + * @param {!AnimationEffect} effect + * @return {!Animation} + */ +DocumentTimeline.prototype.play = function(effect) {}; + +/** + * @return {!Array} + */ +DocumentTimeline.prototype.getAnimations = function() {}; + + +/** + * @param {!Array} children + * @param {AnimationEffectTimingProperties=} timing + * @constructor + * @implements {AnimationEffect} + */ +var SequenceEffect = function(children, timing) {}; + +/** @override */ +SequenceEffect.prototype.getComputedTiming = function() {}; + +/** @override */ +SequenceEffect.prototype.timing; + +/** @type {!Array} */ +SequenceEffect.prototype.children; + + +/** + * @param {!Array} children + * @param {AnimationEffectTimingProperties=} timing + * @constructor + * @implements {AnimationEffect} + */ +var GroupEffect = function(children, timing) {}; + +/** @override */ +GroupEffect.prototype.getComputedTiming = function() {}; + +/** @override */ +GroupEffect.prototype.timing; + +/** @type {!Array} */ +GroupEffect.prototype.children; diff --git a/javascript/externs/web/web_app_manifest.js b/javascript/externs/web/web_app_manifest.js new file mode 100644 index 000000000000..082c0d4dceaf --- /dev/null +++ b/javascript/externs/web/web_app_manifest.js @@ -0,0 +1,50 @@ +/* + * Copyright 2017 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @fileoverview Externs for web app manifest APIs. + * + * @see https://www.w3.org/TR/appmanifest/ + * @externs + */ + +/** + * @see https://www.w3.org/TR/appmanifest/#beforeinstallpromptevent-interface + * @constructor + * @extends {Event} + */ +function BeforeInstallPromptEvent() {} + +/** @type {!Promise<{outcome: !AppBannerPromptOutcome}>} */ +BeforeInstallPromptEvent.prototype.userChoice; + +/** @return {!Promise} */ +BeforeInstallPromptEvent.prototype.prompt = function() {}; + +/** + * @typedef {string} + * @see https://www.w3.org/TR/appmanifest/#appbannerpromptoutcome-enum + * Possible values: 'accepted', 'dismissed' + */ +var AppBannerPromptOutcome; + +/** @typedef {{userChoice: !AppBannerPromptOutcome}} */ +var PromptResponseObject; + +/** @type {?function(!BeforeInstallPromptEvent)} */ +Window.prototype.onbeforeinstallprompt; + +/** @type {?function(!Event)} */ +Window.prototype.onappinstalled; diff --git a/javascript/externs/web/webassembly.js b/javascript/externs/web/webassembly.js new file mode 100644 index 000000000000..3dc81ce345ee --- /dev/null +++ b/javascript/externs/web/webassembly.js @@ -0,0 +1,176 @@ +/* + * Copyright 2017 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for WebAssembly JS API + * + * @see http://webassembly.org/docs/js/ + * + * @externs + * @author loorongjie@gmail.com (Loo Rong Jie) + */ + + /** + * @const + */ +var WebAssembly = {}; + +/** + * @constructor + * @param {!BufferSource} bytes + */ +WebAssembly.Module = function(bytes) {}; + +/** + * @constructor + * @param {!WebAssembly.Module} moduleObject + * @param {Object=} importObject + */ +WebAssembly.Instance = function(moduleObject, importObject) {}; + +/** + * @typedef {{initial:number, maximum:(number|undefined)}} + */ +var MemoryDescriptor; + +/** + * @constructor + * @param {MemoryDescriptor} memoryDescriptor + */ +WebAssembly.Memory = function(memoryDescriptor) {}; + +/** + * @typedef {{element:string, initial:number, maximum:(number|undefined)}} + */ +var TableDescriptor; + +/** + * @constructor + * @param {TableDescriptor} tableDescriptor + */ +WebAssembly.Table = function(tableDescriptor) {}; + +/** + * @constructor + * @extends {Error} + */ +WebAssembly.CompileError = function() {}; + +/** + * @constructor + * @extends {Error} + */ +WebAssembly.LinkError = function() {}; + +/** + * @constructor + * @extends {Error} + */ +WebAssembly.RuntimeError = function() {}; + +// Note: Closure compiler does not support function overloading, omit this overload for now. +// {function(!WebAssembly.Module, Object=):!Promise} +/** + * @param {!BufferSource} moduleObject + * @param {Object=} importObject + * @return {!Promise<{module:!WebAssembly.Module, instance:!WebAssembly.Instance}>} + */ +WebAssembly.instantiate = function(moduleObject, importObject) {}; + +/** + * @param {!Promise} moduleStream + * @param {Object=} importObject + * @return {!Promise<{module:!WebAssembly.Module, instance:!WebAssembly.Instance}>} + */ +WebAssembly.instantiateStreaming = function(moduleStream, importObject) {}; + +/** + * @param {!BufferSource} bytes + * @return {!Promise} + */ +WebAssembly.compile = function(bytes) {}; + +/** + * @param {!Promise} moduleStream + * @return {!Promise} + */ +WebAssembly.compileStreaming = function(moduleStream) {}; + +/** + * @param {!BufferSource} bytes + * @return {boolean} + * @nosideeffects + */ +WebAssembly.validate = function(bytes) {}; + +/** + * @param {!WebAssembly.Module} moduleObject + * @return {!Array<{name:string, kind:string}>} + */ +WebAssembly.Module.exports = function(moduleObject) {}; + +/** + * @param {!WebAssembly.Module} moduleObject + * @return {!Array<{module:string, name:string, kind:string}>} + */ +WebAssembly.Module.imports = function(moduleObject) {}; + +/** + * @param {!WebAssembly.Module} moduleObject + * @param {string} sectionName + * @return {!Array} + */ +WebAssembly.Module.customSections = function(moduleObject, sectionName) {}; + +WebAssembly.Instance.prototype.exports; + +/** + * @param {number} delta + * @return {number} + */ +WebAssembly.Memory.prototype.grow = function(delta) {}; + +/** + * @type {!ArrayBuffer} + */ +WebAssembly.Memory.prototype.buffer; + +/** + * @param {number} delta + * @return {number} + */ +WebAssembly.Table.prototype.grow = function(delta) {}; + +/** + * @type {number} + */ +WebAssembly.Table.prototype.length; + +/** @typedef {function(...)} */ +var TableFunction; + +/** + * @param {number} index + * @return {TableFunction} + */ +WebAssembly.Table.prototype.get = function(index) {}; + +/** + * @param {number} index + * @param {?TableFunction} value + * @return {undefined} + */ +WebAssembly.Table.prototype.set = function(index, value) {}; diff --git a/javascript/externs/web/webgl2.js b/javascript/externs/web/webgl2.js new file mode 100644 index 000000000000..f8181fc646ba --- /dev/null +++ b/javascript/externs/web/webgl2.js @@ -0,0 +1,2727 @@ +/* + * Copyright 2018 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for WebGL functions as described at + * http://www.khronos.org/registry/webgl/specs/latest/ + * + * This file is current up to the WebGL 2.0 spec. + * + * This relies on webgl.js and html5.js being included for WebGL1, Canvas and + * Typed Array support. + * + * @externs + */ + + +/** + * @constructor + * @extends {WebGLRenderingContext} + */ +function WebGL2RenderingContext() {} + + + +/** @const {number} */ +WebGL2RenderingContext.UNPACK_ROW_LENGTH; + +/** @const {number} */ +WebGL2RenderingContext.UNPACK_SKIP_ROWS; + +/** @const {number} */ +WebGL2RenderingContext.UNPACK_SKIP_PIXELS; + +/** @const {number} */ +WebGL2RenderingContext.PACK_ROW_LENGTH; + +/** @const {number} */ +WebGL2RenderingContext.PACK_SKIP_ROWS; + +/** @const {number} */ +WebGL2RenderingContext.PACK_SKIP_PIXELS; + +/** @const {number} */ +WebGL2RenderingContext.COLOR; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH; + +/** @const {number} */ +WebGL2RenderingContext.STENCIL; + +/** @const {number} */ +WebGL2RenderingContext.RED; + +/** @const {number} */ +WebGL2RenderingContext.RGB8; + +/** @const {number} */ +WebGL2RenderingContext.RGBA8; + +/** @const {number} */ +WebGL2RenderingContext.RGB10_A2; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_BINDING_3D; + +/** @const {number} */ +WebGL2RenderingContext.UNPACK_SKIP_IMAGES; + +/** @const {number} */ +WebGL2RenderingContext.UNPACK_IMAGE_HEIGHT; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_3D; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_WRAP_R; + +/** @const {number} */ +WebGL2RenderingContext.MAX_3D_TEXTURE_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_2_10_10_10_REV; + +/** @const {number} */ +WebGL2RenderingContext.MAX_ELEMENTS_VERTICES; + +/** @const {number} */ +WebGL2RenderingContext.MAX_ELEMENTS_INDICES; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_MIN_LOD; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_MAX_LOD; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_BASE_LEVEL; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_MAX_LEVEL; + +/** @const {number} */ +WebGL2RenderingContext.MIN; + +/** @const {number} */ +WebGL2RenderingContext.MAX; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH_COMPONENT24; + +/** @const {number} */ +WebGL2RenderingContext.MAX_TEXTURE_LOD_BIAS; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_COMPARE_MODE; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_COMPARE_FUNC; + +/** @const {number} */ +WebGL2RenderingContext.CURRENT_QUERY; + +/** @const {number} */ +WebGL2RenderingContext.QUERY_RESULT; + +/** @const {number} */ +WebGL2RenderingContext.QUERY_RESULT_AVAILABLE; + +/** @const {number} */ +WebGL2RenderingContext.STREAM_READ; + +/** @const {number} */ +WebGL2RenderingContext.STREAM_COPY; + +/** @const {number} */ +WebGL2RenderingContext.STATIC_READ; + +/** @const {number} */ +WebGL2RenderingContext.STATIC_COPY; + +/** @const {number} */ +WebGL2RenderingContext.DYNAMIC_READ; + +/** @const {number} */ +WebGL2RenderingContext.DYNAMIC_COPY; + +/** @const {number} */ +WebGL2RenderingContext.MAX_DRAW_BUFFERS; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER0; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER1; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER2; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER3; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER4; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER5; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER6; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER7; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER8; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER9; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER10; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER11; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER12; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER13; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER14; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_BUFFER15; + +/** @const {number} */ +WebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_VERTEX_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.SAMPLER_3D; + +/** @const {number} */ +WebGL2RenderingContext.SAMPLER_2D_SHADOW; + +/** @const {number} */ +WebGL2RenderingContext.FRAGMENT_SHADER_DERIVATIVE_HINT; + +/** @const {number} */ +WebGL2RenderingContext.PIXEL_PACK_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.PIXEL_UNPACK_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.PIXEL_PACK_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.PIXEL_UNPACK_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_MAT2x3; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_MAT2x4; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_MAT3x2; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_MAT3x4; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_MAT4x2; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_MAT4x3; + +/** @const {number} */ +WebGL2RenderingContext.SRGB; + +/** @const {number} */ +WebGL2RenderingContext.SRGB8; + +/** @const {number} */ +WebGL2RenderingContext.SRGB8_ALPHA8; + +/** @const {number} */ +WebGL2RenderingContext.COMPARE_REF_TO_TEXTURE; + +/** @const {number} */ +WebGL2RenderingContext.RGBA32F; + +/** @const {number} */ +WebGL2RenderingContext.RGB32F; + +/** @const {number} */ +WebGL2RenderingContext.RGBA16F; + +/** @const {number} */ +WebGL2RenderingContext.RGB16F; + +/** @const {number} */ +WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.MAX_ARRAY_TEXTURE_LAYERS; + +/** @const {number} */ +WebGL2RenderingContext.MIN_PROGRAM_TEXEL_OFFSET; + +/** @const {number} */ +WebGL2RenderingContext.MAX_PROGRAM_TEXEL_OFFSET; + +/** @const {number} */ +WebGL2RenderingContext.MAX_VARYING_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_BINDING_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.R11F_G11F_B10F; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_10F_11F_11F_REV; + +/** @const {number} */ +WebGL2RenderingContext.RGB9_E5; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_5_9_9_9_REV; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_MODE; + +/** @const {number} */ +WebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_VARYINGS; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_START; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN; + +/** @const {number} */ +WebGL2RenderingContext.RASTERIZER_DISCARD; + +/** @const {number} */ +WebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; + +/** @const {number} */ +WebGL2RenderingContext.INTERLEAVED_ATTRIBS; + +/** @const {number} */ +WebGL2RenderingContext.SEPARATE_ATTRIBS; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.RGBA32UI; + +/** @const {number} */ +WebGL2RenderingContext.RGB32UI; + +/** @const {number} */ +WebGL2RenderingContext.RGBA16UI; + +/** @const {number} */ +WebGL2RenderingContext.RGB16UI; + +/** @const {number} */ +WebGL2RenderingContext.RGBA8UI; + +/** @const {number} */ +WebGL2RenderingContext.RGB8UI; + +/** @const {number} */ +WebGL2RenderingContext.RGBA32I; + +/** @const {number} */ +WebGL2RenderingContext.RGB32I; + +/** @const {number} */ +WebGL2RenderingContext.RGBA16I; + +/** @const {number} */ +WebGL2RenderingContext.RGB16I; + +/** @const {number} */ +WebGL2RenderingContext.RGBA8I; + +/** @const {number} */ +WebGL2RenderingContext.RGB8I; + +/** @const {number} */ +WebGL2RenderingContext.RED_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.RGB_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.RGBA_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.SAMPLER_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.SAMPLER_2D_ARRAY_SHADOW; + +/** @const {number} */ +WebGL2RenderingContext.SAMPLER_CUBE_SHADOW; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_VEC2; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_VEC3; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_VEC4; + +/** @const {number} */ +WebGL2RenderingContext.INT_SAMPLER_2D; + +/** @const {number} */ +WebGL2RenderingContext.INT_SAMPLER_3D; + +/** @const {number} */ +WebGL2RenderingContext.INT_SAMPLER_CUBE; + +/** @const {number} */ +WebGL2RenderingContext.INT_SAMPLER_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_SAMPLER_3D; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_SAMPLER_CUBE; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH_COMPONENT32F; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH32F_STENCIL8; + +/** @const {number} */ +WebGL2RenderingContext.FLOAT_32_UNSIGNED_INT_24_8_REV; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_RED_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_DEFAULT; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH_STENCIL_ATTACHMENT; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH_STENCIL; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_INT_24_8; + +/** @const {number} */ +WebGL2RenderingContext.DEPTH24_STENCIL8; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNED_NORMALIZED; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_FRAMEBUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.READ_FRAMEBUFFER; + +/** @const {number} */ +WebGL2RenderingContext.DRAW_FRAMEBUFFER; + +/** @const {number} */ +WebGL2RenderingContext.READ_FRAMEBUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.RENDERBUFFER_SAMPLES; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER; + +/** @const {number} */ +WebGL2RenderingContext.MAX_COLOR_ATTACHMENTS; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT1; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT2; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT3; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT4; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT5; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT6; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT7; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT8; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT9; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT10; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT11; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT12; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT13; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT14; + +/** @const {number} */ +WebGL2RenderingContext.COLOR_ATTACHMENT15; + +/** @const {number} */ +WebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE; + +/** @const {number} */ +WebGL2RenderingContext.MAX_SAMPLES; + +/** @const {number} */ +WebGL2RenderingContext.HALF_FLOAT; + +/** @const {number} */ +WebGL2RenderingContext.RG; + +/** @const {number} */ +WebGL2RenderingContext.RG_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.R8; + +/** @const {number} */ +WebGL2RenderingContext.RG8; + +/** @const {number} */ +WebGL2RenderingContext.R16F; + +/** @const {number} */ +WebGL2RenderingContext.R32F; + +/** @const {number} */ +WebGL2RenderingContext.RG16F; + +/** @const {number} */ +WebGL2RenderingContext.RG32F; + +/** @const {number} */ +WebGL2RenderingContext.R8I; + +/** @const {number} */ +WebGL2RenderingContext.R8UI; + +/** @const {number} */ +WebGL2RenderingContext.R16I; + +/** @const {number} */ +WebGL2RenderingContext.R16UI; + +/** @const {number} */ +WebGL2RenderingContext.R32I; + +/** @const {number} */ +WebGL2RenderingContext.R32UI; + +/** @const {number} */ +WebGL2RenderingContext.RG8I; + +/** @const {number} */ +WebGL2RenderingContext.RG8UI; + +/** @const {number} */ +WebGL2RenderingContext.RG16I; + +/** @const {number} */ +WebGL2RenderingContext.RG16UI; + +/** @const {number} */ +WebGL2RenderingContext.RG32I; + +/** @const {number} */ +WebGL2RenderingContext.RG32UI; + +/** @const {number} */ +WebGL2RenderingContext.VERTEX_ARRAY_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.R8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.RG8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.RGB8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.RGBA8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.SIGNED_NORMALIZED; + +/** @const {number} */ +WebGL2RenderingContext.COPY_READ_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.COPY_WRITE_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.COPY_READ_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.COPY_WRITE_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BUFFER_START; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BUFFER_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.MAX_VERTEX_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_COMBINED_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_UNIFORM_BUFFER_BINDINGS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_UNIFORM_BLOCK_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BUFFER_OFFSET_ALIGNMENT; + +/** @const {number} */ +WebGL2RenderingContext.ACTIVE_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_TYPE; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_INDEX; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_OFFSET; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_ARRAY_STRIDE; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_MATRIX_STRIDE; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_IS_ROW_MAJOR; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_DATA_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORMS; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER; + +/** @const {number} */ +WebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER; + +/** @const {number} */ +WebGL2RenderingContext.INVALID_INDEX; + +/** @const {number} */ +WebGL2RenderingContext.MAX_VERTEX_OUTPUT_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_FRAGMENT_INPUT_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.MAX_SERVER_WAIT_TIMEOUT; + +/** @const {number} */ +WebGL2RenderingContext.OBJECT_TYPE; + +/** @const {number} */ +WebGL2RenderingContext.SYNC_CONDITION; + +/** @const {number} */ +WebGL2RenderingContext.SYNC_STATUS; + +/** @const {number} */ +WebGL2RenderingContext.SYNC_FLAGS; + +/** @const {number} */ +WebGL2RenderingContext.SYNC_FENCE; + +/** @const {number} */ +WebGL2RenderingContext.SYNC_GPU_COMMANDS_COMPLETE; + +/** @const {number} */ +WebGL2RenderingContext.UNSIGNALED; + +/** @const {number} */ +WebGL2RenderingContext.SIGNALED; + +/** @const {number} */ +WebGL2RenderingContext.ALREADY_SIGNALED; + +/** @const {number} */ +WebGL2RenderingContext.TIMEOUT_EXPIRED; + +/** @const {number} */ +WebGL2RenderingContext.CONDITION_SATISFIED; + +/** @const {number} */ +WebGL2RenderingContext.WAIT_FAILED; + +/** @const {number} */ +WebGL2RenderingContext.SYNC_FLUSH_COMMANDS_BIT; + +/** @const {number} */ +WebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_DIVISOR; + +/** @const {number} */ +WebGL2RenderingContext.ANY_SAMPLES_PASSED; + +/** @const {number} */ +WebGL2RenderingContext.ANY_SAMPLES_PASSED_CONSERVATIVE; + +/** @const {number} */ +WebGL2RenderingContext.SAMPLER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.RGB10_A2UI; + +/** @const {number} */ +WebGL2RenderingContext.INT_2_10_10_10_REV; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_PAUSED; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_ACTIVE; + +/** @const {number} */ +WebGL2RenderingContext.TRANSFORM_FEEDBACK_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_IMMUTABLE_FORMAT; + +/** @const {number} */ +WebGL2RenderingContext.MAX_ELEMENT_INDEX; + +/** @const {number} */ +WebGL2RenderingContext.TEXTURE_IMMUTABLE_LEVELS; + +/** @const {number} */ +WebGL2RenderingContext.TIMEOUT_IGNORED; + +/** @const {number} */ +WebGL2RenderingContext.MAX_CLIENT_WAIT_TIMEOUT_WEBGL; + + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNPACK_ROW_LENGTH; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNPACK_SKIP_ROWS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNPACK_SKIP_PIXELS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PACK_ROW_LENGTH; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PACK_SKIP_ROWS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PACK_SKIP_PIXELS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH; + +/** @const {number} */ +WebGL2RenderingContext.prototype.STENCIL; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB10_A2; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_BINDING_3D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNPACK_SKIP_IMAGES; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNPACK_IMAGE_HEIGHT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_3D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_WRAP_R; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_3D_TEXTURE_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_2_10_10_10_REV; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_ELEMENTS_VERTICES; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_ELEMENTS_INDICES; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_MIN_LOD; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_MAX_LOD; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_BASE_LEVEL; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_MAX_LEVEL; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MIN; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH_COMPONENT24; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_TEXTURE_LOD_BIAS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_COMPARE_MODE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_COMPARE_FUNC; + +/** @const {number} */ +WebGL2RenderingContext.prototype.CURRENT_QUERY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.QUERY_RESULT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.QUERY_RESULT_AVAILABLE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.STREAM_READ; + +/** @const {number} */ +WebGL2RenderingContext.prototype.STREAM_COPY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.STATIC_READ; + +/** @const {number} */ +WebGL2RenderingContext.prototype.STATIC_COPY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DYNAMIC_READ; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DYNAMIC_COPY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_DRAW_BUFFERS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER0; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER1; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER2; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER3; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER4; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER5; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER6; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER7; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER9; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER10; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER11; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER12; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER13; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER14; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_BUFFER15; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SAMPLER_3D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SAMPLER_2D_SHADOW; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_MAT2x3; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_MAT2x4; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_MAT3x2; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_MAT3x4; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_MAT4x2; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_MAT4x3; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SRGB; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SRGB8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SRGB8_ALPHA8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COMPARE_REF_TO_TEXTURE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA32F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB32F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA16F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB16F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_ARRAY_TEXTURE_LAYERS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MIN_PROGRAM_TEXEL_OFFSET; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_PROGRAM_TEXEL_OFFSET; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_VARYING_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_BINDING_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R11F_G11F_B10F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_10F_11F_11F_REV; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB9_E5; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_5_9_9_9_REV; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_MODE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_VARYINGS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_START; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RASTERIZER_DISCARD; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = + 0x8C8A; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INTERLEAVED_ATTRIBS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SEPARATE_ATTRIBS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA32UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB32UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA16UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB16UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA8UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB8UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA32I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB32I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA16I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB16I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA8I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB8I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RED_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY_SHADOW; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SAMPLER_CUBE_SHADOW; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_VEC2; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_VEC3; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_VEC4; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INT_SAMPLER_2D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INT_SAMPLER_3D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INT_SAMPLER_CUBE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INT_SAMPLER_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_3D; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_CUBE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D_ARRAY; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH_COMPONENT32F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH32F_STENCIL8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FLOAT_32_UNSIGNED_INT_24_8_REV; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_RED_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_DEFAULT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH_STENCIL; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_INT_24_8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DEPTH24_STENCIL8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNED_NORMALIZED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.READ_FRAMEBUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.READ_FRAMEBUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RENDERBUFFER_SAMPLES; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_COLOR_ATTACHMENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT1; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT2; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT3; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT4; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT5; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT6; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT7; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT9; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT10; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT11; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT12; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT13; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT14; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COLOR_ATTACHMENT15; + +/** @const {number} */ +WebGL2RenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_SAMPLES; + +/** @const {number} */ +WebGL2RenderingContext.prototype.HALF_FLOAT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG_INTEGER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG8; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R16F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R32F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG16F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG32F; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R8I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R8UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R16I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R16UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R32I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R32UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG8I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG8UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG16I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG16UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG32I; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG32UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.VERTEX_ARRAY_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.R8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RG8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGBA8_SNORM; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SIGNED_NORMALIZED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COPY_READ_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COPY_WRITE_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COPY_READ_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.COPY_WRITE_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BUFFER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BUFFER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BUFFER_START; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BUFFER_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_COMBINED_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_UNIFORM_BUFFER_BINDINGS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_UNIFORM_BLOCK_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BUFFER_OFFSET_ALIGNMENT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.ACTIVE_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_TYPE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_INDEX; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_OFFSET; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_ARRAY_STRIDE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_MATRIX_STRIDE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_IS_ROW_MAJOR; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_DATA_SIZE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORMS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INVALID_INDEX; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_VERTEX_OUTPUT_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_FRAGMENT_INPUT_COMPONENTS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_SERVER_WAIT_TIMEOUT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.OBJECT_TYPE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SYNC_CONDITION; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SYNC_STATUS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SYNC_FLAGS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SYNC_FENCE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SYNC_GPU_COMMANDS_COMPLETE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.UNSIGNALED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SIGNALED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.ALREADY_SIGNALED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TIMEOUT_EXPIRED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.CONDITION_SATISFIED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.WAIT_FAILED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SYNC_FLUSH_COMMANDS_BIT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR; + +/** @const {number} */ +WebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED_CONSERVATIVE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.SAMPLER_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.RGB10_A2UI; + +/** @const {number} */ +WebGL2RenderingContext.prototype.INT_2_10_10_10_REV; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PAUSED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_ACTIVE; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BINDING; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_FORMAT; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_ELEMENT_INDEX; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_LEVELS; + +/** @const {number} */ +WebGL2RenderingContext.prototype.TIMEOUT_IGNORED; + +/** @const {number} */ +WebGL2RenderingContext.prototype.MAX_CLIENT_WAIT_TIMEOUT_WEBGL; + +/* Buffer objects */ + +/** + * @param {number} target + * @param {?ArrayBufferView|?ArrayBuffer|number} data + * @param {number} usage + * @param {number=} opt_srcOffset + * @param {number=} opt_length + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.bufferData = function( + target, data, usage, opt_srcOffset, opt_length) {}; + +/** + * @param {number} target + * @param {number} offset + * @param {?ArrayBufferView|?ArrayBuffer} data + * @param {number=} opt_srcOffset + * @param {number=} opt_length + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.bufferSubData = function( + target, offset, data, opt_srcOffset, opt_length) {}; + +/** + * @param {number} readTarget + * @param {number} writeTarget + * @param {number} readOffset + * @param {number} writeOffset + * @param {number} size + * @return {undefined} + */ +WebGL2RenderingContext.prototype.copyBufferSubData = function( + readTarget, writeTarget, readOffset, writeOffset, size) {}; + +/** + * @param {number} target + * @param {number} srcByteOffset + * @param {?ArrayBufferView|?ArrayBuffer} dstBuffer + * @param {number=} opt_dstOffset + * @param {number=} opt_length + * @return {undefined} + */ +WebGL2RenderingContext.prototype.getBufferSubData = function( + target, srcByteOffset, dstBuffer, opt_dstOffset, opt_length) {}; + +/* Framebuffer objects */ + +/** + * @param {number} srcX0 + * @param {number} srcY0 + * @param {number} srcX1 + * @param {number} srcY1 + * @param {number} dstX0 + * @param {number} dstY0 + * @param {number} dstX1 + * @param {number} dstY1 + * @param {number} mask + * @param {number} filter + * @return {undefined} + */ +WebGL2RenderingContext.prototype.blitFramebuffer = function( + srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) {}; + +/** + * @param {number} target + * @param {number} attachment + * @param {?WebGLTexture} texture + * @param {number} level + * @param {number} layer + * @return {undefined} + */ +WebGL2RenderingContext.prototype.framebufferTextureLayer = function( + target, attachment, texture, level, layer) {}; + +/** + * @param {number} target + * @param {!Array} attachments + * @return {undefined} + */ +WebGL2RenderingContext.prototype.invalidateFramebuffer = function( + target, attachments) {}; + +/** + * @param {number} target + * @param {!Array} attachments + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @return {undefined} + */ +WebGL2RenderingContext.prototype.invalidateSubFramebuffer = function( + target, attachments, x, y, width, height) {}; + +/** + * @param {number} src + * @return {undefined} + */ +WebGL2RenderingContext.prototype.readBuffer = function(src) {}; + +/* Renderbuffer objects */ + +/** + * @param {number} target + * @param {number} internalformat + * @param {number} pname + * @return {*} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getInternalformatParameter = function( + target, internalformat, pname) {}; + +/** + * @param {number} target + * @param {number} samples + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @return {undefined} + */ +WebGL2RenderingContext.prototype.renderbufferStorageMultisample = function( + target, samples, internalformat, width, height) {}; + +/* Texture objects */ + +/** + * @param {number} target + * @param {number} levels + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @return {undefined} + */ +WebGL2RenderingContext.prototype.texStorage2D = function( + target, levels, internalformat, width, height) {}; + +/** + * @param {number} target + * @param {number} levels + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @param {number} depth + * @return {undefined} + */ +WebGL2RenderingContext.prototype.texStorage3D = function( + target, levels, internalformat, width, height, depth) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} internalformat + * @param {number} formatOrWidth + * @param {number} typeOrHeight + * @param {?TexImageSource|number} imgOrBorder + * @param {number=} opt_format + * @param {number=} opt_type + * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset + * @param {number=} opt_srcOffset + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.texImage2D = function( + target, level, internalformat, formatOrWidth, typeOrHeight, imgOrBorder, + opt_format, opt_type, opt_imgOrOffset, opt_srcOffset) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} xoffset + * @param {number} yoffset + * @param {number} formatOrWidth + * @param {number} typeOrHeight + * @param {?TexImageSource|number} dataOrFormat + * @param {number=} opt_type + * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset + * @param {number=} opt_srcOffset + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.texSubImage2D = function( + target, level, xoffset, yoffset, formatOrWidth, typeOrHeight, dataOrFormat, + opt_type, opt_imgOrOffset, opt_srcOffset) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @param {number} depth + * @param {number} border + * @param {number} format + * @param {number} type + * @param {?ArrayBufferView|?TexImageSource|number} srcData + * @param {number=} opt_srcOffset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.texImage3D = function( + target, level, internalformat, width, height, depth, border, format, type, + srcData, opt_srcOffset) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} xoffset + * @param {number} yoffset + * @param {number} zoffset + * @param {number} width + * @param {number} height + * @param {number} depth + * @param {number} format + * @param {number} type + * @param {?ArrayBufferView|?TexImageSource|number} srcData + * @param {number=} opt_srcOffset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.texSubImage3D = function( + target, level, xoffset, yoffset, zoffset, width, height, depth, format, + type, srcData, opt_srcOffset) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} xoffset + * @param {number} yoffset + * @param {number} zoffset + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @return {undefined} + */ +WebGL2RenderingContext.prototype.copyTexSubImage3D = function( + target, level, xoffset, yoffset, zoffset, x, y, width, height) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @param {number} border + * @param {?ArrayBufferView|number} srcDataOrSize + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLengthOverride + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.compressedTexImage2D = function( + target, level, internalformat, width, height, border, srcDataOrSize, + opt_srcOffset, opt_srcLengthOverride) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @param {number} depth + * @param {number} border + * @param {!ArrayBufferView|number} srcDataOrSize + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLengthOverride + * @return {undefined} + */ +WebGL2RenderingContext.prototype.compressedTexImage3D = function( + target, level, internalformat, width, height, depth, border, srcDataOrSize, + opt_srcOffset, opt_srcLengthOverride) {}; + + +/** + * @param {number} target + * @param {number} level + * @param {number} xoffset + * @param {number} yoffset + * @param {number} width + * @param {number} height + * @param {number} format + * @param {?ArrayBufferView|number} srcDataOrSize + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLengthOverride + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.compressedTexSubImage2D = function( + target, level, xoffset, yoffset, width, height, format, srcDataOrSize, + opt_srcOffset, opt_srcLengthOverride) {}; + + +/** + * @param {number} target + * @param {number} level + * @param {number} xoffset + * @param {number} yoffset + * @param {number} zoffset + * @param {number} width + * @param {number} height + * @param {number} depth + * @param {number} format + * @param {!ArrayBufferView|number} srcDataOrSize + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLengthOverride + * @return {undefined} + */ +WebGL2RenderingContext.prototype.compressedTexSubImage3D = function( + target, level, xoffset, yoffset, zoffset, width, height, depth, format, + srcDataOrSize, opt_srcOffset, opt_srcLengthOverride) {}; + +/* Programs and shaders */ + +/** + * @param {!WebGLProgram} program + * @param {string} name + * @return {number} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getFragDataLocation = function( + program, name) {}; + +/* Uniforms */ + +/** + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform1ui = function(location, v0) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform2ui = function(location, v0, v1) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform3ui = function(location, v0, v1, v2) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @param {number} v3 + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform4ui = function( + location, v0, v1, v2, v3) {}; + + +/** + * @param {?WebGLUniformLocation} location + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform1fv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform2fv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform3fv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform4fv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Int32Array|?Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform1iv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Int32Array|?Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform2iv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Int32Array|?Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform3iv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {?Int32Array|?Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniform4iv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + + +/** + * @param {?WebGLUniformLocation} location + * @param {!Uint32Array|!Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform1uiv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {!Uint32Array|!Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform2uiv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {!Uint32Array|!Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform3uiv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {!Uint32Array|!Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniform4uiv = function( + location, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniformMatrix2fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformMatrix3x2fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformMatrix4x2fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformMatrix2x3fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniformMatrix3fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformMatrix4x3fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformMatrix2x4fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformMatrix3x4fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/** + * @param {?WebGLUniformLocation} location + * @param {boolean} transpose + * @param {?Float32Array|?Array} data + * @param {number=} opt_srcOffset + * @param {number=} opt_srcLength + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.uniformMatrix4fv = function( + location, transpose, data, opt_srcOffset, opt_srcLength) {}; + +/* Vertex attribs */ + +/** + * @param {number} index + * @param {number} x + * @param {number} y + * @param {number} z + * @param {number} w + * @return {undefined} + */ +WebGL2RenderingContext.prototype.vertexAttribI4i = function( + index, x, y, z, w) {}; + +/** + * @param {number} index + * @param {!Int32Array|!Array|!Array} values + * @return {undefined} + */ +WebGL2RenderingContext.prototype.vertexAttribI4iv = function(index, values) {}; + +/** + * @param {number} index + * @param {number} x + * @param {number} y + * @param {number} z + * @param {number} w + * @return {undefined} + */ +WebGL2RenderingContext.prototype.vertexAttribI4ui = function( + index, x, y, z, w) {}; + +/** + * @param {number} index + * @param {!Uint32Array|!Array|!Array} values + * @return {undefined} + */ +WebGL2RenderingContext.prototype.vertexAttribI4uiv = function(index, values) {}; + +/** + * @param {number} index + * @param {number} size + * @param {number} type + * @param {number} stride + * @param {number} offset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.vertexAttribIPointer = function( + index, size, type, stride, offset) {}; + +/* Writing to the drawing buffer */ + +/** + * @param {number} index + * @param {number} divisor + * @return {undefined} + */ +WebGL2RenderingContext.prototype.vertexAttribDivisor = function( + index, divisor) {}; + +/** + * @param {number} mode + * @param {number} first + * @param {number} count + * @param {number} instanceCount + * @return {undefined} + */ +WebGL2RenderingContext.prototype.drawArraysInstanced = function( + mode, first, count, instanceCount) {}; + +/** + * @param {number} mode + * @param {number} count + * @param {number} type + * @param {number} offset + * @param {number} instanceCount + * @return {undefined} + */ +WebGL2RenderingContext.prototype.drawElementsInstanced = function( + mode, count, type, offset, instanceCount) {}; + +/** + * @param {number} mode + * @param {number} start + * @param {number} end + * @param {number} count + * @param {number} type + * @param {number} offset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.drawRangeElements = function( + mode, start, end, count, type, offset) {}; + +/* Reading back pixels */ + +/** + * @param {number} x + * @param {number} y + * @param {number} width + * @param {number} height + * @param {number} format + * @param {number} type + * @param {?ArrayBufferView|number} dstDataOrOffset + * @param {number=} opt_dstOffset + * @return {undefined} + * @override + */ +WebGL2RenderingContext.prototype.readPixels = function( + x, y, width, height, format, type, dstDataOrOffset, opt_dstOffset) {}; + +/* Multiple Render Targets */ + +/** + * @param {!Array} buffers + * @return {undefined} + */ +WebGL2RenderingContext.prototype.drawBuffers = function(buffers) {}; + + +/** + * @param {number} buffer + * @param {number} drawbuffer + * @param {!Float32Array|!Array} values + * @param {number=} opt_srcOffset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.clearBufferfv = function( + buffer, drawbuffer, values, opt_srcOffset) {}; + +/** + * @param {number} buffer + * @param {number} drawbuffer + * @param {!Int32Array|!Array|!Array} values + * @param {number=} opt_srcOffset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.clearBufferiv = function( + buffer, drawbuffer, values, opt_srcOffset) {}; + +/** + * @param {number} buffer + * @param {number} drawbuffer + * @param {!Uint32Array|!Array|!Array} values + * @param {number=} opt_srcOffset + * @return {undefined} + */ +WebGL2RenderingContext.prototype.clearBufferuiv = function( + buffer, drawbuffer, values, opt_srcOffset) {}; + +/** + * @param {number} buffer + * @param {number} drawbuffer + * @param {number} depth + * @param {number} stencil + * @return {undefined} + */ +WebGL2RenderingContext.prototype.clearBufferfi = function( + buffer, drawbuffer, depth, stencil) {}; + +/* Query Objects */ + +/** + * @return {?WebGLQuery} + */ +WebGL2RenderingContext.prototype.createQuery = function() {}; + +/** + * @param {?WebGLQuery} query + * @return {undefined} + */ +WebGL2RenderingContext.prototype.deleteQuery = function(query) {}; + +/** + * @param {?WebGLQuery} query + * @return {boolean} + */ +WebGL2RenderingContext.prototype.isQuery = function(query) {}; + +/** + * @param {number} target + * @param {!WebGLQuery} query + * @return {undefined} + */ +WebGL2RenderingContext.prototype.beginQuery = function(target, query) {}; + +/** + * @param {number} target + * @return {undefined} + */ +WebGL2RenderingContext.prototype.endQuery = function(target) {}; + +/** + * @param {number} target + * @param {number} pname + * @return {?WebGLQuery} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getQuery = function(target, pname) {}; + +/** + * @param {!WebGLQuery} query + * @param {number} pname + * @return {*} + */ +WebGL2RenderingContext.prototype.getQueryParameter = function(query, pname) {}; + +/* Sampler Objects */ + +/** + * @return {?WebGLSampler} + */ +WebGL2RenderingContext.prototype.createSampler = function() {}; + +/** + * @param {?WebGLSampler} sampler + * @return {undefined} + */ +WebGL2RenderingContext.prototype.deleteSampler = function(sampler) {}; + +/** + * @param {?WebGLSampler} sampler + * @return {boolean} + */ +WebGL2RenderingContext.prototype.isSampler = function(sampler) {}; + +/** + * @param {number} unit + * @param {?WebGLSampler} sampler + * @return {undefined} + */ +WebGL2RenderingContext.prototype.bindSampler = function(unit, sampler) {}; + +/** + * @param {!WebGLSampler} sampler + * @param {number} pname + * @param {number} param + * @return {undefined} + */ +WebGL2RenderingContext.prototype.samplerParameteri = function( + sampler, pname, param) {}; + +/** + * @param {!WebGLSampler} sampler + * @param {number} pname + * @param {number} param + * @return {undefined} + */ +WebGL2RenderingContext.prototype.samplerParameterf = function( + sampler, pname, param) {}; + +/** + * @param {!WebGLSampler} sampler + * @param {number} pname + * @return {*} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getSamplerParameter = function( + sampler, pname) {}; + +/* Sync objects */ + +/** + * @param {number} condition + * @param {number} flags + * @return {?WebGLSync} + */ +WebGL2RenderingContext.prototype.fenceSync = function(condition, flags) {}; + +/** + * @param {?WebGLSync} sync + * @return {boolean} + */ +WebGL2RenderingContext.prototype.isSync = function(sync) {}; + +/** + * @param {?WebGLSync} sync + * @return {undefined} + */ +WebGL2RenderingContext.prototype.deleteSync = function(sync) {}; + +/** + * @param {!WebGLSync} sync + * @param {number} flags + * @param {number} timeout + * @return {undefined} + */ +WebGL2RenderingContext.prototype.clientWaitSync = function( + sync, flags, timeout) {}; + +/** + * @param {!WebGLSync} sync + * @param {number} flags + * @param {number} timeout + * @return {undefined} + */ +WebGL2RenderingContext.prototype.waitSync = function(sync, flags, timeout) {}; + +/** + * @param {!WebGLSync} sync + * @param {number} pname + * @return {*} + */ +WebGL2RenderingContext.prototype.getSyncParameter = function(sync, pname) {}; + +/* Transform Feedback */ + +/** + * @return {?WebGLTransformFeedback} + */ +WebGL2RenderingContext.prototype.createTransformFeedback = function() {}; + +/** + * @param {?WebGLTransformFeedback} tf + * @return {undefined} + */ +WebGL2RenderingContext.prototype.deleteTransformFeedback = function(tf) {}; + +/** + * @param {?WebGLTransformFeedback} tf + * @return {boolean} + */ +WebGL2RenderingContext.prototype.isTransformFeedback = function(tf) {}; + +/** + * @param {number} target + * @param {?WebGLTransformFeedback} tf + * @return {undefined} + */ +WebGL2RenderingContext.prototype.bindTransformFeedback = function( + target, tf) {}; + +/** + * @param {number} primitiveMode + * @return {undefined} + */ +WebGL2RenderingContext.prototype.beginTransformFeedback = function( + primitiveMode) {}; + +/** + * @return {undefined} + */ +WebGL2RenderingContext.prototype.endTransformFeedback = function() {}; + +/** + * @param {!WebGLProgram} program + * @param {!Array} varyings + * @param {number} bufferMode + * @return {undefined} + */ +WebGL2RenderingContext.prototype.transformFeedbackVaryings = function( + program, varyings, bufferMode) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} index + * @return {?WebGLActiveInfo} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getTransformFeedbackVarying = function( + program, index) {}; + +/** + * @return {undefined} + */ +WebGL2RenderingContext.prototype.pauseTransformFeedback = function() {}; + +/** + * @return {undefined} + */ +WebGL2RenderingContext.prototype.resumeTransformFeedback = function() {}; + +/* Uniform Buffer Objects and Transform Feedback Buffers */ + +/** + * @param {number} target + * @param {number} index + * @param {?WebGLBuffer} buffer + * @return {undefined} + */ +WebGL2RenderingContext.prototype.bindBufferBase = function( + target, index, buffer) {}; + +/** + * @param {number} target + * @param {number} index + * @param {?WebGLBuffer} buffer + * @param {number} offset + * @param {number} size + * @return {undefined} + */ +WebGL2RenderingContext.prototype.bindBufferRange = function( + target, index, buffer, offset, size) {}; + +/** + * @param {number} target + * @param {number} index + * @return {*} + */ +WebGL2RenderingContext.prototype.getIndexedParameter = function( + target, index) {}; + +/** + * @param {!WebGLProgram} program + * @param {!Array} uniformNames + * @return {!Array} + */ +WebGL2RenderingContext.prototype.getUniformIndices = function( + program, uniformNames) {}; + +/** + * @param {!WebGLProgram} program + * @param {!Array} uniformIndices + * @param {number} pname + * @return {*} + */ +WebGL2RenderingContext.prototype.getActiveUniforms = function( + program, uniformIndices, pname) {}; + +/** + * @param {!WebGLProgram} program + * @param {string} uniformBlockName + * @return {number} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getUniformBlockIndex = function( + program, uniformBlockName) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} uniformBlockIndex + * @param {number} pname + * @return {*} + */ +WebGL2RenderingContext.prototype.getActiveUniformBlockParameter = function( + program, uniformBlockIndex, pname) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} uniformBlockIndex + * @return {?string} + * @nosideeffects + */ +WebGL2RenderingContext.prototype.getActiveUniformBlockName = function( + program, uniformBlockIndex) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} uniformBlockIndex + * @param {number} uniformBlockBinding + * @return {undefined} + */ +WebGL2RenderingContext.prototype.uniformBlockBinding = function( + program, uniformBlockIndex, uniformBlockBinding) {}; + +/* Vertex Array Objects */ + +/** + * @return {?WebGLVertexArrayObject} + */ +WebGL2RenderingContext.prototype.createVertexArray = function() {}; + +/** + * @param {?WebGLVertexArrayObject} vertexArray + * @return {undefined} + */ +WebGL2RenderingContext.prototype.deleteVertexArray = function(vertexArray) {}; + +/** + * @param {?WebGLVertexArrayObject} vertexArray + * @return {boolean} + */ +WebGL2RenderingContext.prototype.isVertexArray = function(vertexArray) {}; + +/** + * @param {?WebGLVertexArrayObject} array + * @return {undefined} + */ +WebGL2RenderingContext.prototype.bindVertexArray = function(array) {}; + + +/** + * @constructor + * @extends {WebGLObject} + */ +function WebGLQuery() {} + + +/** + * @constructor + * @extends {WebGLObject} + */ +function WebGLSampler() {} + + +/** + * @constructor + * @extends {WebGLObject} + */ +function WebGLSync() {} + + +/** + * @constructor + * @extends {WebGLObject} + */ +function WebGLTransformFeedback() {} + + +/** + * @constructor + * @extends {WebGLObject} + */ +function WebGLVertexArrayObject() {} diff --git a/javascript/externs/web/webgl2_compute.js b/javascript/externs/web/webgl2_compute.js new file mode 100644 index 000000000000..87c31d1febf5 --- /dev/null +++ b/javascript/externs/web/webgl2_compute.js @@ -0,0 +1,1609 @@ +/* + * Copyright 2019 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for WebGL functions as described at + * http://www.khronos.org/registry/webgl/specs/latest/ + * + * This file is current up to the WebGL 2.0 Compute spec. + * + * This relies on webgl2.js and html5.js being included for WebGL2, Canvas and + * Typed Array support. + * + * @externs + */ + + +/** + * @constructor + * @extends {WebGL2RenderingContext} + * @see https://www.khronos.org/registry/webgl/specs/latest/2.0-compute/#webgl2-compute-context + */ +function WebGL2ComputeRenderingContext() {} + + +/** @const {number} */ +WebGL2ComputeRenderingContext.COMPUTE_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_TEXTURE_IMAGE_UNITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_SHARED_MEMORY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_WORK_GROUP_INVOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_WORK_GROUP_COUNT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_WORK_GROUP_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.COMPUTE_WORK_GROUP_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.DISPATCH_INDIRECT_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.DISPATCH_INDIRECT_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.COMPUTE_SHADER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.DRAW_INDIRECT_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.DRAW_INDIRECT_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_UNIFORM_LOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.FRAMEBUFFER_DEFAULT_WIDTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.FRAMEBUFFER_DEFAULT_HEIGHT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.FRAMEBUFFER_DEFAULT_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAMEBUFFER_WIDTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAMEBUFFER_HEIGHT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAMEBUFFER_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNIFORM; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNIFORM_BLOCK; + +/** @const {number} */ +WebGL2ComputeRenderingContext.PROGRAM_INPUT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.PROGRAM_OUTPUT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.BUFFER_VARIABLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BLOCK; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ATOMIC_COUNTER_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TRANSFORM_FEEDBACK_VARYING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ACTIVE_RESOURCES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_NAME_LENGTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_NUM_ACTIVE_VARIABLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.NAME_LENGTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ARRAY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.BLOCK_INDEX; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ARRAY_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MATRIX_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IS_ROW_MAJOR; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ATOMIC_COUNTER_BUFFER_INDEX; + +/** @const {number} */ +WebGL2ComputeRenderingContext.BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.BUFFER_DATA_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.NUM_ACTIVE_VARIABLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ACTIVE_VARIABLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.REFERENCED_BY_VERTEX_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.REFERENCED_BY_FRAGMENT_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.REFERENCED_BY_COMPUTE_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TOP_LEVEL_ARRAY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TOP_LEVEL_ARRAY_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.LOCATION; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_SHADER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.FRAGMENT_SHADER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ALL_SHADER_BITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ATOMIC_COUNTER_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ATOMIC_COUNTER_BUFFER_START; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ATOMIC_COUNTER_BUFFER_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMBINED_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAGMENT_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMBINED_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_ATOMIC_COUNTER_BUFFER_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_ATOMIC_COUNTER_BUFFER_BINDINGS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ACTIVE_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNSIGNED_INT_ATOMIC_COUNTER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_IMAGE_UNITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAGMENT_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMBINED_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_BINDING_NAME; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_BINDING_LEVEL; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_BINDING_LAYERED; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_BINDING_LAYER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_BINDING_ACCESS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_BINDING_FORMAT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_ATTRIB_ARRAY_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ELEMENT_ARRAY_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNIFORM_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_FETCH_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_IMAGE_ACCESS_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.COMMAND_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.PIXEL_BUFFER_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_UPDATE_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.BUFFER_UPDATE_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.FRAMEBUFFER_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TRANSFORM_FEEDBACK_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ATOMIC_COUNTER_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.ALL_BARRIER_BITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_2D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_3D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_CUBE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_2D_ARRAY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.INT_IMAGE_2D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.INT_IMAGE_3D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.INT_IMAGE_CUBE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.INT_IMAGE_2D_ARRAY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNSIGNED_INT_IMAGE_2D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNSIGNED_INT_IMAGE_3D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNSIGNED_INT_IMAGE_CUBE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNSIGNED_INT_IMAGE_2D_ARRAY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_FORMAT_COMPATIBILITY_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_FORMAT_COMPATIBILITY_BY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.IMAGE_FORMAT_COMPATIBILITY_BY_CLASS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.READ_ONLY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.WRITE_ONLY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.READ_WRITE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BUFFER_START; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BUFFER_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_FRAGMENT_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMPUTE_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMBINED_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_SHADER_STORAGE_BUFFER_BINDINGS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_SHADER_STORAGE_BLOCK_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COMBINED_SHADER_OUTPUT_RESOURCES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.DEPTH_STENCIL_TEXTURE_MODE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.STENCIL_INDEX; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MIN_PROGRAM_TEXTURE_GATHER_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_PROGRAM_TEXTURE_GATHER_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SAMPLE_POSITION; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SAMPLE_MASK; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SAMPLE_MASK_VALUE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_SAMPLE_MASK_WORDS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_COLOR_TEXTURE_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_DEPTH_TEXTURE_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_INTEGER_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_BINDING_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_FIXED_SAMPLE_LOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_WIDTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_HEIGHT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_DEPTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_INTERNAL_FORMAT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_RED_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_GREEN_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_BLUE_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_ALPHA_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_DEPTH_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_STENCIL_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_SHARED_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_RED_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_GREEN_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_BLUE_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_ALPHA_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_DEPTH_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.TEXTURE_COMPRESSED; + +/** @const {number} */ +WebGL2ComputeRenderingContext.SAMPLER_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.INT_SAMPLER_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_ATTRIB_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_ATTRIB_RELATIVE_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_BINDING_DIVISOR; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_BINDING_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_BINDING_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.VERTEX_BINDING_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_ATTRIB_RELATIVE_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_ATTRIB_BINDINGS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.MAX_VERTEX_ATTRIB_STRIDE; + + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.COMPUTE_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_UNIFORM_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_TEXTURE_IMAGE_UNITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_SHARED_MEMORY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_WORK_GROUP_INVOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_WORK_GROUP_COUNT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_WORK_GROUP_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.COMPUTE_WORK_GROUP_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.DISPATCH_INDIRECT_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.DISPATCH_INDIRECT_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.COMPUTE_SHADER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.DRAW_INDIRECT_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.DRAW_INDIRECT_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_UNIFORM_LOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.FRAMEBUFFER_DEFAULT_WIDTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.FRAMEBUFFER_DEFAULT_HEIGHT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.FRAMEBUFFER_DEFAULT_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype + .FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAMEBUFFER_WIDTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAMEBUFFER_HEIGHT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAMEBUFFER_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNIFORM; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNIFORM_BLOCK; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.PROGRAM_INPUT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.PROGRAM_OUTPUT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.BUFFER_VARIABLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BLOCK; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ATOMIC_COUNTER_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TRANSFORM_FEEDBACK_VARYING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ACTIVE_RESOURCES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_NAME_LENGTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_NUM_ACTIVE_VARIABLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.NAME_LENGTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ARRAY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.BLOCK_INDEX; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ARRAY_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MATRIX_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IS_ROW_MAJOR; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ATOMIC_COUNTER_BUFFER_INDEX; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.BUFFER_DATA_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.NUM_ACTIVE_VARIABLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ACTIVE_VARIABLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.REFERENCED_BY_VERTEX_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.REFERENCED_BY_FRAGMENT_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.REFERENCED_BY_COMPUTE_SHADER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TOP_LEVEL_ARRAY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TOP_LEVEL_ARRAY_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.LOCATION; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_SHADER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.FRAGMENT_SHADER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ALL_SHADER_BITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ATOMIC_COUNTER_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ATOMIC_COUNTER_BUFFER_START; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ATOMIC_COUNTER_BUFFER_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMBINED_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAGMENT_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMBINED_ATOMIC_COUNTERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_ATOMIC_COUNTER_BUFFER_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_ATOMIC_COUNTER_BUFFER_BINDINGS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ACTIVE_ATOMIC_COUNTER_BUFFERS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNSIGNED_INT_ATOMIC_COUNTER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_IMAGE_UNITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAGMENT_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMBINED_IMAGE_UNIFORMS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_BINDING_NAME; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_BINDING_LEVEL; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_BINDING_LAYERED; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_BINDING_LAYER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_BINDING_ACCESS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_BINDING_FORMAT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ELEMENT_ARRAY_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNIFORM_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_FETCH_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_IMAGE_ACCESS_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.COMMAND_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.PIXEL_BUFFER_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_UPDATE_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.BUFFER_UPDATE_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.FRAMEBUFFER_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TRANSFORM_FEEDBACK_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ATOMIC_COUNTER_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BARRIER_BIT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.ALL_BARRIER_BITS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_2D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_3D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_CUBE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_2D_ARRAY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.INT_IMAGE_2D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.INT_IMAGE_3D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.INT_IMAGE_CUBE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.INT_IMAGE_2D_ARRAY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNSIGNED_INT_IMAGE_2D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNSIGNED_INT_IMAGE_3D; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNSIGNED_INT_IMAGE_CUBE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNSIGNED_INT_IMAGE_2D_ARRAY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_FORMAT_COMPATIBILITY_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_FORMAT_COMPATIBILITY_BY_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.IMAGE_FORMAT_COMPATIBILITY_BY_CLASS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.READ_ONLY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.WRITE_ONLY; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.READ_WRITE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BUFFER_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BUFFER_START; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BUFFER_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_FRAGMENT_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMPUTE_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMBINED_SHADER_STORAGE_BLOCKS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_SHADER_STORAGE_BUFFER_BINDINGS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_SHADER_STORAGE_BLOCK_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COMBINED_SHADER_OUTPUT_RESOURCES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.DEPTH_STENCIL_TEXTURE_MODE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.STENCIL_INDEX; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MIN_PROGRAM_TEXTURE_GATHER_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_PROGRAM_TEXTURE_GATHER_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SAMPLE_POSITION; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SAMPLE_MASK; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SAMPLE_MASK_VALUE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_SAMPLE_MASK_WORDS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_COLOR_TEXTURE_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_DEPTH_TEXTURE_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_INTEGER_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_BINDING_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_SAMPLES; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_FIXED_SAMPLE_LOCATIONS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_WIDTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_HEIGHT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_DEPTH; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_INTERNAL_FORMAT; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_RED_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_GREEN_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_BLUE_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_ALPHA_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_DEPTH_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_STENCIL_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_SHARED_SIZE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_RED_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_GREEN_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_BLUE_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_ALPHA_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_DEPTH_TYPE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.TEXTURE_COMPRESSED; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.SAMPLER_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.INT_SAMPLER_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_ATTRIB_BINDING; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_ATTRIB_RELATIVE_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_BINDING_DIVISOR; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_BINDING_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_BINDING_STRIDE; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.VERTEX_BINDING_BUFFER; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_ATTRIB_RELATIVE_OFFSET; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_ATTRIB_BINDINGS; + +/** @const {number} */ +WebGL2ComputeRenderingContext.prototype.MAX_VERTEX_ATTRIB_STRIDE; + + +/** + * @param {number} num_groups_x + * @param {number} num_groups_y + * @param {number} num_groups_z + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.dispatchCompute = function( + num_groups_x, num_groups_y, num_groups_z) {}; + +/** + * @param {number} offset + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.dispatchComputeIndirect = function( + offset) {}; + +/** + * @param {number} mode + * @param {number} offset + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.drawArraysIndirect = function( + mode, offset) {}; + +/** + * @param {number} mode + * @param {number} type + * @param {number} offset + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.drawElementsIndirect = function( + mode, type, offset) {}; + +/** + * @param {number} target + * @param {number} pname + * @param {number} param + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.framebufferParameter = function( + target, pname, param) {}; + +/** + * @param {number} target + * @param {number} pname + * @return {*} + */ +WebGL2ComputeRenderingContext.prototype.getFramebufferParameter = function( + target, pname) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} programInterface + * @param {number} pname + * @return {*} + */ +WebGL2ComputeRenderingContext.prototype.getProgramInterfaceParameter = function( + program, programInterface, pname) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} programInterface + * @param {number} index + * @param {!Array} props + * @return {?Array<*>} + */ +WebGL2ComputeRenderingContext.prototype.getProgramResource = function( + program, programInterface, index, props) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} programInterface + * @param {string} name + * @return {number} + */ +WebGL2ComputeRenderingContext.prototype.getProgramResourceIndex = function( + program, programInterface, name) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} programInterface + * @param {number} index + * @return {?string} + */ +WebGL2ComputeRenderingContext.prototype.getProgramResourceName = function( + program, programInterface, index) {}; + +/** + * @param {!WebGLProgram} program + * @param {number} programInterface + * @param {string} name + * @return {*} + */ +WebGL2ComputeRenderingContext.prototype.getProgramResourceLocation = function( + program, programInterface, name) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform1i = function( + program, location, v0) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform2i = function( + program, location, v0, v1) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform3i = function( + program, location, v0, v1, v2) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @param {number} v3 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform4i = function( + program, location, v0, v1, v2, v3) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform1ui = function( + program, location, v0) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform2ui = function( + program, location, v0, v1) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform3ui = function( + program, location, v0, v1, v2) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @param {number} v3 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform4ui = function( + program, location, v0, v1, v2, v3) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform1f = function( + program, location, v0) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform2f = function( + program, location, v0, v1) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform3f = function( + program, location, v0, v1, v2) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} v0 + * @param {number} v1 + * @param {number} v2 + * @param {number} v3 + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform4f = function( + program, location, v0, v1, v2, v3) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Int32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform1iv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Int32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform2iv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Int32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform3iv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Int32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform4iv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Uint32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform1uiv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Uint32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform2uiv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Uint32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform3uiv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Uint32Array|!Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform4uiv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform1fv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform2fv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform3fv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniform4fv = function( + program, location, count, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix2fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix3fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix4fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix2x3fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix3x2fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix2x4fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix4x2fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix3x4fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {?WebGLProgram} program + * @param {?WebGLUniformLocation} location + * @param {number} count + * @param {boolean} transpose + * @param {!Float32Array|!Array} data + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.programUniformMatrix4x3fv = function( + program, location, count, transpose, data) {}; + +/** + * @param {number} unit + * @param {?WebGLTexture} texture + * @param {number} level + * @param {boolean} layered + * @param {number} layer + * @param {number} access + * @param {number} format + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.bindImageTexture = function( + unit, texture, level, layered, layer, access, format) {}; + +/** + * @param {number} barriers + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.memoryBarrier = function(barriers) {}; + +/** + * @param {number} barriers + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.memoryBarrierByRegion = function( + barriers) {}; + +/** + * @param {number} target + * @param {number} samples + * @param {number} internalformat + * @param {number} width + * @param {number} height + * @param {boolean} fixedsamplelocations + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.texStorage2DMultisample = function( + target, samples, internalformat, width, height, fixedsamplelocations) {}; + +/** + * @param {number} target + * @param {number} level + * @param {number} pname + * @return {*} + */ +WebGL2ComputeRenderingContext.prototype.getTexLevelParameter = function( + target, level, pname) {}; + +/** + * @param {number} pname + * @param {number} index + * @return {*} + */ +WebGL2ComputeRenderingContext.prototype.getMultisample = function( + pname, index) {}; + +/** + * @param {number} index + * @param {number} mask + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.sampleMask = function(index, mask) {}; + +/** + * @param {number} bindingindex + * @param {?WebGLBuffer} buffer + * @param {number} offset + * @param {number} stride + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.bindVertexBuffer = function( + bindingindex, buffer, offset, stride) {}; + +/** + * @param {number} attribindex + * @param {number} size + * @param {number} type + * @param {boolean} normalized + * @param {number} relativeoffset + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.vertexAttribFormat = function( + attribindex, size, type, normalized, relativeoffset) {}; + +/** + * @param {number} attribindex + * @param {number} size + * @param {number} type + * @param {number} relativeoffset + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.vertexAttribIFormat = function( + attribindex, size, type, relativeoffset) {}; + +/** + * @param {number} attribindex + * @param {number} bindingindex + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.vertexAttribBinding = function( + attribindex, bindingindex) {}; + +/** + * @param {number} bindingindex + * @param {number} divisor + * @return {undefined} + */ +WebGL2ComputeRenderingContext.prototype.vertexBindingDivisor = function( + bindingindex, divisor) {}; diff --git a/javascript/externs/web/whatwg_console.js b/javascript/externs/web/whatwg_console.js new file mode 100644 index 000000000000..a306a2eea90f --- /dev/null +++ b/javascript/externs/web/whatwg_console.js @@ -0,0 +1,152 @@ +/* + * Copyright 2019 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Definitions for console debugging facilities. + * https://console.spec.whatwg.org/ + * @externs + */ + +/** + * @constructor + * @see https://console.spec.whatwg.org/ + */ +function Console() {}; + +/** + * If condition is false, perform Logger("error", data). + * @param {*} condition + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.assert = function(condition, var_data) {}; + +/** + * @return {undefined} + */ +Console.prototype.clear = function() {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.debug = function(var_data) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.error = function(var_data) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.info = function(var_data) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.log = function(var_data) {}; + +/** + * @param {!Object} tabularData + * @param {*=} properties + * @return {undefined} + */ +Console.prototype.table = function(tabularData, properties) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.trace = function(var_data) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.warn = function(var_data) {}; + +/** + * @param {*} item + * @return {undefined} + */ +Console.prototype.dir = function(item) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.dirxml = function(var_data) {}; + +/** + * @param {string=} label + * @return {undefined} + */ +Console.prototype.count = function(label) {}; + +/** + * @param {string=} label + * @return {undefined} + */ +Console.prototype.countReset = function(label) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.group = function(var_data) {}; + +/** + * @param {...*} var_data + * @return {undefined} + */ +Console.prototype.groupCollapsed = function(var_data) {}; + +/** + * @return {undefined} + */ +Console.prototype.groupEnd = function() {}; + +/** + * @param {string} label + * @return {undefined} + */ +Console.prototype.time = function(label) {}; + +/** + * @param {string} label + * @param {...*} data + * @return {undefined} + */ +Console.prototype.timeLog = function(label, data) {}; + +/** + * @param {string} label + * @return {undefined} + */ +Console.prototype.timeEnd = function(label) {}; + +/** @type {!Console} */ +Window.prototype.console; + +/** + * @type {!Console} + * @suppress {duplicate} + */ +var console; diff --git a/javascript/externs/web/wicg_file_system_access.js b/javascript/externs/web/wicg_file_system_access.js new file mode 100644 index 000000000000..9fe8f922af70 --- /dev/null +++ b/javascript/externs/web/wicg_file_system_access.js @@ -0,0 +1,331 @@ +/* + * Copyright 2020 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * File System Access + * Draft Community Group Report, 18 November 2020 + * @externs + * @see https://wicg.github.io/file-system-access/ + */ + + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filesystemhandlepermissiondescriptor + */ +var FileSystemHandlePermissionDescriptor = function() {}; + +/** @type {undefined|string} */ +FileSystemHandlePermissionDescriptor.prototype.mode; + + +/** + * @typedef {string} + * @see https://wicg.github.io/file-system-access/#enumdef-filesystemhandlekind + */ +var FileSystemHandleKind; + + +/** + * @interface + * @see https://wicg.github.io/file-system-access/#api-filesystemhandle + */ +var FileSystemHandle = function() {}; + +/** @const {!FileSystemHandleKind} */ +FileSystemHandle.prototype.kind; + +/** @const {string} */ +FileSystemHandle.prototype.name; + +/** + * @param {!FileSystemHandle} other + * @return {!Promise} + */ +FileSystemHandle.prototype.isSameEntry = function(other) {}; + +/** + * @param {!FileSystemHandlePermissionDescriptor=} opt_descriptor + * @return {!Promise} + */ +FileSystemHandle.prototype.queryPermission = function(opt_descriptor) {}; + +/** + * @param {!FileSystemHandlePermissionDescriptor=} opt_descriptor + * @return {!Promise} + */ +FileSystemHandle.prototype.requestPermission = function(opt_descriptor) {}; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filesystemcreatewritableoptions + */ +var FileSystemCreateWritableOptions = function() {}; + +/** @type {undefined|boolean} */ +FileSystemCreateWritableOptions.prototype.keepExistingData; + + +/** + * @interface + * @extends {FileSystemHandle} + * @see https://wicg.github.io/file-system-access/#api-filesystemfilehandle + */ +var FileSystemFileHandle = function() {}; + +/** + * @return {!Promise} + */ +FileSystemFileHandle.prototype.getFile = function() {}; + +/** + * @param {!FileSystemCreateWritableOptions=} opt_options + * @return {!Promise} + */ +FileSystemFileHandle.prototype.createWritable = function(opt_options) {}; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filesystemgetfileoptions + */ +var FileSystemGetFileOptions = function() {}; + +/** @type {undefined|boolean} */ +FileSystemGetFileOptions.prototype.create; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filesystemgetdirectoryoptions + */ +var FileSystemGetDirectoryOptions = function() {}; + +/** @type {undefined|boolean} */ +FileSystemGetDirectoryOptions.prototype.create; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filesystemremoveoptions + */ +var FileSystemRemoveOptions = function() {}; + +/** @type {undefined|boolean} */ +FileSystemRemoveOptions.prototype.recursive; + + +/** + * @interface + * @extends {FileSystemHandle} + * @extends {AsyncIterable>} + * @see https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle + * @see https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle-asynciterable + */ +var FileSystemDirectoryHandle = function() {}; + +/** + * @param {string} name + * @param {!FileSystemGetFileOptions=} opt_options + * @return {!Promise} + */ +FileSystemDirectoryHandle.prototype.getFileHandle = function(name, opt_options) {}; + +/** + * @param {string} name + * @param {!FileSystemGetDirectoryOptions=} opt_options + * @return {!Promise} + */ +FileSystemDirectoryHandle.prototype.getDirectoryHandle = function(name, opt_options) {}; + +/** + * @param {string} name + * @param {!FileSystemRemoveOptions=} opt_options + * @return {!Promise} + */ +FileSystemDirectoryHandle.prototype.removeEntry = function(name, opt_options) {}; + +/** + * @param {!FileSystemHandle} possibleDescendant + * @return {!Promise>} + */ +FileSystemDirectoryHandle.prototype.resolve = function(possibleDescendant) {}; + +/** + * @return {!AsyncIterable>} + * @see https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle-asynciterable + */ +FileSystemDirectoryHandle.prototype.entries = function() {}; + +/** + * @return {!AsyncIterable} + * @see https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle-asynciterable + */ +FileSystemDirectoryHandle.prototype.values = function() {}; + +/** + * @return {!AsyncIterable} + * @see https://wicg.github.io/file-system-access/#api-filesystemdirectoryhandle-asynciterable + */ +FileSystemDirectoryHandle.prototype.keys = function() {}; + + +/** + * @typedef {string} + * @see https://wicg.github.io/file-system-access/#enumdef-writecommandtype + */ +var WriteCommandType; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-writeparams + */ +var WriteParams = function() {}; + +/** @type {!WriteCommandType} */ +WriteParams.prototype.type; + +/** @type {undefined|?number} */ +WriteParams.prototype.size; + +/** @type {undefined|?number} */ +WriteParams.prototype.position; + +/** @type {undefined|!BufferSource|!Blob|?string} */ +WriteParams.prototype.data; + + +/** + * @typedef {!BufferSource|!Blob|string|!WriteParams} + * @see https://wicg.github.io/file-system-access/#typedefdef-filesystemwritechunktype + */ +var FileSystemWriteChunkType; + + +/** + * @constructor + * @extends {WritableStream} + * @see https://wicg.github.io/file-system-access/#filesystemwritablefilestream + */ +var FileSystemWritableFileStream = function() {}; + +/** + * @param {!FileSystemWriteChunkType} data + * @return {!Promise} + */ +FileSystemWritableFileStream.prototype.write = function(data) {}; + +/** + * @param {number} position + * @return {!Promise} + */ +FileSystemWritableFileStream.prototype.seek = function(position) {}; + +/** + * @param {number} size + * @return {!Promise} + */ +FileSystemWritableFileStream.prototype.truncate = function(size) {}; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filepickeraccepttype + */ +var FilePickerAcceptType = function() {}; + +/** @type {undefined|string} */ +FilePickerAcceptType.prototype.description; + +/** @type {undefined|!Object)>} */ +FilePickerAcceptType.prototype.accept; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-filepickeroptions + */ +var FilePickerOptions = function() {}; + +/** @type {undefined|!Array} */ +FilePickerOptions.prototype.types; + +/** @type {undefined|boolean} */ +FilePickerOptions.prototype.excludeAcceptAllOption; + + +/** + * @record + * @struct + * @extends {FilePickerOptions} + * @see https://wicg.github.io/file-system-access/#dictdef-openfilepickeroptions + */ +var OpenFilePickerOptions = function() {}; + +/** @type {undefined|boolean} */ +OpenFilePickerOptions.prototype.multiple; + + +/** + * @record + * @struct + * @extends {FilePickerOptions} + * @see https://wicg.github.io/file-system-access/#dictdef-savefilepickeroptions + */ +var SaveFilePickerOptions = function() {}; + + +/** + * @record + * @struct + * @see https://wicg.github.io/file-system-access/#dictdef-directorypickeroptions + */ +var DirectoryPickerOptions = function() {}; + + +/** + * @param {!OpenFilePickerOptions=} opt_options + * @return {!Promise>} + * @see https://wicg.github.io/file-system-access/#local-filesystem + */ +Window.prototype.showOpenFilePicker = function(opt_options) {}; + + +/** + * @param {!SaveFilePickerOptions=} opt_options + * @return {!Promise} + * @see https://wicg.github.io/file-system-access/#local-filesystem + */ +Window.prototype.showSaveFilePicker = function(opt_options) {}; + + +/** + * @param {!DirectoryPickerOptions=} opt_options + * @return {!Promise} + * @see https://wicg.github.io/file-system-access/#local-filesystem + */ +Window.prototype.showDirectoryPicker = function(opt_options) {}; diff --git a/javascript/externs/web/wicg_floc.js b/javascript/externs/web/wicg_floc.js new file mode 100644 index 000000000000..5afc775a64a1 --- /dev/null +++ b/javascript/externs/web/wicg_floc.js @@ -0,0 +1,27 @@ +/* + * Copyright 2008 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview The spec of FLoC interface. + * @see https://github.com/WICG/floc + * @externs + */ + +/** + * @return {!Promise} + * @see https://github.com/WICG/floc + */ +Document.prototype.interestCohort = function() {}; diff --git a/javascript/externs/web/wicg_resizeobserver.js b/javascript/externs/web/wicg_resizeobserver.js new file mode 100644 index 000000000000..94fa3d1c3046 --- /dev/null +++ b/javascript/externs/web/wicg_resizeobserver.js @@ -0,0 +1,77 @@ +/* + * Copyright 2020 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @fileoverview The current draft spec of ResizeObserver. + * @see https://wicg.github.io/ResizeObserver/ + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver + * @externs + */ + +/** + * @typedef {function(!Array, !ResizeObserver)} + */ +var ResizeObserverCallback; + +/** + * @typedef {{box: string}} + */ +var ResizeObserverOptions; + +/** + * @constructor + * @param {!ResizeObserverCallback} callback + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/ResizeObserver + */ +function ResizeObserver(callback) {} + +/** + * @param {!Element} target + * @param {!ResizeObserverOptions=} opt_options + * @return {void} + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe + */ +ResizeObserver.prototype.observe = function(target, opt_options) {}; + +/** + * @param {!Element} target + * @return {void} + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/unobserve + */ +ResizeObserver.prototype.unobserve = function(target) {}; + +/** + * @return {void} + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/disconnect + */ +ResizeObserver.prototype.disconnect = function() {}; + +/** + * @interface + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry + */ +function ResizeObserverEntry() {} + +/** + * @const {!Element} + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/target + */ +ResizeObserverEntry.prototype.target; + +/** + * @const {!DOMRectReadOnly} + * @see https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry/contentRect + */ +ResizeObserverEntry.prototype.contentRect; diff --git a/javascript/externs/web/wicg_trust_token.js b/javascript/externs/web/wicg_trust_token.js new file mode 100644 index 000000000000..bb048f6d3ead --- /dev/null +++ b/javascript/externs/web/wicg_trust_token.js @@ -0,0 +1,89 @@ +/* + * Copyright 2008 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview The spec of Trust Token interface. + * @see https://github.com/WICG/trust-token-api + * @externs + */ + +/** + * Trust Tokens operation (issuance, signing, and redemption) is specified via + * an instance of the following parameters struct, provided via Fetch, XHR, or + * the iframe tag + * TODO(b/161890603): Trust Token: Remove the 'issuer' fields after Chrome 86 + * hits stable. + * @record + * @see https://docs.google.com/document/d/1qUjtKgA7nMv9YGMhi0xWKEojkSITKzGLdIcZgoz6ZkI + */ + +function TrustTokenAttributeType() {} + +/** + * Possible values: 'token-request', 'send-srr', 'srr-token-redemption' + * @type {string} + */ +TrustTokenAttributeType.prototype.type; + +/** @type {string|undefined} */ +TrustTokenAttributeType.prototype.issuer; + +/** @type {!Array|undefined} */ +TrustTokenAttributeType.prototype.issuers; + +/** + * Possible values: 'none', 'refresh' + * @type {string|undefined} + */ +TrustTokenAttributeType.prototype.refreshPolicy; + +/** + * Possible values: 'omit', 'include', 'headers-only' + * @type {string|undefined} + */ +TrustTokenAttributeType.prototype.signRequestData; + +/** @type {boolean|undefined} */ +TrustTokenAttributeType.prototype.includeTimestampHeader; + +/** @type {!Array|undefined} */ +TrustTokenAttributeType.prototype.additionalSignedHeaders; + +/** @type {string|undefined} */ +TrustTokenAttributeType.prototype.additionalSigningData; + +/** + * @type {?function(!TrustTokenAttributeType): void} + * @see https://docs.google.com/document/d/1qUjtKgA7nMv9YGMhi0xWKEojkSITKzGLdIcZgoz6ZkI. + */ +XMLHttpRequest.prototype.setTrustToken; + +/** + * @param {!string} issuer The trust token issuer, e.g. + * https://adservice.google.com + * @return {!Promise} + * @see https://docs.google.com/document/d/1TNnya6B8pyomDK2F1R9CL3dY10OAmqWlnCxsWyOBDVQ/edit + */ +Document.prototype.hasTrustToken = function(issuer) {}; + +/** @type {undefined|!TrustTokenAttributeType} */ +RequestInit.prototype.trustToken; + +/** + * @type {undefined|!TrustTokenAttributeType} + * @see https://github.com/WICG/trust-token-api#extension-iframe-activation + */ +HTMLIFrameElement.prototype.trustToken; diff --git a/javascript/externs/web/wicg_uach.js b/javascript/externs/web/wicg_uach.js new file mode 100644 index 000000000000..54c1b22d9be1 --- /dev/null +++ b/javascript/externs/web/wicg_uach.js @@ -0,0 +1,85 @@ +/* + * Copyright 2008 The Closure Compiler Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview The current draft spec of User Agent Client Hint interface. + * @see https://wicg.github.io/ua-client-hints/#interface + * @externs + */ + +/** + * @see https://wicg.github.io/ua-client-hints/#dictdef-navigatoruabrandversion + * @record + * @struct + */ +function NavigatorUABrandVersion() {} + +/** @type {string} */ +NavigatorUABrandVersion.prototype.brand; + +/** @type {string} */ +NavigatorUABrandVersion.prototype.version; + + +/** + * @see https://wicg.github.io/ua-client-hints/#dictdef-uadatavalues + * @record + * @struct + */ +function UADataValues() {} + +/** @type {string} */ +UADataValues.prototype.platform; + +/** @type {string} */ +UADataValues.prototype.platformVersion; + +/** @type {string} */ +UADataValues.prototype.architecture; + +/** @type {string} */ +UADataValues.prototype.model; + +/** @type {string} */ +UADataValues.prototype.uaFullVersion; + +/** + * @see https://wicg.github.io/ua-client-hints/#navigatoruadata + * @record + * @struct + */ +function NavigatorUAData() {} + +/** @type {!Array} */ +NavigatorUAData.prototype.brands; + +/** @type {boolean} */ +NavigatorUAData.prototype.mobile; + +/** @type {function(!Array) : !Promise} */ +NavigatorUAData.prototype.getHighEntropyValues; + +/** + * @type {?NavigatorUAData} + * @see https://wicg.github.io/ua-client-hints/#interface + */ +Navigator.prototype.userAgentData; + +/** + * @type {?NavigatorUAData} + * @see https://wicg.github.io/ua-client-hints/#interface + */ +WorkerNavigator.prototype.userAgentData; From cbc3dfa791a39641bd86099a9382005d57c53a51 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 11 Mar 2021 19:14:49 +0100 Subject: [PATCH 6/6] update web externs --- javascript/externs/web/chrome.js | 361 +-- javascript/externs/web/fetchapi.js | 30 +- javascript/externs/web/fileapi.js | 799 +++--- javascript/externs/web/flash.js | 12 +- javascript/externs/web/gecko_dom.js | 446 +--- javascript/externs/web/gecko_event.js | 31 +- javascript/externs/web/gecko_xml.js | 4 +- javascript/externs/web/html5.js | 2349 +++++++++++++---- javascript/externs/web/ie_css.js | 3 + javascript/externs/web/ie_dom.js | 337 +-- javascript/externs/web/ie_event.js | 8 +- javascript/externs/web/mediasource.js | 50 +- javascript/externs/web/streamsapi.js | 190 +- javascript/externs/web/url.js | 60 +- javascript/externs/web/w3c_anim_timing.js | 8 +- javascript/externs/web/w3c_batterystatus.js | 16 +- javascript/externs/web/w3c_css.js | 597 ++++- .../externs/web/w3c_device_sensor_event.js | 23 +- javascript/externs/web/w3c_dom1.js | 290 +- javascript/externs/web/w3c_dom2.js | 394 ++- javascript/externs/web/w3c_dom3.js | 352 +-- javascript/externs/web/w3c_dom4.js | 220 ++ javascript/externs/web/w3c_event.js | 97 +- javascript/externs/web/w3c_geolocation.js | 42 +- javascript/externs/web/w3c_indexeddb.js | 688 ++--- .../externs/web/w3c_navigation_timing.js | 237 +- javascript/externs/web/w3c_permissions.js | 28 +- javascript/externs/web/w3c_pointer_events.js | 33 +- javascript/externs/web/w3c_range.js | 103 +- .../externs/web/w3c_requestidlecallback.js | 6 +- javascript/externs/web/w3c_rtc.js | 1014 +++++-- javascript/externs/web/w3c_serviceworker.js | 212 +- javascript/externs/web/w3c_webcrypto.js | 430 ++- javascript/externs/web/w3c_xml.js | 234 +- javascript/externs/web/webgl.js | 1319 +++++---- javascript/externs/web/webkit_dom.js | 221 +- javascript/externs/web/webkit_event.js | 8 +- .../externs/web/webkit_notifications.js | 61 +- javascript/externs/web/webkit_usercontent.js | 3 +- javascript/externs/web/webstorage.js | 47 +- javascript/externs/web/whatwg_encoding.js | 9 +- javascript/externs/web/window.js | 151 +- 42 files changed, 7264 insertions(+), 4259 deletions(-) diff --git a/javascript/externs/web/chrome.js b/javascript/externs/web/chrome.js index d77b42e620c2..b80a97a6a3a5 100644 --- a/javascript/externs/web/chrome.js +++ b/javascript/externs/web/chrome.js @@ -65,246 +65,284 @@ Port.prototype.disconnect = function() {}; /** - * @see https://developer.chrome.com/extensions/events.html - * @constructor - * TODO(tbreisacher): Update *Listener methods to take {function()} - * instead of {!Function}. See discussion at go/ChromeEvent-TODO + * Base event type without listener methods. + * + * This interface exists for event interfaces whose addListeners() method takes + * more than one parameter. Those interfaces must inherit from this one, so they + * can supply their own custom listener method declarations. + * + * Event interfaces whose addListeners() method takes just one parameter should + * inherit from ChromeBaseEvent instead. It extends this interface. + * + * @see https://developer.chrome.com/extensions/events + * @interface */ -function ChromeEvent() {} +function ChromeBaseEventNoListeners() {} /** - * @param {!Function} callback - * @return {undefined} + * @param {!Array} rules + * @param {function(!Array): void=} callback + * @see https://developer.chrome.com/extensions/events#method-Event-addRules */ -ChromeEvent.prototype.addListener = function(callback) {}; +ChromeBaseEventNoListeners.prototype.addRules = function(rules, callback) {}; /** - * @param {!Function} callback - * @return {undefined} + * Returns currently registered rules. + * + * NOTE: The API allows the first argument to be omitted. + * That cannot be correctly represented here, so we end up incorrectly + * allowing 2 callback arguments. + * @param {!Array|function(!Array): void} ruleIdentifiersOrCb + * @param {function(!Array): void=} callback + * @see https://developer.chrome.com/extensions/events#method-Event-getRules */ -ChromeEvent.prototype.removeListener = function(callback) {}; +ChromeBaseEventNoListeners.prototype.getRules = + function(ruleIdentifiersOrCb, callback) {}; /** - * @param {!Function} callback - * @return {boolean} + * Removes currently registered rules. + * + * NOTE: The API allows the either or both arguments to be omitted. + * That cannot be correctly represented here, so we end up incorrectly + * allowing 2 callback arguments. + * @param {(!Array|function(): void)=} ruleIdentifiersOrCb + * @param {function(): void=} callback + * @see https://developer.chrome.com/extensions/events#method-Event-removeRules */ -ChromeEvent.prototype.hasListener = function(callback) {}; +ChromeBaseEventNoListeners.prototype.removeRules = + function(ruleIdentifiersOrCb, callback) {}; -/** @return {boolean} */ -ChromeEvent.prototype.hasListeners = function() {}; +/** + * @see https://developer.chrome.com/extensions/events#type-Rule + * @record + */ +function Rule() {} -// TODO(tbreisacher): Add the addRules, getRules, and removeRules methods? +/** @type {string|undefined} */ +Rule.prototype.id; -/** - * Event whose listeners take a string parameter. - * @constructor - */ -function ChromeStringEvent() {} +/** @type {!Array|undefined} */ +Rule.prototype.tags; -/** - * @param {function(string): void} callback - * @return {undefined} - */ -ChromeStringEvent.prototype.addListener = function(callback) {}; +/** @type {!Array<*>} */ +Rule.prototype.conditions; -/** - * @param {function(string): void} callback - * @return {undefined} - */ -ChromeStringEvent.prototype.removeListener = function(callback) {}; +/** @type {!Array<*>} */ +Rule.prototype.actions; + + +/** @type {number|undefined} */ +Rule.prototype.priority; /** - * @param {function(string): void} callback - * @return {boolean} + * @see https://developer.chrome.com/extensions/events#type-UrlFilter + * @record */ -ChromeStringEvent.prototype.hasListener = function(callback) {}; +function UrlFilter() {} -/** @return {boolean} */ -ChromeStringEvent.prototype.hasListeners = function() {}; +/** @type {string|undefined} */ +UrlFilter.prototype.hostContains; +/** @type {string|undefined} */ +UrlFilter.prototype.hostEquals; -/** - * Event whose listeners take a boolean parameter. - * @constructor - */ -function ChromeBooleanEvent() {} +/** @type {string|undefined} */ +UrlFilter.prototype.hostPrefix; -/** - * @param {function(boolean): void} callback - * @return {undefined} - */ -ChromeBooleanEvent.prototype.addListener = function(callback) {}; +/** @type {string|undefined} */ +UrlFilter.prototype.hostSuffix; -/** - * @param {function(boolean): void} callback - * @return {undefined} - */ -ChromeBooleanEvent.prototype.removeListener = function(callback) {}; +/** @type {string|undefined} */ +UrlFilter.prototype.pathContains; -/** - * @param {function(boolean): void} callback - * @return {boolean} - */ -ChromeBooleanEvent.prototype.hasListener = function(callback) {}; +/** @type {string|undefined} */ +UrlFilter.prototype.pathEquals; -/** - * @return {boolean} - */ -ChromeBooleanEvent.prototype.hasListeners = function() {}; +/** @type {string|undefined} */ +UrlFilter.prototype.pathPrefix; +/** @type {string|undefined} */ +UrlFilter.prototype.pathSuffix; -/** - * Event whose listeners take a number parameter. - * @constructor - */ -function ChromeNumberEvent() {} +/** @type {string|undefined} */ +UrlFilter.prototype.queryContains; -/** - * @param {function(number): void} callback - * @return {undefined} - */ -ChromeNumberEvent.prototype.addListener = function(callback) {}; +/** @type {string|undefined} */ +UrlFilter.prototype.queryEquals; -/** - * @param {function(number): void} callback - * @return {undefined} - */ -ChromeNumberEvent.prototype.removeListener = function(callback) {}; +/** @type {string|undefined} */ +UrlFilter.prototype.queryPrefix; -/** - * @param {function(number): void} callback - * @return {boolean} - */ -ChromeNumberEvent.prototype.hasListener = function(callback) {}; +/** @type {string|undefined} */ +UrlFilter.prototype.querySuffix; -/** - * @return {boolean} - */ -ChromeNumberEvent.prototype.hasListeners = function() {}; +/** @type {string|undefined} */ +UrlFilter.prototype.urlContains; +/** @type {string|undefined} */ +UrlFilter.prototype.urlEquals; + + +/** @type {string|undefined} */ +UrlFilter.prototype.urlMatches; + + +/** @type {string|undefined} */ +UrlFilter.prototype.originAndPathMatches; + + +/** @type {string|undefined} */ +UrlFilter.prototype.urlPrefix; + + +/** @type {string|undefined} */ +UrlFilter.prototype.urlSuffix; + + +/** @type {!Array|undefined} */ +UrlFilter.prototype.schemes; + + +/** @type {!Array<(number|!Array)>|undefined} */ +UrlFilter.prototype.ports; + /** - * Event whose listeners take an Object parameter. - * @constructor + * Base event type from which all others inherit. + * + * LISTENER must be a function type that returns void. + * + * @see https://developer.chrome.com/extensions/events + * @interface + * @extends {ChromeBaseEventNoListeners} + * @template LISTENER */ -function ChromeObjectEvent() {} +function ChromeBaseEvent() {} /** - * @param {function(!Object): void} callback Callback. + * @param {LISTENER} callback * @return {undefined} + * @see https://developer.chrome.com/extensions/events#method-Event-addListener */ -ChromeObjectEvent.prototype.addListener = function(callback) {}; +ChromeBaseEvent.prototype.addListener = function(callback) {}; /** - * @param {function(!Object): void} callback Callback. + * @param {LISTENER} callback * @return {undefined} + * @see https://developer.chrome.com/extensions/events#method-Event-removeListener */ -ChromeObjectEvent.prototype.removeListener = function(callback) {}; +ChromeBaseEvent.prototype.removeListener = function(callback) {}; /** - * @param {function(!Object): void} callback Callback. + * @param {LISTENER} callback * @return {boolean} + * @see https://developer.chrome.com/extensions/events#method-Event-hasListener */ -ChromeObjectEvent.prototype.hasListener = function(callback) {}; +ChromeBaseEvent.prototype.hasListener = function(callback) {}; /** * @return {boolean} + * @see https://developer.chrome.com/extensions/events#method-Event-hasListeners */ -ChromeObjectEvent.prototype.hasListeners = function() {}; - +ChromeBaseEvent.prototype.hasListeners = function() {}; /** - * Event whose listeners take a string array parameter. - * @constructor + * Event whose listeners take unspecified parameters. + * + * TODO(bradfordcsmith): Definitions using this type are failing to provide + * information about the parameters that will actually be supplied to the + * listener and should be updated to use a more specific event type. + * @see https://developer.chrome.com/extensions/events + * @interface + * @extends {ChromeBaseEvent} */ -function ChromeStringArrayEvent() {} +function ChromeEvent() {} /** - * @param {function(!Array): void} callback - * @return {undefined} + * Event whose listeners take no parameters. + * + * @see https://developer.chrome.com/extensions/events + * @interface + * @extends {ChromeBaseEvent} */ -ChromeStringArrayEvent.prototype.addListener = function(callback) {}; +function ChromeVoidEvent() {} /** - * @param {function(!Array): void} callback - * @return {undefined} + * Event whose listeners take a string parameter. + * @interface + * @extends {ChromeBaseEvent} */ -ChromeStringArrayEvent.prototype.removeListener = function(callback) {}; +function ChromeStringEvent() {} /** - * @param {function(!Array): void} callback - * @return {boolean} + * Event whose listeners take a boolean parameter. + * @interface + * @extends {ChromeBaseEvent} */ -ChromeStringArrayEvent.prototype.hasListener = function(callback) {}; - - -/** @return {boolean} */ -ChromeStringArrayEvent.prototype.hasListeners = function() {}; - +function ChromeBooleanEvent() {} /** - * Event whose listeners take two strings as parameters. - * @constructor + * Event whose listeners take a number parameter. + * @interface + * @extends {ChromeBaseEvent} */ -function ChromeStringStringEvent() {} +function ChromeNumberEvent() {} /** - * @param {function(string, string): void} callback - * @return {undefined} + * Event whose listeners take an Object parameter. + * @interface + * @extends {ChromeBaseEvent} */ -ChromeStringStringEvent.prototype.addListener = function(callback) {}; +function ChromeObjectEvent() {} /** - * @param {function(string, string): void} callback - * @return {undefined} + * Event whose listeners take a string array parameter. + * @interface + * @extends {ChromeBaseEvent)>} */ -ChromeStringStringEvent.prototype.removeListener = function(callback) {}; +function ChromeStringArrayEvent() {} /** - * @param {function(string, string): void} callback - * @return {boolean} + * Event whose listeners take two strings as parameters. + * @interface + * @extends {ChromeBaseEvent} */ -ChromeStringStringEvent.prototype.hasListener = function(callback) {}; - - -/** @return {boolean} */ -ChromeStringStringEvent.prototype.hasListeners = function() {}; - +function ChromeStringStringEvent() {} /** @@ -330,10 +368,18 @@ MessageSender.prototype.id; MessageSender.prototype.url; +/** @type {string|undefined} */ +MessageSender.prototype.nativeApplication; + + /** @type {string|undefined} */ MessageSender.prototype.tlsChannelId; +/** @type {string|undefined} */ +MessageSender.prototype.origin; + + /** * @enum {string} * @see https://developer.chrome.com/extensions/tabs#type-MutedInfoReason @@ -424,6 +470,10 @@ Tab.prototype.mutedInfo; Tab.prototype.url; +/** @type {string|undefined} */ +Tab.prototype.pendingUrl; + + // TODO: Make this field optional once dependent projects have been updated. /** @type {string} */ Tab.prototype.title; @@ -503,12 +553,8 @@ chrome.webstore.onDownloadProgress; chrome.runtime = {}; -/** @type {!Object|undefined} */ -chrome.runtime.lastError = {}; - - -/** @type {string|undefined} */ -chrome.runtime.lastError.message; +/** @type {{message:(string|undefined)}|undefined} */ +chrome.runtime.lastError; /** @@ -618,49 +664,6 @@ ChromeLoadTimes.prototype.wasAlternateProtocolAvailable; ChromeLoadTimes.prototype.connectionInfo; -/** - * Returns an object containing timing information. - * @return {!ChromeCsiInfo} - */ -chrome.csi = function() {}; - - - -/** - * The data object given by chrome.csi(). - * @constructor - */ -function ChromeCsiInfo() {} - - -/** - * Same as chrome.loadTimes().requestTime, if defined. - * Otherwise, gives the same value as chrome.loadTimes().startLoadTime. - * In milliseconds, truncated. - * @type {number} - */ -ChromeCsiInfo.prototype.startE; - - -/** - * Same as chrome.loadTimes().finishDocumentLoadTime but in milliseconds and - * truncated. - * @type {number} - */ -ChromeCsiInfo.prototype.onloadT; - - -/** - * The time since startE in milliseconds. - * @type {number} - */ -ChromeCsiInfo.prototype.pageT; - - -/** @type {number} */ -ChromeCsiInfo.prototype.tran; - - /** * @param {string|!ArrayBuffer|!Object} message * @see https://developers.google.com/native-client/devguide/tutorial diff --git a/javascript/externs/web/fetchapi.js b/javascript/externs/web/fetchapi.js index 6c4f93a62b10..79e42ae8de82 100644 --- a/javascript/externs/web/fetchapi.js +++ b/javascript/externs/web/fetchapi.js @@ -37,8 +37,8 @@ var ReferrerPolicy; /** - * @typedef {!Headers|!Array>|!IObject} - * @see https://fetch.spec.whatwg.org/#headersinit + * @typedef {!Headers|!Array>|!Object} + * @see https://fetch.spec.whatwg.org/#typedefdef-headersinit */ var HeadersInit; @@ -64,7 +64,7 @@ Headers.prototype.append = function(name, value) {}; */ Headers.prototype.delete = function(name) {}; -/** @return {!Iterator>} */ +/** @return {!IteratorIterable>} */ Headers.prototype.entries = function() {}; /** @@ -85,7 +85,7 @@ Headers.prototype.getAll = function(name) {}; */ Headers.prototype.has = function(name) {}; -/** @return {!Iterator} */ +/** @return {!IteratorIterable} */ Headers.prototype.keys = function() {}; /** @@ -103,7 +103,8 @@ Headers.prototype[Symbol.iterator] = function() {}; /** - * @typedef {!Blob|!BufferSource|!FormData|string} + * @typedef { + * !Blob|!BufferSource|!FormData|!URLSearchParams|!ReadableStream|string} * @see https://fetch.spec.whatwg.org/#bodyinit */ var BodyInit; @@ -208,6 +209,12 @@ Request.prototype.redirect; /** @type {string} */ Request.prototype.integrity; +/** @type {boolean} */ +Request.prototype.isHistoryNavigation; + +/** @type {(undefined|boolean)} */ +Request.prototype.keepalive; + /** @return {!Request} */ Request.prototype.clone = function() {}; @@ -248,6 +255,12 @@ RequestInit.prototype.redirect; /** @type {(undefined|string)} */ RequestInit.prototype.integrity; +/** @type {(undefined|!AbortSignal)} */ +RequestInit.prototype.signal; + +/** @type {(undefined|boolean)} */ +RequestInit.prototype.keepalive; + /** @type {(undefined|null)} */ RequestInit.prototype.window; @@ -418,3 +431,10 @@ Window.prototype.fetch = function(input, opt_init) {}; * @see https://fetch.spec.whatwg.org/#fetch-method */ WorkerGlobalScope.prototype.fetch = function(input, opt_init) {}; + +/** + * if WorkerOptions.type = 'module', it specifies how `scriptURL` is fetched. + * WorkerOptions is defined in html5.js. + * @type {!RequestCredentials|undefined} + */ +WorkerOptions.prototype.credentials; diff --git a/javascript/externs/web/fileapi.js b/javascript/externs/web/fileapi.js index 21095b9eeaf8..02861fd9810c 100644 --- a/javascript/externs/web/fileapi.js +++ b/javascript/externs/web/fileapi.js @@ -1,5 +1,5 @@ /* - * Copyright 2010 The Closure Compiler Authors + * Copyright 2019 The Closure Compiler Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,70 +13,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/** - * @fileoverview Definitions for objects in the File API, File Writer API, and - * File System API. Details of the API are at: - * http://www.w3.org/TR/FileAPI/ - * http://www.w3.org/TR/file-writer-api/ - * http://www.w3.org/TR/file-system-api/ - * - * @externs - * @author dbk@google.com (David Barrett-Kahn) - */ - /** - * @see http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob - * @param {Array=} opt_blobParts - * @param {Object=} opt_options - * @constructor - * @nosideeffects - */ -function Blob(opt_blobParts, opt_options) {} - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-size - * @type {number} - */ -Blob.prototype.size; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-type - * @type {string} - */ -Blob.prototype.type; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-slice - * @param {number=} start - * @param {number=} length - * @param {string=} opt_contentType - * @return {!Blob} - * @nosideeffects + * @fileoverview Definitions for file api implemented in + * various browsers but not part of https://www.w3.org/TR/FileAPI. + * @externs */ -Blob.prototype.slice = function(start, length, opt_contentType) {}; /** * This replaces Blob.slice in Chrome since WebKit revision 84005. * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html * @param {number=} start * @param {number=} end - * @param {string=} opt_contentType + * @param {string=} contentType * @return {!Blob} * @nosideeffects */ -Blob.prototype.webkitSlice = function(start, end, opt_contentType) {}; +Blob.prototype.webkitSlice = function(start, end, contentType) {}; /** * This replaces Blob.slice in Firefox. * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html * @param {number=} start * @param {number=} end - * @param {string=} opt_contentType + * @param {string=} contentType * @return {!Blob} * @nosideeffects */ -Blob.prototype.mozSlice = function(start, end, opt_contentType) {}; +Blob.prototype.mozSlice = function(start, end, contentType) {}; /** * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface @@ -125,7 +89,6 @@ WebKitBlobBuilder.prototype.append = function(data, endings) {}; */ WebKitBlobBuilder.prototype.getBlob = function(contentType) {}; - /** * @record * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary @@ -138,7 +101,6 @@ FileSystemFlags.prototype.create; /** @type {(undefined|boolean)} */ FileSystemFlags.prototype.exclusive; - /** * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface * @constructor @@ -160,8 +122,8 @@ DirectoryEntry.prototype.createReader = function() {}; * @param {function(!FileError)=} errorCallback * @return {undefined} */ -DirectoryEntry.prototype.getFile = function(path, options, successCallback, - errorCallback) {}; +DirectoryEntry.prototype.getFile = function( + path, options, successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory @@ -171,8 +133,8 @@ DirectoryEntry.prototype.getFile = function(path, options, successCallback, * @param {function(!FileError)=} errorCallback * @return {undefined} */ -DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, - errorCallback) {}; +DirectoryEntry.prototype.getDirectory = function( + path, options, successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively @@ -180,8 +142,8 @@ DirectoryEntry.prototype.getDirectory = function(path, options, successCallback, * @param {function(!FileError)=} errorCallback * @return {undefined} */ -DirectoryEntry.prototype.removeRecursively = function(successCallback, - errorCallback) {}; +DirectoryEntry.prototype.removeRecursively = function( + successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface @@ -195,8 +157,8 @@ function DirectoryReader() {}; * @param {function(!FileError)=} errorCallback * @return {undefined} */ -DirectoryReader.prototype.readEntries = function(successCallback, - errorCallback) {}; +DirectoryReader.prototype.readEntries = function( + successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#the-entry-interface @@ -242,8 +204,8 @@ Entry.prototype.filesystem; * @param {function(!FileError)=} errorCallback * @return {undefined} */ -Entry.prototype.moveTo = function(parent, newName, successCallback, - errorCallback) {}; +Entry.prototype.moveTo = function( + parent, newName, successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo @@ -253,8 +215,8 @@ Entry.prototype.moveTo = function(parent, newName, successCallback, * @param {function(!FileError)=} errorCallback * @return {undefined} */ -Entry.prototype.copyTo = function(parent, newName, successCallback, - errorCallback) {}; +Entry.prototype.copyTo = function( + parent, newName, successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL @@ -288,47 +250,18 @@ Entry.prototype.getMetadata = function(successCallback, errorCallback) {}; Entry.prototype.getParent = function(successCallback, errorCallback) {}; /** - * @see http://www.w3.org/TR/FileAPI/#dfn-file - * @param {!Array=} opt_contents - * @param {string=} opt_name - * @param {{type: (string|undefined), lastModified: (number|undefined)}=} - * opt_properties - * @constructor - * @extends {Blob} - */ -function File(opt_contents, opt_name, opt_properties) {} - -/** - * Chrome uses this instead of name. - * @deprecated Use name instead. - * @type {string} - */ -File.prototype.fileName; - -/** - * Chrome uses this instead of size. - * @deprecated Use size instead. - * @type {string} + * @return {?Entry} The Entry corresponding to this item, or null. Note that + * despite its name,this method only works in Chrome, and will eventually + * be renamed to {@code getAsEntry}. + * @nosideeffects */ -File.prototype.fileSize; +DataTransferItem.prototype.webkitGetAsEntry = function() {}; /** - * @see http://www.w3.org/TR/FileAPI/#dfn-name + * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath * @type {string} */ -File.prototype.name; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate - * @type {Date} - */ -File.prototype.lastModifiedDate; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-lastModified - * @type {number} - */ -File.prototype.lastModified; +File.prototype.webkitRelativePath; /** * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface @@ -362,111 +295,111 @@ function FileError() {} /** * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR - * @type {number} + * @const {number} */ -FileError.prototype.NOT_FOUND_ERR = 1; +FileError.prototype.NOT_FOUND_ERR; -/** @type {number} */ -FileError.NOT_FOUND_ERR = 1; +/** @const {number} */ +FileError.NOT_FOUND_ERR; /** * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR - * @type {number} + * @const {number} */ -FileError.prototype.SECURITY_ERR = 2; +FileError.prototype.SECURITY_ERR; -/** @type {number} */ -FileError.SECURITY_ERR = 2; +/** @const {number} */ +FileError.SECURITY_ERR; /** * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR - * @type {number} + * @const {number} */ -FileError.prototype.ABORT_ERR = 3; +FileError.prototype.ABORT_ERR; -/** @type {number} */ -FileError.ABORT_ERR = 3; +/** @const {number} */ +FileError.ABORT_ERR; /** * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR - * @type {number} + * @const {number} */ -FileError.prototype.NOT_READABLE_ERR = 4; +FileError.prototype.NOT_READABLE_ERR; -/** @type {number} */ -FileError.NOT_READABLE_ERR = 4; +/** @const {number} */ +FileError.NOT_READABLE_ERR; /** * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR - * @type {number} + * @const {number} */ -FileError.prototype.ENCODING_ERR = 5; +FileError.prototype.ENCODING_ERR; -/** @type {number} */ -FileError.ENCODING_ERR = 5; +/** @const {number} */ +FileError.ENCODING_ERR; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR - * @type {number} + * @const {number} */ -FileError.prototype.NO_MODIFICATION_ALLOWED_ERR = 6; +FileError.prototype.NO_MODIFICATION_ALLOWED_ERR; -/** @type {number} */ -FileError.NO_MODIFICATION_ALLOWED_ERR = 6; +/** @const {number} */ +FileError.NO_MODIFICATION_ALLOWED_ERR; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR - * @type {number} + * @const {number} */ -FileError.prototype.INVALID_STATE_ERR = 7; +FileError.prototype.INVALID_STATE_ERR; -/** @type {number} */ -FileError.INVALID_STATE_ERR = 7; +/** @const {number} */ +FileError.INVALID_STATE_ERR; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR - * @type {number} + * @const {number} */ -FileError.prototype.SYNTAX_ERR = 8; +FileError.prototype.SYNTAX_ERR; -/** @type {number} */ -FileError.SYNTAX_ERR = 8; +/** @const {number} */ +FileError.SYNTAX_ERR; /** * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR - * @type {number} + * @const {number} */ -FileError.prototype.INVALID_MODIFICATION_ERR = 9; +FileError.prototype.INVALID_MODIFICATION_ERR; -/** @type {number} */ -FileError.INVALID_MODIFICATION_ERR = 9; +/** @const {number} */ +FileError.INVALID_MODIFICATION_ERR; /** * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR - * @type {number} + * @const {number} */ -FileError.prototype.QUOTA_EXCEEDED_ERR = 10; +FileError.prototype.QUOTA_EXCEEDED_ERR; -/** @type {number} */ -FileError.QUOTA_EXCEEDED_ERR = 10; +/** @const {number} */ +FileError.QUOTA_EXCEEDED_ERR; /** * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR - * @type {number} + * @const {number} */ -FileError.prototype.TYPE_MISMATCH_ERR = 11; +FileError.prototype.TYPE_MISMATCH_ERR; -/** @type {number} */ -FileError.TYPE_MISMATCH_ERR = 11; +/** @const {number} */ +FileError.TYPE_MISMATCH_ERR; /** * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR - * @type {number} + * @const {number} */ -FileError.prototype.PATH_EXISTS_ERR = 12; +FileError.prototype.PATH_EXISTS_ERR; -/** @type {number} */ -FileError.PATH_EXISTS_ERR = 12; +/** @const {number} */ +FileError.PATH_EXISTS_ERR; /** * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception @@ -476,151 +409,6 @@ FileError.PATH_EXISTS_ERR = 12; */ FileError.prototype.code; -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-filereader - * @constructor - * @implements {EventTarget} - */ -function FileReader() {} - -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -FileReader.prototype.addEventListener = function(type, listener, opt_useCapture) - {}; - -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -FileReader.prototype.removeEventListener = function(type, listener, - opt_useCapture) {}; - -/** - * @override - * @return {boolean} - */ -FileReader.prototype.dispatchEvent = function(evt) {}; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBuffer - * @param {!Blob} blob - * @return {undefined} - */ -FileReader.prototype.readAsArrayBuffer = function(blob) {}; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringAsync - * @param {!Blob} blob - * @return {undefined} - */ -FileReader.prototype.readAsBinaryString = function(blob) {}; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-readAsText - * @param {!Blob} blob - * @param {string=} encoding - * @return {undefined} - */ -FileReader.prototype.readAsText = function(blob, encoding) {}; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURL - * @param {!Blob} blob - * @return {undefined} - */ -FileReader.prototype.readAsDataURL = function(blob) {}; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-abort - * @return {undefined} - */ -FileReader.prototype.abort = function() {}; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-empty - * @type {number} - */ -FileReader.prototype.EMPTY = 0; - -/** @type {number} */ -FileReader.EMPTY = 0; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-loading - * @type {number} - */ -FileReader.prototype.LOADING = 1; - -/** @type {number} */ -FileReader.LOADING = 1; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-done - * @type {number} - */ -FileReader.prototype.DONE = 2; - -/** @type {number} */ -FileReader.DONE = 2; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-readystate - * @type {number} - */ -FileReader.prototype.readyState; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-result - * @type {string|Blob|ArrayBuffer} - */ -FileReader.prototype.result; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-error - * @type {FileError} - */ -FileReader.prototype.error; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-onloadstart - * @type {?function(!ProgressEvent)} - */ -FileReader.prototype.onloadstart; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-onprogress - * @type {?function(!ProgressEvent)} - */ -FileReader.prototype.onprogress; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-onload - * @type {?function(!ProgressEvent)} - */ -FileReader.prototype.onload; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-onabort - * @type {?function(!ProgressEvent)} - */ -FileReader.prototype.onabort; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-onerror - * @type {?function(!ProgressEvent)} - */ -FileReader.prototype.onerror; - -/** - * @see http://www.w3.org/TR/FileAPI/#dfn-onloadend - * @type {?function(!ProgressEvent)} - */ -FileReader.prototype.onloadend; - /** * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver * @constructor @@ -635,21 +423,21 @@ FileSaver.prototype.abort = function() {}; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT - * @type {number} + * @const {number} */ -FileSaver.prototype.INIT = 0; +FileSaver.prototype.INIT; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING - * @type {number} + * @const {number} */ -FileSaver.prototype.WRITING = 1; +FileSaver.prototype.WRITING; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE - * @type {number} + * @const {number} */ -FileSaver.prototype.DONE = 2; +FileSaver.prototype.DONE; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState @@ -665,37 +453,37 @@ FileSaver.prototype.error; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart - * @type {?function(!ProgressEvent)} + * @type {?function(!ProgressEvent)} */ FileSaver.prototype.onwritestart; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress - * @type {?function(!ProgressEvent)} + * @type {?function(!ProgressEvent)} */ FileSaver.prototype.onprogress; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite - * @type {?function(!ProgressEvent)} + * @type {?function(!ProgressEvent)} */ FileSaver.prototype.onwrite; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort - * @type {?function(!ProgressEvent)} + * @type {?function(!ProgressEvent)} */ FileSaver.prototype.onabort; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror - * @type {?function(!ProgressEvent)} + * @type {?function(!ProgressEvent)} */ FileSaver.prototype.onerror; /** * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend - * @type {?function(!ProgressEvent)} + * @type {?function(!ProgressEvent)} */ FileSaver.prototype.onwriteend; @@ -785,15 +573,15 @@ Metadata.prototype.size; /** * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY - * @type {number} -*/ -Window.prototype.TEMPORARY = 0; + * @const {number} + */ +Window.prototype.TEMPORARY; /** * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT - * @type {number} -*/ -Window.prototype.PERSISTENT = 1; + * @const {number} + */ +Window.prototype.PERSISTENT; /** * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem @@ -813,8 +601,8 @@ function requestFileSystem(type, size, successCallback, errorCallback) {} * @param {function(!FileError)=} errorCallback * @return {undefined} */ -Window.prototype.requestFileSystem = function(type, size, successCallback, - errorCallback) {}; +Window.prototype.requestFileSystem = function( + type, size, successCallback, errorCallback) {}; /** * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI @@ -832,8 +620,8 @@ function resolveLocalFileSystemURI(uri, successCallback, errorCallback) {} * @param {function(!FileError)=} errorCallback * @return {undefined} */ -Window.prototype.resolveLocalFileSystemURI = function(uri, successCallback, - errorCallback) {} +Window.prototype.resolveLocalFileSystemURI = + function(uri, successCallback, errorCallback) {} /** * This has replaced requestFileSystem in Chrome since WebKit revision 84224. @@ -878,8 +666,8 @@ function webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {} * @param {function(!FileError)=} errorCallback * @return {undefined} */ -Window.prototype.webkitResolveLocalFileSystemURI = function(uri, successCallback, - errorCallback) {} +Window.prototype.webkitResolveLocalFileSystemURI = function( + uri, successCallback, errorCallback) {} // WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope. // There are three APIs for this: the old specced API, the new specced API, and @@ -918,9 +706,9 @@ Window.prototype.revokeObjectURL = function(url) {}; * This has been replaced by URL in Chrome since WebKit revision 75739. * @constructor * @param {string} urlString - * @param {string=} opt_base + * @param {string=} base */ -function webkitURL(urlString, opt_base) {} +function webkitURL(urlString, base) {} /** * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL @@ -944,15 +732,15 @@ function StorageInfo() {} /** * @see https://developers.google.com/chrome/whitepapers/storage - * @type {number} + * @const {number} * */ -StorageInfo.prototype.TEMPORARY = 0; +StorageInfo.prototype.TEMPORARY; /** * @see https://developers.google.com/chrome/whitepapers/storage - * @type {number} + * @const {number} */ -StorageInfo.prototype.PERSISTENT = 1; +StorageInfo.prototype.PERSISTENT; /** * @see https://developers.google.com/chrome/whitepapers/storage#requestQuota @@ -962,8 +750,8 @@ StorageInfo.prototype.PERSISTENT = 1; * @param {function(!DOMException)=} errorCallback * @return {undefined} */ -StorageInfo.prototype.requestQuota = function(type, size, successCallback, - errorCallback) {}; +StorageInfo.prototype.requestQuota = function( + type, size, successCallback, errorCallback) {}; /** * @see https://developers.google.com/chrome/whitepapers/storage#queryUsageAndQuota @@ -972,8 +760,8 @@ StorageInfo.prototype.requestQuota = function(type, size, successCallback, * @param {function(!DOMException)=} errorCallback * @return {undefined} */ -StorageInfo.prototype.queryUsageAndQuota = function(type, successCallback, - errorCallback) {}; +StorageInfo.prototype.queryUsageAndQuota = function( + type, successCallback, errorCallback) {}; /** * @see https://developers.google.com/chrome/whitepapers/storage @@ -989,21 +777,20 @@ function StorageQuota() {} /** * @param {number} size - * @param {function(number)=} opt_successCallback - * @param {function(!DOMException)=} opt_errorCallback + * @param {function(number)=} successCallback + * @param {function(!DOMException)=} errorCallback * @return {undefined} */ -StorageQuota.prototype.requestQuota = function(size, opt_successCallback, - opt_errorCallback) {}; +StorageQuota.prototype.requestQuota = function( + size, successCallback, errorCallback) {}; /** * @param {function(number, number)} successCallback - * @param {function(!DOMException)=} opt_errorCallback + * @param {function(!DOMException)=} errorCallback * @return {undefined} */ -StorageQuota.prototype.queryUsageAndQuota = function(successCallback, - opt_errorCallback) {}; - +StorageQuota.prototype.queryUsageAndQuota = function( + successCallback, errorCallback) {}; /** * @type {!StorageQuota} @@ -1016,3 +803,357 @@ Navigator.prototype.webkitPersistentStorage; * @see https://developer.chrome.com/apps/offline_storage */ Navigator.prototype.webkitTemporaryStorage; + + +/** + * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync + * @constructor + */ +function FileWriterSync() {} + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position + * @type {number} + * @const + */ +FileWriterSync.prototype.position; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length + * @type {number} + * @const + */ +FileWriterSync.prototype.length; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write + * @param {!Blob} blob + * @return {undefined} + */ +FileWriterSync.prototype.write = function(blob) {}; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek + * @param {number} offset + * @return {undefined} + */ +FileWriterSync.prototype.seek = function(offset) {}; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate + * @param {number} size + * @return {undefined} + */ +FileWriterSync.prototype.truncate = function(size) {}; + +/** + * LocalFileSystemSync interface, implemented by WorkerGlobalScope. + * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync + * @constructor + */ +function LocalFileSystemSync() {} + +/** + * @see http://www.w3.org/TR/file-system-api/ + * #the-synchronous-filesystem-interface + * @constructor + */ +function FileSystemSync() {} + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name + * @type {string} + * @const + */ +FileSystemSync.prototype.name; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root + * @type {!DirectoryEntrySync} + * @const + */ +FileSystemSync.prototype.root; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size + * @param {number} type + * @param {number} size + * @return {!FileSystemSync} + */ +function requestFileSystemSync(type, size) {} + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size + * @param {number} type + * @param {number} size + * @return {!FileSystemSync} + */ +function webkitRequestFileSystemSync(type, size) {} + +/** + * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface + * @constructor + */ +function EntrySync() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile + * @type {boolean} + * @const + */ +EntrySync.prototype.isFile; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory + * @type {boolean} + * @const + */ +EntrySync.prototype.isDirectory; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name + * @type {string} + * @const + */ +EntrySync.prototype.name; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath + * @type {string} + * @const + */ +EntrySync.prototype.fullPath; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem + * @type {!FileSystemSync} + * @const + */ +EntrySync.prototype.filesystem; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo + * @param {!DirectoryEntrySync} parent + * @param {string=} newName + * @return {!EntrySync} + */ +EntrySync.prototype.moveTo = function(parent, newName) {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo + * @param {!DirectoryEntrySync} parent + * @param {string=} newName + * @return {!EntrySync} + */ +EntrySync.prototype.copyTo = function(parent, newName) {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL + * @param {string=} mimeType + * @return {string} + */ +EntrySync.prototype.toURL = function(mimeType) {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove + * @return {undefined} + */ +EntrySync.prototype.remove = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata + * @return {!Metadata} + */ +EntrySync.prototype.getMetadata = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent + * @return {!DirectoryEntrySync} + */ +EntrySync.prototype.getParent = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface + * @constructor + * @extends {EntrySync} + */ +function DirectoryEntrySync() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader + * @return {!DirectoryReaderSync} + */ +DirectoryEntrySync.prototype.createReader = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile + * @param {string} path + * @param {Object=} options + * @return {!FileEntrySync} + */ +DirectoryEntrySync.prototype.getFile = function(path, options) {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory + * @param {string} path + * @param {Object=} options + * @return {!DirectoryEntrySync} + */ +DirectoryEntrySync.prototype.getDirectory = function(path, options) {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively + * @return {undefined} + */ +DirectoryEntrySync.prototype.removeRecursively = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface + * @constructor + */ +function DirectoryReaderSync() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries + * @return {!Array} + */ +DirectoryReaderSync.prototype.readEntries = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface + * @constructor + * @extends {EntrySync} + */ +function FileEntrySync() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter + * @return {!FileWriterSync} + */ +FileEntrySync.prototype.createWriter = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file + * @return {!File} + */ +FileEntrySync.prototype.file = function() {}; + +/** + * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception + * @constructor + */ +function FileException() {} + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR + * @type {number} + */ +FileException.prototype.NOT_FOUND_ERR; + +/** @type {number} */ +FileException.NOT_FOUND_ERR; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR + * @type {number} + */ +FileException.prototype.SECURITY_ERR; + +/** @type {number} */ +FileException.SECURITY_ERR; + +/** + * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR + * @type {number} + */ +FileException.prototype.ABORT_ERR; + +/** @type {number} */ +FileException.ABORT_ERR; + +/** + * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR + * @type {number} + */ +FileException.prototype.NOT_READABLE_ERR; + +/** @type {number} */ +FileException.NOT_READABLE_ERR; + +/** + * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR + * @type {number} + */ +FileException.prototype.ENCODING_ERR; + +/** @type {number} */ +FileException.ENCODING_ERR; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR + * @type {number} + */ +FileException.prototype.NO_MODIFICATION_ALLOWED_ERR; + +/** @type {number} */ +FileException.NO_MODIFICATION_ALLOWED_ERR; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR + * @type {number} + */ +FileException.prototype.INVALID_STATE_ERR; + +/** @type {number} */ +FileException.INVALID_STATE_ERR; + +/** + * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR + * @type {number} + */ +FileException.prototype.SYNTAX_ERR; + +/** @type {number} */ +FileException.SYNTAX_ERR; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR + * @type {number} + */ +FileException.prototype.INVALID_MODIFICATION_ERR; + +/** @type {number} */ +FileException.INVALID_MODIFICATION_ERR; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR + * @type {number} + */ +FileException.prototype.QUOTA_EXCEEDED_ERR; + +/** @type {number} */ +FileException.QUOTA_EXCEEDED_ERR; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR + * @type {number} + */ +FileException.prototype.TYPE_MISMATCH_ERR; + +/** @type {number} */ +FileException.TYPE_MISMATCH_ERR; + +/** + * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR + * @type {number} + */ +FileException.prototype.PATH_EXISTS_ERR; + +/** @type {number} */ +FileException.PATH_EXISTS_ERR; + +/** + * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception + * @type {number} + */ +FileException.prototype.code; diff --git a/javascript/externs/web/flash.js b/javascript/externs/web/flash.js index c9e4d886f86a..014f3481af0a 100644 --- a/javascript/externs/web/flash.js +++ b/javascript/externs/web/flash.js @@ -39,12 +39,12 @@ HTMLObjectElement.prototype.CallFunction = function(xmlString) {}; * Returns the value of the Flash variable specified by varName or null if the * variable does not exist. * @param {string} varName The variable name. - * @return {string?} The variable value. + * @return {?string} The variable value. */ HTMLObjectElement.prototype.GetVariable = function(varName) {}; /** - * Activates the frame number specified by {@code frameNumber} in the current + * Activates the frame number specified by `frameNumber` in the current * movie. * @param {number} frameNumber A non-negative integer frame number. * @return {undefined} @@ -57,8 +57,8 @@ HTMLObjectElement.prototype.GotoFrame = function(frameNumber) {}; HTMLObjectElement.prototype.IsPlaying = function() {}; /** - * Loads the movie identified by {@code url} to the layer specified by {@code - * layerNumber}. + * Loads the movie identified by `url` to the layer specified by + * `layerNumber`. * @param {number} layerNumber The layer number. * @param {string} url The movie URL. * @return {undefined} @@ -136,7 +136,7 @@ HTMLObjectElement.prototype.Zoom = function(percent) {}; // TellTarget Methods. /** - * Executes the action in the timeline specified by {@code target} in the + * Executes the action in the timeline specified by `target` in the * specified frame. * @param {string} target The timeline. * @param {number} frameNumber The frame number. @@ -145,7 +145,7 @@ HTMLObjectElement.prototype.Zoom = function(percent) {}; HTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {}; /** - * Executes the action in the timeline specified by {@code target} in the + * Executes the action in the timeline specified by `target` in the * specified frame. * @param {string} target The timeline. * @param {string} label The frame label. diff --git a/javascript/externs/web/gecko_dom.js b/javascript/externs/web/gecko_dom.js index 6e179cddf8c5..655640cee46b 100644 --- a/javascript/externs/web/gecko_dom.js +++ b/javascript/externs/web/gecko_dom.js @@ -47,12 +47,6 @@ Window.prototype.Components; */ Window.prototype.content; -/** - * @type {boolean} - * @see https://developer.mozilla.org/en/DOM/window.closed - */ -Window.prototype.closed; - /** @see https://developer.mozilla.org/en/DOM/window.controllers */ Window.prototype.controllers; @@ -72,19 +66,6 @@ Window.prototype.dialogArguments; /** @see https://developer.mozilla.org/en/DOM/window.directories */ Window.prototype.directories; -/** - * @type {HTMLObjectElement|HTMLIFrameElement|null} - * @see https://developer.mozilla.org/en/DOM/window.frameElement - */ -Window.prototype.frameElement; - -/** - * Allows lookup of frames by index or by name. - * @type {?Object} - * @see https://developer.mozilla.org/en/DOM/window.frames - */ -Window.prototype.frames; - /** * @type {boolean} * @see https://developer.mozilla.org/en/DOM/window.fullScreen @@ -95,76 +76,77 @@ Window.prototype.fullScreen; * @return {!Promise} * @see http://www.w3.org/TR/battery-status/ */ -Navigator.prototype.getBattery = function() {}; - -/** - * @see https://developer.mozilla.org/en/DOM/Storage#globalStorage - */ -Window.prototype.globalStorage; - -/** - * @type {!History} - * @suppress {duplicate} - * @see https://developer.mozilla.org/en/DOM/window.history - */ -var history; - -/** - * Returns the number of frames (either frame or iframe elements) in the - * window. - * - * @type {number} - * @see https://developer.mozilla.org/en/DOM/window.length - */ -Window.prototype.length; - -/** - * Location has an exception in the DeclaredGlobalExternsOnWindow pass - * so we have to manually include it: - * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116 - * - * @type {!Location} - * @implicitCast - * @see https://developer.mozilla.org/en/DOM/window.location - */ -Window.prototype.location; - -/** - * @see https://developer.mozilla.org/en/DOM/window.locationbar - */ -Window.prototype.locationbar; - -/** - * @see https://developer.mozilla.org/en/DOM/window.menubar - */ -Window.prototype.menubar; - -/** - * @type {string} - * @see https://developer.mozilla.org/en/DOM/window.name - */ -Window.prototype.name; - -/** - * @type {Navigator} - * @see https://developer.mozilla.org/en/DOM/window.navigator - */ -Window.prototype.navigator; - -/** - * @type {?Window} - * @see https://developer.mozilla.org/en/DOM/window.opener - */ -Window.prototype.opener; - -/** - * @type {!Window} - * @see https://developer.mozilla.org/en/DOM/window.parent - */ -Window.prototype.parent; - -/** @see https://developer.mozilla.org/en/DOM/window.personalbar */ -Window.prototype.personalbar; + Navigator.prototype.getBattery = function() {}; + + /** + * @see https://developer.mozilla.org/en/DOM/Storage#globalStorage + */ + Window.prototype.globalStorage; + + /** + * @type {!History} + * @suppress {duplicate} + * @see https://developer.mozilla.org/en/DOM/window.history + */ + var history; + + /** + * Returns the number of frames (either frame or iframe elements) in the + * window. + * + * @type {number} + * @see https://developer.mozilla.org/en/DOM/window.length + */ + Window.prototype.length; + + /** + * Location has an exception in the DeclaredGlobalExternsOnWindow pass + * so we have to manually include it: + * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116 + * + * @type {!Location} + * @implicitCast + * @see https://developer.mozilla.org/en/DOM/window.location + */ + Window.prototype.location; + + /** + * @see https://developer.mozilla.org/en/DOM/window.locationbar + */ + Window.prototype.locationbar; + + /** + * @see https://developer.mozilla.org/en/DOM/window.menubar + */ + Window.prototype.menubar; + + /** + * @type {string} + * @see https://developer.mozilla.org/en/DOM/window.name + */ + Window.prototype.name; + + /** + * @type {Navigator} + * @see https://developer.mozilla.org/en/DOM/window.navigator + */ + Window.prototype.navigator; + + /** + * @type {?Window} + * @see https://developer.mozilla.org/en/DOM/window.opener + */ + Window.prototype.opener; + + /** + * @type {!Window} + * @see https://developer.mozilla.org/en/DOM/window.parent + */ + Window.prototype.parent; + + /** @see https://developer.mozilla.org/en/DOM/window.personalbar */ + Window.prototype.personalbar; + /** @see https://developer.mozilla.org/en/DOM/window.pkcs11 */ Window.prototype.pkcs11; @@ -172,9 +154,6 @@ Window.prototype.pkcs11; /** @see https://developer.mozilla.org/en/DOM/window */ Window.prototype.returnValue; -/** @see https://developer.mozilla.org/en/DOM/window.scrollbars */ -Window.prototype.scrollbars; - /** * @type {number} * @see https://developer.mozilla.org/En/DOM/window.scrollMaxX @@ -187,59 +166,15 @@ Window.prototype.scrollMaxX; */ Window.prototype.scrollMaxY; -/** - * @type {!Window} - * @see https://developer.mozilla.org/en/DOM/window.self - */ -Window.prototype.self; - -/** @see https://developer.mozilla.org/en/DOM/Storage#sessionStorage */ -Window.prototype.sessionStorage; - /** @see https://developer.mozilla.org/en/DOM/window.sidebar */ Window.prototype.sidebar; -/** - * @type {?string} - * @see https://developer.mozilla.org/en/DOM/window.status - */ -Window.prototype.status; - -/** @see https://developer.mozilla.org/en/DOM/window.statusbar */ -Window.prototype.statusbar; - -/** @see https://developer.mozilla.org/en/DOM/window.toolbar */ -Window.prototype.toolbar; - -/** - * @type {!Window} - * @see https://developer.mozilla.org/en/DOM/window.self - */ -Window.prototype.top; - -/** - * @type {!Window} - * @see https://developer.mozilla.org/en/DOM/window.self - */ -Window.prototype.window; - /** * @param {*} message * @see https://developer.mozilla.org/en/DOM/window.alert * @return {undefined} */ -Window.prototype.alert = function(message) {}; - -/** - * Decodes a string of data which has been encoded using base-64 encoding. - * - * @param {string} encodedData - * @return {string} - * @see https://developer.mozilla.org/en/DOM/window.atob - * @nosideeffects - */ -function atob(encodedData) {} - + Window.prototype.alert = function(message) {}; /** * @see https://developer.mozilla.org/en/DOM/window.back * @return {undefined} @@ -250,7 +185,7 @@ Window.prototype.back = function() {}; * @see https://developer.mozilla.org/en/DOM/window.blur * @return {undefined} */ -Window.prototype.blur = function() {}; + Window.prototype.blur = function() {}; /** * @param {string} stringToEncode @@ -267,17 +202,11 @@ Window.prototype.captureEvents; * @see https://developer.mozilla.org/en/DOM/window.close * @return {undefined} */ -Window.prototype.close = function() {}; + Window.prototype.close = function() {}; /**@see https://developer.mozilla.org/en/DOM/window.find */ Window.prototype.find; -/** - * @see https://developer.mozilla.org/en/DOM/window.focus - * @return {undefined} - */ -Window.prototype.focus = function() {}; - /** * @see https://developer.mozilla.org/en/DOM/window.forward * @return {undefined} @@ -290,13 +219,6 @@ Window.prototype.forward = function() {}; */ Window.prototype.getAttention = function() {}; -/** - * @return {Selection} - * @see https://developer.mozilla.org/en/DOM/window.getSelection - * @nosideeffects - */ -Window.prototype.getSelection = function() {}; - /** * @see https://developer.mozilla.org/en/DOM/window.home * @return {undefined} @@ -318,12 +240,6 @@ Window.prototype.showModalDialog; Window.prototype.sizeToContent; -/** - * @see http://msdn.microsoft.com/en-us/library/ms536769(VS.85).aspx - * @return {undefined} - */ -Window.prototype.stop = function() {}; - Window.prototype.updateCommands; // properties of Document @@ -345,8 +261,7 @@ Document.prototype.anchors; * @type {HTMLCollection} */ Document.prototype.applets; -/** @type {boolean} */ Document.prototype.async; -/** @type {string?} */ Document.prototype.baseURI; +/** @type {?string} */ Document.prototype.baseURI; /** * @see https://developer.mozilla.org/en/DOM/document.bgColor @@ -365,6 +280,11 @@ Document.prototype.compatMode; Document.prototype.contentType; /** @type {string} */ Document.prototype.cookie; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/defaultView + * @type {?Window} + */ Document.prototype.defaultView; /** @@ -401,9 +321,6 @@ Document.prototype.fgColor; */ Document.prototype.forms; -/** @type {number} */ -Document.prototype.height; - /** @type {HTMLCollection} */ Document.prototype.images; @@ -467,11 +384,6 @@ Document.prototype.vlinkColor; */ Document.prototype.clear = function() {}; -/** - * @see https://developer.mozilla.org/en/DOM/document.close - */ -Document.prototype.close; - /** * @param {string} type * @return {Event} @@ -491,26 +403,8 @@ Document.prototype.evaluate; */ Document.prototype.execCommand; -/** - * @param {string} name - * @return {!NodeList} - * @nosideeffects - * @see https://developer.mozilla.org/en/DOM/document.getElementsByClassName - */ -Document.prototype.getElementsByClassName = function(name) {}; - -/** - * @param {string} uri - * @return {undefined} - */ -Document.prototype.load = function(uri) {}; Document.prototype.loadOverlay; -/** - * @see https://developer.mozilla.org/en/DOM/document.open - */ -Document.prototype.open; - /** * @see https://developer.mozilla.org/en/Midas * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx @@ -556,7 +450,7 @@ Document.prototype.write = function(text) {}; * @return {undefined} */ Document.prototype.writeln = function(text) {}; - + Document.prototype.ononline; Document.prototype.onoffline; @@ -572,7 +466,7 @@ Document.prototype.getBoxObjectFor = function(element) {}; // http://lxr.mozilla.org/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl /** - * @param {string} tag + * @param {!TrustedHTML|string} tag * @return {DocumentFragment} */ Range.prototype.createContextualFragment; @@ -607,128 +501,6 @@ Range.prototype.intersectsNode; */ Range.prototype.compareNode; - -/** @constructor */ -function Selection() {} - -/** - * @type {Node} - * @see https://developer.mozilla.org/en/DOM/Selection/anchorNode - */ -Selection.prototype.anchorNode; - -/** - * @type {number} - * @see https://developer.mozilla.org/en/DOM/Selection/anchorOffset - */ -Selection.prototype.anchorOffset; - -/** - * @type {Node} - * @see https://developer.mozilla.org/en/DOM/Selection/focusNode - */ -Selection.prototype.focusNode; - -/** - * @type {number} - * @see https://developer.mozilla.org/en/DOM/Selection/focusOffset - */ -Selection.prototype.focusOffset; - -/** - * @type {boolean} - * @see https://developer.mozilla.org/en/DOM/Selection/isCollapsed - */ -Selection.prototype.isCollapsed; - -/** - * @type {number} - * @see https://developer.mozilla.org/en/DOM/Selection/rangeCount - */ -Selection.prototype.rangeCount; - -/** - * @param {Range} range - * @return {undefined} - * @see https://developer.mozilla.org/en/DOM/Selection/addRange - */ -Selection.prototype.addRange = function(range) {}; - -/** - * @param {number} index - * @return {Range} - * @see https://developer.mozilla.org/en/DOM/Selection/getRangeAt - * @nosideeffects - */ -Selection.prototype.getRangeAt = function(index) {}; - -/** - * @param {Node} node - * @param {number} index - * @return {undefined} - * @see https://developer.mozilla.org/en/DOM/Selection/collapse - */ -Selection.prototype.collapse = function(node, index) {}; - -/** - * @return {undefined} - * @see https://developer.mozilla.org/en/DOM/Selection/collapseToEnd - */ -Selection.prototype.collapseToEnd = function() {}; - -/** - * @return {undefined} - * @see https://developer.mozilla.org/en/DOM/Selection/collapseToStart - */ -Selection.prototype.collapseToStart = function() {}; - -/** - * @param {Node} node - * @param {boolean} partlyContained - * @return {boolean} - * @see https://developer.mozilla.org/en/DOM/Selection/containsNode - * @nosideeffects - */ -Selection.prototype.containsNode = function(node, partlyContained) {}; - -/** - * @see https://developer.mozilla.org/en/DOM/Selection/deleteFromDocument - * @return {undefined} - */ -Selection.prototype.deleteFromDocument = function() {}; - -/** - * @param {Node} parentNode - * @param {number} offset - * @see https://developer.mozilla.org/en/DOM/Selection/extend - * @return {undefined} - */ -Selection.prototype.extend = function(parentNode, offset) {}; - -/** - * @see https://developer.mozilla.org/en/DOM/Selection/removeAllRanges - * @return {undefined} - */ -Selection.prototype.removeAllRanges = function() {}; - -/** - * @param {Range} range - * @see https://developer.mozilla.org/en/DOM/Selection/removeRange - * @return {undefined} - */ -Selection.prototype.removeRange = function(range) {}; - -/** - * @param {Node} parentNode - * @see https://developer.mozilla.org/en/DOM/Selection/selectAllChildren - */ -Selection.prototype.selectAllChildren; - -/** - * @see https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange - */ -Selection.prototype.selectionLanguageChange; - /** * @type {!NodeList} * @see https://developer.mozilla.org/en/DOM/element.children @@ -741,22 +513,6 @@ Element.prototype.children; */ Element.prototype.firebugIgnore; -/** - * Note: According to the spec, id is actually defined on HTMLElement and - * SVGElement, rather than Element. Deliberately ignore this so that saying - * Element.id is allowed. - * @type {string} - * @implicitCast - */ -Element.prototype.id; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Parsing/#widl-Element-innerHTML - * @implicitCast - */ -Element.prototype.innerHTML; - /** * Note: According to the spec, name is defined on specific types of * HTMLElements, rather than on Node, Element, or HTMLElement directly. @@ -775,26 +531,14 @@ Element.prototype.nodePrincipal; */ Element.prototype.style; -/** - * @override - * @return {!Element} - */ -Element.prototype.cloneNode = function(deep) {}; - -/** @return {undefined} */ -Element.prototype.blur = function() {}; - /** @return {undefined} */ Element.prototype.click = function() {}; -/** @return {undefined} */ -Element.prototype.focus = function() {}; - /** @type {number} */ -HTMLInputElement.prototype.selectionStart; +HTMLTextAreaElement.prototype.selectionStart; /** @type {number} */ -HTMLInputElement.prototype.selectionEnd; +HTMLTextAreaElement.prototype.selectionEnd; /** * @param {number} selectionStart @@ -802,23 +546,19 @@ HTMLInputElement.prototype.selectionEnd; * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange * @return {undefined} */ -HTMLInputElement.prototype.setSelectionRange = +HTMLTextAreaElement.prototype.setSelectionRange = function(selectionStart, selectionEnd) {}; -/** @type {number} */ -HTMLTextAreaElement.prototype.selectionStart; - -/** @type {number} */ -HTMLTextAreaElement.prototype.selectionEnd; - /** - * @param {number} selectionStart - * @param {number} selectionEnd - * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange + * @param {string} replacement + * @param {number=} start + * @param {number=} end + * @param {string=} selectionMode + * @see https://html.spec.whatwg.org/#dom-textarea/input-setrangetext * @return {undefined} */ -HTMLTextAreaElement.prototype.setSelectionRange = - function(selectionStart, selectionEnd) {}; +HTMLTextAreaElement.prototype.setRangeText = + function(replacement, start, end, selectionMode) {}; /** * @type {string} @@ -852,7 +592,7 @@ Navigator.prototype.securityPolicy; /** * @param {string} url - * @param {ArrayBufferView|Blob|string|FormData=} opt_data + * @param {ArrayBufferView|Blob|string|FormData|URLSearchParams=} opt_data * @return {boolean} * @see https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon */ diff --git a/javascript/externs/web/gecko_event.js b/javascript/externs/web/gecko_event.js index e630d7f52cce..45335022b3c3 100644 --- a/javascript/externs/web/gecko_event.js +++ b/javascript/externs/web/gecko_event.js @@ -24,12 +24,11 @@ // TODO: Almost all of it has not been annotated with types. -/** @type {number} */ Event.prototype.HORIZONTAL_AXIS; -/** @type {number} */ Event.prototype.VERTICAL_AXIS; +/** @const {number} */ Event.prototype.HORIZONTAL_AXIS; +/** @const {number} */ Event.prototype.VERTICAL_AXIS; /** @type {boolean} */ Event.prototype.altKey; /** @type {number} */ Event.prototype.axis; /** @type {number} */ Event.prototype.button; -/** @type {boolean} */ Event.prototype.cancelBubble; /** @type {number} */ Event.prototype.charCode; /** @type {number} */ Event.prototype.clientX; /** @type {number} */ Event.prototype.clientY; @@ -51,12 +50,36 @@ /** @type {Window} */ Event.prototype.view; /** @type {number} */ Event.prototype.which; +/** + * @type {boolean} + * @deprecated cancelBubble is obsolete and is no-op in modern browsers. Use + * stopPropagation() instead. + */ +Event.prototype.cancelBubble; + /** @constructor */ function nsIDOMPageTransitionEvent() {} /** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted; //Methods Event.prototype.initKeyEvent; -Event.prototype.initMouseEvent; +/** + * @param {string} typeArg + * @param {boolean=} canBubbleArg + * @param {boolean=} cancelableArg + * @param {?Window=} viewArg + * @param {?number=} detailArg + * @param {number=} screenXArg + * @param {number=} screenYArg + * @param {number=} clientXArg + * @param {number=} clientYArg + * @param {boolean=} ctrlKeyArg + * @param {boolean=} altKeyArg + * @param {boolean=} shiftKeyArg + * @param {boolean=} metaKeyArg + * @param {?number=} buttonArg + * @param {?EventTarget=} relatedTargetArg + */ +Event.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {}; Event.prototype.initUIEvent; Event.prototype.initMessageEvent; Event.prototype.preventBubble; diff --git a/javascript/externs/web/gecko_xml.js b/javascript/externs/web/gecko_xml.js index ccab53d6729f..6d44e7da27d1 100644 --- a/javascript/externs/web/gecko_xml.js +++ b/javascript/externs/web/gecko_xml.js @@ -66,8 +66,8 @@ function DOMParser() {} * var parser = new DOMParser(); * var doc = parser.parseFromString(aStr, "text/xml"); * - * @param {string} src The UTF16 string to be parsed. + * @param {!TrustedHTML|string} src The UTF16 string to be parsed. * @param {string} type The content type of the string. - * @return {Document} + * @return {!Document} */ DOMParser.prototype.parseFromString = function(src, type) {}; diff --git a/javascript/externs/web/html5.js b/javascript/externs/web/html5.js index dacb3abeaf61..133fa7813b1a 100644 --- a/javascript/externs/web/html5.js +++ b/javascript/externs/web/html5.js @@ -29,6 +29,14 @@ * @externs */ +/** @type {?HTMLSlotElement} */ +Node.prototype.assignedSlot; + +/** + * @type {string} + * @see https://dom.spec.whatwg.org/#dom-element-slot + */ +Element.prototype.slot; /** * Note: In IE, the contains() method only exists on Elements, not Nodes. @@ -43,6 +51,38 @@ */ Node.prototype.contains = function(n) {}; +/** @type {boolean} */ +Node.prototype.isConnected; + +/** + * @type {boolean} + * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element + */ +HTMLScriptElement.prototype.async; + +/** + * @type {string?} + * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element + */ +HTMLScriptElement.prototype.crossOrigin; + +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element + */ +HTMLScriptElement.prototype.integrity; + +/** + * @type {boolean} + * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element + */ +HTMLScriptElement.prototype.noModule; + +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element + */ +HTMLScriptElement.prototype.referrerPolicy; /** * @constructor @@ -75,6 +115,7 @@ HTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {}; HTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {}; /** + * @modifies {this} * @param {string} contextId * @param {Object=} opt_args * @return {Object} @@ -89,11 +130,95 @@ HTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {}; * */ HTMLCanvasElement.prototype.captureStream = function(opt_framerate) {}; +/** + * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen + * @return {!OffscreenCanvas} + * @throws {Error} + * */ +HTMLCanvasElement.prototype.transferControlToOffscreen = function() {}; + + +/** + * @interface + * @extends {MediaStreamTrack} + * @see https://w3c.github.io/mediacapture-fromelement/#the-canvascapturemediastreamtrack + */ +function CanvasCaptureMediaStreamTrack() {} + +/** + * The canvas element that this media stream captures. + * @type {!HTMLCanvasElement} + */ +CanvasCaptureMediaStreamTrack.prototype.canvas; + +/** + * Allows applications to manually request that a frame from the canvas be + * captured and rendered into the track. + * @return {undefined} + */ +CanvasCaptureMediaStreamTrack.prototype.requestFrame = function() {}; + + +/** + * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface + * @implements {EventTarget} + * @implements {Transferable} + * @param {number} width + * @param {number} height + * @nosideeffects + * @constructor + */ +function OffscreenCanvas(width, height) {} + +/** @override */ +OffscreenCanvas.prototype.addEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +OffscreenCanvas.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +OffscreenCanvas.prototype.dispatchEvent = function(evt) {}; + +/** @type {number} */ +OffscreenCanvas.prototype.width; + +/** @type {number} */ +OffscreenCanvas.prototype.height; + +/** + * @param {string} contextId + * @param {!Object=} opt_options + * @modifies {this} + * @return {!Object} + */ +OffscreenCanvas.prototype.getContext = function(contextId, opt_options) {}; + +/** + * @return {!ImageBitmap} + */ +OffscreenCanvas.prototype.transferToImageBitmap = function() {}; + +/** + * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options + * @return {!Promise} + */ +OffscreenCanvas.prototype.convertToBlob = function(opt_options) {}; + +// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making +// svg.js part of core. +/** + * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap| + * OffscreenCanvas} + */ +var CanvasImageSource; + /** * @interface * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods */ -function CanvasPathMethods() {}; +function CanvasPathMethods() {} /** * @return {undefined} @@ -166,46 +291,179 @@ CanvasPathMethods.prototype.rect = function(x, y, w, h) {}; CanvasPathMethods.prototype.arc = function( x, y, radius, startAngle, endAngle, opt_anticlockwise) {}; +/** + * @constructor + * @param {!Path2D|string=} arg + * @implements {CanvasPathMethods} + * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects + */ +function Path2D(arg) {} + +/** + * @return {undefined} + * @override + */ +Path2D.prototype.closePath = function() {}; + +/** + * @param {number} x + * @param {number} y + * @return {undefined} + * @override + */ +Path2D.prototype.moveTo = function(x, y) {}; + +/** + * @param {number} x + * @param {number} y + * @return {undefined} + * @override + */ +Path2D.prototype.lineTo = function(x, y) {}; + +/** + * @param {number} cpx + * @param {number} cpy + * @param {number} x + * @param {number} y + * @return {undefined} + * @override + */ +Path2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {}; + +/** + * @param {number} cp1x + * @param {number} cp1y + * @param {number} cp2x + * @param {number} cp2y + * @param {number} x + * @param {number} y + * @return {undefined} + * @override + */ +Path2D.prototype.bezierCurveTo = function( + cp1x, cp1y, cp2x, cp2y, x, y) {}; + +/** + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} radius + * @return {undefined} + * @override + */ +Path2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {}; + +/** + * @param {number} x + * @param {number} y + * @param {number} w + * @param {number} h + * @return {undefined} + * @override + */ +Path2D.prototype.rect = function(x, y, w, h) {}; + +/** + * @param {number} x + * @param {number} y + * @param {number} radius + * @param {number} startAngle + * @param {number} endAngle + * @param {boolean=} optAnticlockwise + * @return {undefined} + * @override + */ +Path2D.prototype.arc = function( + x, y, radius, startAngle, endAngle, optAnticlockwise) {}; + +/** + * @param {Path2D} path + * @return {undefined} + */ +Path2D.prototype.addPath = function(path) {}; + +/** + * @interface + * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles + */ +function CanvasDrawingStyles() {} + +/** @type {number} */ +CanvasDrawingStyles.prototype.lineWidth; + +/** @type {string} */ +CanvasDrawingStyles.prototype.lineCap; + +/** @type {string} */ +CanvasDrawingStyles.prototype.lineJoin; + +/** @type {number} */ +CanvasDrawingStyles.prototype.miterLimit; + +/** + * @param {Array} segments + * @return {undefined} + */ +CanvasDrawingStyles.prototype.setLineDash = function(segments) {}; + +/** + * @return {!Array} + */ +CanvasDrawingStyles.prototype.getLineDash = function() {}; + +/** @type {string} */ +CanvasDrawingStyles.prototype.font; + +/** @type {string} */ +CanvasDrawingStyles.prototype.textAlign; + +/** @type {string} */ +CanvasDrawingStyles.prototype.textBaseline; +// TODO(dramaix): replace this with @record. /** * @constructor + * @abstract + * @implements {CanvasDrawingStyles} * @implements {CanvasPathMethods} * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d */ -function CanvasRenderingContext2D() {} +function BaseRenderingContext2D() {} -/** @type {!HTMLCanvasElement} */ -CanvasRenderingContext2D.prototype.canvas; +/** @const {!HTMLCanvasElement|!OffscreenCanvas} */ +BaseRenderingContext2D.prototype.canvas; /** * @return {undefined} */ -CanvasRenderingContext2D.prototype.save = function() {}; +BaseRenderingContext2D.prototype.save = function() {}; /** * @return {undefined} */ -CanvasRenderingContext2D.prototype.restore = function() {}; +BaseRenderingContext2D.prototype.restore = function() {}; /** * @param {number} x * @param {number} y * @return {undefined} */ -CanvasRenderingContext2D.prototype.scale = function(x, y) {}; +BaseRenderingContext2D.prototype.scale = function(x, y) {}; /** * @param {number} angle * @return {undefined} */ -CanvasRenderingContext2D.prototype.rotate = function(angle) {}; +BaseRenderingContext2D.prototype.rotate = function(angle) {}; /** * @param {number} x * @param {number} y * @return {undefined} */ -CanvasRenderingContext2D.prototype.translate = function(x, y) {}; +BaseRenderingContext2D.prototype.translate = function(x, y) {}; /** * @param {number} m11 @@ -216,7 +474,7 @@ CanvasRenderingContext2D.prototype.translate = function(x, y) {}; * @param {number} dy * @return {undefined} */ -CanvasRenderingContext2D.prototype.transform = function( +BaseRenderingContext2D.prototype.transform = function( m11, m12, m21, m22, dx, dy) {}; /** @@ -228,7 +486,7 @@ CanvasRenderingContext2D.prototype.transform = function( * @param {number} dy * @return {undefined} */ -CanvasRenderingContext2D.prototype.setTransform = function( +BaseRenderingContext2D.prototype.setTransform = function( m11, m12, m21, m22, dx, dy) {}; /** @@ -236,10 +494,10 @@ CanvasRenderingContext2D.prototype.setTransform = function( * @param {number} y0 * @param {number} x1 * @param {number} y1 - * @return {CanvasGradient} + * @return {!CanvasGradient} * @throws {Error} */ -CanvasRenderingContext2D.prototype.createLinearGradient = function( +BaseRenderingContext2D.prototype.createLinearGradient = function( x0, y0, x1, y1) {}; /** @@ -249,19 +507,20 @@ CanvasRenderingContext2D.prototype.createLinearGradient = function( * @param {number} x1 * @param {number} y1 * @param {number} r1 - * @return {CanvasGradient} + * @return {!CanvasGradient} * @throws {Error} */ -CanvasRenderingContext2D.prototype.createRadialGradient = function( +BaseRenderingContext2D.prototype.createRadialGradient = function( x0, y0, r0, x1, y1, r1) {}; /** - * @param {HTMLImageElement|HTMLCanvasElement} image + * @param {CanvasImageSource} image * @param {string} repetition - * @return {CanvasPattern} + * @return {?CanvasPattern} * @throws {Error} + * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern */ -CanvasRenderingContext2D.prototype.createPattern = function( +BaseRenderingContext2D.prototype.createPattern = function( image, repetition) {}; /** @@ -271,7 +530,7 @@ CanvasRenderingContext2D.prototype.createPattern = function( * @param {number} h * @return {undefined} */ -CanvasRenderingContext2D.prototype.clearRect = function(x, y, w, h) {}; +BaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {}; /** * @param {number} x @@ -280,7 +539,7 @@ CanvasRenderingContext2D.prototype.clearRect = function(x, y, w, h) {}; * @param {number} h * @return {undefined} */ -CanvasRenderingContext2D.prototype.fillRect = function(x, y, w, h) {}; +BaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {}; /** * @param {number} x @@ -289,18 +548,18 @@ CanvasRenderingContext2D.prototype.fillRect = function(x, y, w, h) {}; * @param {number} h * @return {undefined} */ -CanvasRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {}; +BaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {}; /** * @return {undefined} */ -CanvasRenderingContext2D.prototype.beginPath = function() {}; +BaseRenderingContext2D.prototype.beginPath = function() {}; /** * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.closePath = function() {}; +BaseRenderingContext2D.prototype.closePath = function() {}; /** * @param {number} x @@ -308,7 +567,7 @@ CanvasRenderingContext2D.prototype.closePath = function() {}; * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.moveTo = function(x, y) {}; +BaseRenderingContext2D.prototype.moveTo = function(x, y) {}; /** * @param {number} x @@ -316,7 +575,7 @@ CanvasRenderingContext2D.prototype.moveTo = function(x, y) {}; * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.lineTo = function(x, y) {}; +BaseRenderingContext2D.prototype.lineTo = function(x, y) {}; /** * @param {number} cpx @@ -326,7 +585,7 @@ CanvasRenderingContext2D.prototype.lineTo = function(x, y) {}; * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.quadraticCurveTo = function( +BaseRenderingContext2D.prototype.quadraticCurveTo = function( cpx, cpy, x, y) {}; /** @@ -339,7 +598,7 @@ CanvasRenderingContext2D.prototype.quadraticCurveTo = function( * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.bezierCurveTo = function( +BaseRenderingContext2D.prototype.bezierCurveTo = function( cp1x, cp1y, cp2x, cp2y, x, y) {}; /** @@ -351,7 +610,7 @@ CanvasRenderingContext2D.prototype.bezierCurveTo = function( * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {}; +BaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {}; /** * @param {number} x @@ -361,7 +620,7 @@ CanvasRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {}; * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.rect = function(x, y, w, h) {}; +BaseRenderingContext2D.prototype.rect = function(x, y, w, h) {}; /** * @param {number} x @@ -373,7 +632,7 @@ CanvasRenderingContext2D.prototype.rect = function(x, y, w, h) {}; * @return {undefined} * @override */ -CanvasRenderingContext2D.prototype.arc = function( +BaseRenderingContext2D.prototype.arc = function( x, y, radius, startAngle, endAngle, opt_anticlockwise) {}; /** @@ -388,26 +647,35 @@ CanvasRenderingContext2D.prototype.arc = function( * @return {undefined} * @see http://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/ellipse */ -CanvasRenderingContext2D.prototype.ellipse = function( +BaseRenderingContext2D.prototype.ellipse = function( x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) { }; /** - * @param {string=} opt_fillRule + * @param {Path2D|string=} optFillRuleOrPath + * @param {string=} optFillRule * @return {undefined} */ -CanvasRenderingContext2D.prototype.fill = function(opt_fillRule) {}; +BaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {}; /** + * @param {Path2D=} optStroke * @return {undefined} */ -CanvasRenderingContext2D.prototype.stroke = function() {}; +BaseRenderingContext2D.prototype.stroke = function(optStroke) {}; /** - * @param {string=} opt_fillRule + * @param {Element} element + * @return {undefined} + */ +BaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {}; + +/** + * @param {Path2D|string=} optFillRuleOrPath + * @param {string=} optFillRule * @return {undefined} */ -CanvasRenderingContext2D.prototype.clip = function(opt_fillRule) {}; +BaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {}; /** * @param {number} x @@ -416,7 +684,7 @@ CanvasRenderingContext2D.prototype.clip = function(opt_fillRule) {}; * @nosideeffects * @see http://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke */ -CanvasRenderingContext2D.prototype.isPointInStroke = function(x, y) {}; +BaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {}; /** * @param {number} x @@ -425,7 +693,7 @@ CanvasRenderingContext2D.prototype.isPointInStroke = function(x, y) {}; * @return {boolean} * @nosideeffects */ -CanvasRenderingContext2D.prototype.isPointInPath = function( +BaseRenderingContext2D.prototype.isPointInPath = function( x, y, opt_fillRule) {}; /** @@ -435,7 +703,7 @@ CanvasRenderingContext2D.prototype.isPointInPath = function( * @param {number=} opt_maxWidth * @return {undefined} */ -CanvasRenderingContext2D.prototype.fillText = function( +BaseRenderingContext2D.prototype.fillText = function( text, x, y, opt_maxWidth) {}; /** @@ -445,18 +713,18 @@ CanvasRenderingContext2D.prototype.fillText = function( * @param {number=} opt_maxWidth * @return {undefined} */ -CanvasRenderingContext2D.prototype.strokeText = function( +BaseRenderingContext2D.prototype.strokeText = function( text, x, y, opt_maxWidth) {}; /** * @param {string} text - * @return {TextMetrics} + * @return {!TextMetrics} * @nosideeffects */ -CanvasRenderingContext2D.prototype.measureText = function(text) {}; +BaseRenderingContext2D.prototype.measureText = function(text) {}; /** - * @param {HTMLImageElement|HTMLCanvasElement|Image|HTMLVideoElement} image + * @param {CanvasImageSource} image * @param {number} dx Destination x coordinate. * @param {number} dy Destination y coordinate. * @param {number=} opt_dw Destination box width. Defaults to the image width. @@ -472,26 +740,27 @@ CanvasRenderingContext2D.prototype.measureText = function(text) {}; * the source image to draw. Defaults to the full image height. * @return {undefined} */ -CanvasRenderingContext2D.prototype.drawImage = function( +BaseRenderingContext2D.prototype.drawImage = function( image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {}; /** * @param {number} sw * @param {number} sh - * @return {ImageData} + * @return {!ImageData} + * @throws {Error} * @nosideeffects */ -CanvasRenderingContext2D.prototype.createImageData = function(sw, sh) {}; +BaseRenderingContext2D.prototype.createImageData = function(sw, sh) {}; /** * @param {number} sx * @param {number} sy * @param {number} sw * @param {number} sh - * @return {ImageData} + * @return {!ImageData} * @throws {Error} */ -CanvasRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {}; +BaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {}; /** * @param {ImageData} imagedata @@ -503,7 +772,7 @@ CanvasRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {}; * @param {number=} opt_dirtyHeight * @return {undefined} */ -CanvasRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy, +BaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy, opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {}; /** @@ -515,8 +784,10 @@ CanvasRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy, * @param {number=} opt_e * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html * @return {undefined} + * @deprecated */ -CanvasRenderingContext2D.prototype.setFillColor; +BaseRenderingContext2D.prototype.setFillColor = function( + opt_a, opt_b, opt_c, opt_d, opt_e) {}; /** * Note: WebKit only @@ -527,81 +798,108 @@ CanvasRenderingContext2D.prototype.setFillColor; * @param {number=} opt_e * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html * @return {undefined} + * @deprecated */ -CanvasRenderingContext2D.prototype.setStrokeColor; +BaseRenderingContext2D.prototype.setStrokeColor = function( + opt_a, opt_b, opt_c, opt_d, opt_e) {}; /** - * @return {Array} + * @return {!Array} + * @override */ -CanvasRenderingContext2D.prototype.getLineDash; +BaseRenderingContext2D.prototype.getLineDash = function() {}; /** * @param {Array} segments * @return {undefined} + * @override */ -CanvasRenderingContext2D.prototype.setLineDash; +BaseRenderingContext2D.prototype.setLineDash = function(segments) {}; /** @type {string} */ -CanvasRenderingContext2D.prototype.fillColor; +BaseRenderingContext2D.prototype.fillColor; /** * @type {string|!CanvasGradient|!CanvasPattern} * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle * @implicitCast */ -CanvasRenderingContext2D.prototype.fillStyle; +BaseRenderingContext2D.prototype.fillStyle; /** @type {string} */ -CanvasRenderingContext2D.prototype.font; +BaseRenderingContext2D.prototype.font; /** @type {number} */ -CanvasRenderingContext2D.prototype.globalAlpha; +BaseRenderingContext2D.prototype.globalAlpha; /** @type {string} */ -CanvasRenderingContext2D.prototype.globalCompositeOperation; +BaseRenderingContext2D.prototype.globalCompositeOperation; /** @type {number} */ -CanvasRenderingContext2D.prototype.lineWidth; +BaseRenderingContext2D.prototype.lineWidth; /** @type {string} */ -CanvasRenderingContext2D.prototype.lineCap; +BaseRenderingContext2D.prototype.lineCap; /** @type {string} */ -CanvasRenderingContext2D.prototype.lineJoin; +BaseRenderingContext2D.prototype.lineJoin; /** @type {number} */ -CanvasRenderingContext2D.prototype.miterLimit; +BaseRenderingContext2D.prototype.miterLimit; /** @type {number} */ -CanvasRenderingContext2D.prototype.shadowBlur; +BaseRenderingContext2D.prototype.shadowBlur; /** @type {string} */ -CanvasRenderingContext2D.prototype.shadowColor; +BaseRenderingContext2D.prototype.shadowColor; /** @type {number} */ -CanvasRenderingContext2D.prototype.shadowOffsetX; +BaseRenderingContext2D.prototype.shadowOffsetX; /** @type {number} */ -CanvasRenderingContext2D.prototype.shadowOffsetY; +BaseRenderingContext2D.prototype.shadowOffsetY; + +/** @type {boolean} */ +BaseRenderingContext2D.prototype.imageSmoothingEnabled; /** * @type {string|!CanvasGradient|!CanvasPattern} * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle * @implicitCast */ -CanvasRenderingContext2D.prototype.strokeStyle; +BaseRenderingContext2D.prototype.strokeStyle; /** @type {string} */ -CanvasRenderingContext2D.prototype.strokeColor; +BaseRenderingContext2D.prototype.strokeColor; /** @type {string} */ -CanvasRenderingContext2D.prototype.textAlign; +BaseRenderingContext2D.prototype.textAlign; /** @type {string} */ -CanvasRenderingContext2D.prototype.textBaseline; +BaseRenderingContext2D.prototype.textBaseline; /** @type {number} */ -CanvasRenderingContext2D.prototype.lineDashOffset; +BaseRenderingContext2D.prototype.lineDashOffset; + +/** + * @constructor + * @extends {BaseRenderingContext2D} + * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d + */ +function CanvasRenderingContext2D() {} + +/** @const {!HTMLCanvasElement} */ +CanvasRenderingContext2D.prototype.canvas; + +/** + * @constructor + * @extends {BaseRenderingContext2D} + * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d + */ +function OffscreenCanvasRenderingContext2D() {} + +/** @const {!OffscreenCanvas} */ +OffscreenCanvasRenderingContext2D.prototype.canvas; /** * @constructor @@ -625,11 +923,23 @@ function CanvasPattern() {} */ function TextMetrics() {} -/** @type {number} */ +/** @const {number} */ TextMetrics.prototype.width; +/** @const {number|undefined} */ +TextMetrics.prototype.actualBoundingBoxAscent; + +/** @const {number|undefined} */ +TextMetrics.prototype.actualBoundingBoxDescent; + +/** @const {number|undefined} */ +TextMetrics.prototype.actualBoundingBoxLeft; + +/** @const {number|undefined} */ +TextMetrics.prototype.actualBoundingBoxRight; + /** - * @param {Uint8ClampedArray|number} dataOrWidth In the first form, this is the + * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the * array of pixel data. In the second form, this is the image width. * @param {number} widthOrHeight In the first form, this is the image width. In * the second form, this is the image height. @@ -640,15 +950,71 @@ TextMetrics.prototype.width; */ function ImageData(dataOrWidth, widthOrHeight, opt_height) {} -/** @type {Uint8ClampedArray} */ +/** @const {!Uint8ClampedArray} */ ImageData.prototype.data; -/** @type {number} */ +/** @const {number} */ ImageData.prototype.width; -/** @type {number} */ +/** @const {number} */ ImageData.prototype.height; +/** + * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images + * @interface + */ +function ImageBitmap() {} + +/** + * @const {number} + */ +ImageBitmap.prototype.width; + +/** + * @const {number} + */ +ImageBitmap.prototype.height; + +/** + * Releases ImageBitmap's underlying bitmap data. + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2 + */ +ImageBitmap.prototype.close = function() {}; + +/** + * @typedef {!CanvasImageSource | !Blob | !ImageData} + * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#imagebitmapsource + */ +var ImageBitmapSource; + +/** + * @typedef {{ + * imageOrientation: (string|undefined), + * premultiplyAlpha: (string|undefined), + * colorSpaceConversion: (string|undefined), + * resizeWidth: (number|undefined), + * resizeHeight: (number|undefined), + * resizeQuality: (string|undefined) + * }} + * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2 + */ +var ImageBitmapOptions; + +/** + * @param {!ImageBitmapSource} image + * @param {(number|!ImageBitmapOptions)=} sxOrOptions + * @param {number=} sy + * @param {number=} sw + * @param {number=} sh + * @param {!ImageBitmapOptions=} options + * @return {!Promise} + * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap + * @see https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope-mixin + */ +function createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {} + + /** * @constructor */ @@ -778,7 +1144,7 @@ SQLResultSet.prototype.insertId; SQLResultSet.prototype.rowsAffected; /** - * @type {SQLResultSetRowList} + * @type {!SQLResultSetRowList} */ SQLResultSet.prototype.rows; @@ -807,7 +1173,7 @@ SQLResultSetRowList.prototype.item = function(index) {}; * @param {string} description * @param {number} size * @param {(DatabaseCallback|function(Database))=} opt_callback - * @return {Database} + * @return {!Database} */ function openDatabase(name, version, description, size, opt_callback) {} @@ -817,7 +1183,7 @@ function openDatabase(name, version, description, size, opt_callback) {} * @param {string} description * @param {number} size * @param {(DatabaseCallback|function(Database))=} opt_callback - * @return {Database} + * @return {!Database} */ Window.prototype.openDatabase = function(name, version, description, size, opt_callback) {}; @@ -846,6 +1212,25 @@ HTMLImageElement.prototype.naturalHeight; */ HTMLImageElement.prototype.crossOrigin; +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc + */ +HTMLImageElement.prototype.currentSrc; + +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint + */ +HTMLImageElement.prototype.decoding; + +/** + * @return {!Promise} + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode + */ +HTMLImageElement.prototype.decode; + + /** * This is a superposition of the Window and Worker postMessage methods. * @param {*} message @@ -857,6 +1242,15 @@ HTMLImageElement.prototype.crossOrigin; function postMessage(message, opt_targetOriginOrTransfer, opt_targetOriginOrPortsOrTransfer) {} +/** + * @param {*} message + * @param {string=} targetOrigin + * @param {(!Array)=} transfer + * @return {void} + * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage + */ +Window.prototype.postMessage = function(message, targetOrigin, transfer) {}; + /** * The postMessage method (as implemented in Opera). * @param {string} message @@ -871,240 +1265,226 @@ Document.prototype.postMessage = function(message) {}; Document.prototype.head; /** - * @see https://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariJSRef/DOMApplicationCache/DOMApplicationCache.html - * @constructor - * @implements {EventTarget} + * @type {string} + * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness */ -function DOMApplicationCache() {} +Document.prototype.readyState; /** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} + * @see https://html.spec.whatwg.org/#application-cache-api + * @constructor + * @implements {EventTarget} */ -DOMApplicationCache.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; +function ApplicationCache() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -DOMApplicationCache.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; +/** @override */ +ApplicationCache.prototype.addEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +ApplicationCache.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +ApplicationCache.prototype.dispatchEvent = function(evt) {}; /** - * @override - * @return {boolean} + * The object isn't associated with an application cache. This can occur if the + * update process fails and there is no previous cache to revert to, or if there + * is no manifest file. + * @const {number} */ -DOMApplicationCache.prototype.dispatchEvent = function(evt) {}; +ApplicationCache.prototype.UNCACHED; /** * The object isn't associated with an application cache. This can occur if the * update process fails and there is no previous cache to revert to, or if there * is no manifest file. - * @type {number} + * @const {number} */ -DOMApplicationCache.prototype.UNCACHED = 0; +ApplicationCache.UNCACHED; /** * The cache is idle. - * @type {number} + * @const {number} + */ +ApplicationCache.prototype.IDLE; + +/** + * The cache is idle. + * @const {number} */ -DOMApplicationCache.prototype.IDLE = 1; +ApplicationCache.IDLE; /** * The update has started but the resources are not downloaded yet - for * example, this can happen when the manifest file is fetched. - * @type {number} + * @const {number} */ -DOMApplicationCache.prototype.CHECKING = 2; +ApplicationCache.prototype.CHECKING; + +/** + * The update has started but the resources are not downloaded yet - for + * example, this can happen when the manifest file is fetched. + * @const {number} + */ +ApplicationCache.CHECKING; /** * The resources are being downloaded into the cache. - * @type {number} + * @const {number} */ -DOMApplicationCache.prototype.DOWNLOADING = 3; +ApplicationCache.prototype.DOWNLOADING; + +/** + * The resources are being downloaded into the cache. + * @const {number} + */ +ApplicationCache.DOWNLOADING; /** * Resources have finished downloading and the new cache is ready to be used. - * @type {number} + * @const {number} + */ +ApplicationCache.prototype.UPDATEREADY; + +/** + * Resources have finished downloading and the new cache is ready to be used. + * @const {number} */ -DOMApplicationCache.prototype.UPDATEREADY = 4; +ApplicationCache.UPDATEREADY; /** * The cache is obsolete. - * @type {number} + * @const {number} */ -DOMApplicationCache.prototype.OBSOLETE = 5; +ApplicationCache.prototype.OBSOLETE; + +/** + * The cache is obsolete. + * @const {number} + */ +ApplicationCache.OBSOLETE; /** * The current status of the application cache. * @type {number} */ -DOMApplicationCache.prototype.status; +ApplicationCache.prototype.status; /** * Sent when the update process finishes for the first time; that is, the first * time an application cache is saved. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.oncached; +ApplicationCache.prototype.oncached; /** * Sent when the cache update process begins. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.onchecking; +ApplicationCache.prototype.onchecking; /** * Sent when the update process begins downloading resources in the manifest * file. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.ondownloading; +ApplicationCache.prototype.ondownloading; /** * Sent when an error occurs. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.onerror; +ApplicationCache.prototype.onerror; /** * Sent when the update process finishes but the manifest file does not change. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.onnoupdate; +ApplicationCache.prototype.onnoupdate; /** * Sent when each resource in the manifest file begins to download. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.onprogress; +ApplicationCache.prototype.onprogress; /** * Sent when there is an existing application cache, the update process * finishes, and there is a new application cache ready for use. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ -DOMApplicationCache.prototype.onupdateready; +ApplicationCache.prototype.onupdateready; /** * Replaces the active cache with the latest version. * @throws {DOMException} * @return {undefined} */ -DOMApplicationCache.prototype.swapCache = function() {}; +ApplicationCache.prototype.swapCache = function() {}; /** * Manually triggers the update process. * @throws {DOMException} * @return {undefined} */ -DOMApplicationCache.prototype.update = function() {}; +ApplicationCache.prototype.update = function() {}; -/** @type {DOMApplicationCache} */ +/** @type {?ApplicationCache} */ var applicationCache; -/** @type {DOMApplicationCache} */ +/** @type {ApplicationCache} */ Window.prototype.applicationCache; /** * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers - * @param {...string} var_args + * @param {...!TrustedScriptURL|string} var_args * @return {undefined} */ Window.prototype.importScripts = function(var_args) {}; /** - * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers - * @param {...string} var_args - * @return {undefined} - */ -function importScripts(var_args) {} - -/** - * @see http://dev.w3.org/html5/workers/ - * @constructor - * @implements {EventTarget} - */ -function WebWorker() {} - -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -WebWorker.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; - -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -WebWorker.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; - -/** - * @override - * @return {boolean} + * Decodes a string of data which has been encoded using base-64 encoding. + * + * @param {string} encodedData + * @return {string} + * @nosideeffects + * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob */ -WebWorker.prototype.dispatchEvent = function(evt) {}; +function atob(encodedData) {} /** - * Stops the worker process - * @return {undefined} + * @param {string} stringToEncode + * @return {string} + * @nosideeffects + * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa */ -WebWorker.prototype.terminate = function() {}; +function btoa(stringToEncode) {} /** - * Posts a message to the worker thread. - * @param {string} message + * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers + * @param {...!TrustedScriptURL|string} var_args * @return {undefined} */ -WebWorker.prototype.postMessage = function(message) {}; - -/** - * Sent when the worker thread posts a message to its creator. - * @type {?function(!MessageEvent<*>)} - */ -WebWorker.prototype.onmessage; - -/** - * Sent when the worker thread encounters an error. - * TODO(tbreisacher): Should this change to function(!ErrorEvent)? - * @type {?function(!Event)} - */ -WebWorker.prototype.onerror; +function importScripts(var_args) {} /** * @see http://dev.w3.org/html5/workers/ + * @param {!TrustedScriptURL|string} scriptURL + * @param {!WorkerOptions=} opt_options * @constructor * @implements {EventTarget} */ -function Worker(opt_arg0) {} +function Worker(scriptURL, opt_options) {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Worker.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; +/** @override */ +Worker.prototype.addEventListener = function(type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Worker.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; +/** @override */ +Worker.prototype.removeEventListener = function(type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ Worker.prototype.dispatchEvent = function(evt) {}; /** @@ -1131,47 +1511,62 @@ Worker.prototype.webkitPostMessage = function(message, opt_transfer) {}; /** * Sent when the worker thread posts a message to its creator. - * @type {?function(!MessageEvent<*>)} + * @type {?function(!MessageEvent<*>): void} */ Worker.prototype.onmessage; /** * Sent when the worker thread encounters an error. - * TODO(tbreisacher): Should this change to function(!ErrorEvent)? - * @type {?function(!Event)} + * @type {?function(!ErrorEvent): void} */ Worker.prototype.onerror; /** * @see http://dev.w3.org/html5/workers/ - * @param {string} scriptURL The URL of the script to run in the SharedWorker. - * @param {string=} opt_name A name that can later be used to obtain a - * reference to the same SharedWorker. - * @constructor - * @implements {EventTarget} + * @record */ -function SharedWorker(scriptURL, opt_name) {} +function WorkerOptions() {} /** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} + * Defines a name for the new global environment of the worker, primarily for + * debugging purposes. + * @type {string|undefined} */ -SharedWorker.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; +WorkerOptions.prototype.name; /** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} + * 'classic' or 'module'. Default: 'classic'. + * Specifying 'module' ensures the worker environment supports JavaScript + * modules. + * @type {string|undefined} */ -SharedWorker.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; +WorkerOptions.prototype.type; + +// WorkerOptions.prototype.credentials is defined in fetchapi.js. +// if type = 'module', it specifies how scriptURL is fetched. /** - * @override - * @return {boolean} + * @see http://dev.w3.org/html5/workers/ + * @param {!TrustedScriptURL|string} scriptURL The URL of the script to run in + * the SharedWorker. + * @param {(string|!WorkerOptions)=} options A name that can + * later be used to obtain a reference to the same SharedWorker or a + * WorkerOptions object which can be be used to specify how scriptURL is + * fetched through the credentials option. + * @constructor + * @implements {EventTarget} */ +function SharedWorker(scriptURL, options) {} + +/** @override */ +SharedWorker.prototype.addEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +SharedWorker.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ SharedWorker.prototype.dispatchEvent = function(evt) {}; /** @@ -1181,8 +1576,7 @@ SharedWorker.prototype.port; /** * Called on network errors for loading the initial script. - * TODO(tbreisacher): Should this change to function(!ErrorEvent)? - * @type {?function(!Event)} + * @type {?function(!ErrorEvent): void} */ SharedWorker.prototype.onerror; @@ -1227,10 +1621,10 @@ WorkerLocation.prototype.hash; */ function WorkerGlobalScope() {} -/** @type {WorkerGlobalScope} */ +/** @type {!WorkerGlobalScope} */ WorkerGlobalScope.prototype.self; -/** @type {WorkerLocation} */ +/** @type {!WorkerLocation} */ WorkerGlobalScope.prototype.location; /** @@ -1241,22 +1635,36 @@ WorkerGlobalScope.prototype.close = function() {}; /** * Sent when the worker encounters an error. - * @type {?function(!Event)} + * @type {?function(string, string, number, number, !Error): void} */ WorkerGlobalScope.prototype.onerror; /** * Sent when the worker goes offline. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ WorkerGlobalScope.prototype.onoffline; /** * Sent when the worker goes online. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ WorkerGlobalScope.prototype.ononline; +/** @type {!WorkerPerformance} */ +WorkerGlobalScope.prototype.performance; + +/** @type {!WorkerNavigator} */ +WorkerGlobalScope.prototype.navigator; + +/** + * Worker postMessage method. + * @param {*} message + * @param {(!Array)=} transfer + * @return {void} + */ +WorkerGlobalScope.prototype.postMessage = function(message, transfer) {}; + /** * @see http://dev.w3.org/html5/workers/ * @interface @@ -1284,7 +1692,7 @@ DedicatedWorkerGlobalScope.prototype.webkitPostMessage = /** * Sent when the creator posts a message to this worker. - * @type {?function(!MessageEvent<*>)} + * @type {?function(!MessageEvent<*>): void} */ DedicatedWorkerGlobalScope.prototype.onmessage; @@ -1304,9 +1712,38 @@ SharedWorkerGlobalScope.prototype.name; */ SharedWorkerGlobalScope.prototype.onconnect; +/** @type {!Array|undefined} */ +HTMLElement.observedAttributes; + +/** + * @param {!Document} oldDocument + * @param {!Document} newDocument + */ +HTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {}; + +/** + * @param {!{mode: string}} options + * @return {!ShadowRoot} + */ +HTMLElement.prototype.attachShadow = function(options) {}; + +/** + * @param {string} attributeName + * @param {?string} oldValue + * @param {?string} newValue + * @param {?string} namespace + */ +HTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {}; + +/** @type {function()|undefined} */ +HTMLElement.prototype.connectedCallback; + /** @type {Element} */ HTMLElement.prototype.contextMenu; +/** @type {function()|undefined} */ +HTMLElement.prototype.disconnectedCallback; + /** @type {boolean} */ HTMLElement.prototype.draggable; @@ -1315,20 +1752,10 @@ HTMLElement.prototype.draggable; * interface isn't currently defined and no known browsers implement this * feature, just define the property for now. * - * @const - * @type {Object} + * @const {Object} */ HTMLElement.prototype.dropzone; -/** - * @see http://www.w3.org/TR/html5/dom.html#dom-getelementsbyclassname - * @param {string} classNames - * @return {!NodeList} - * @nosideeffects - */ -HTMLElement.prototype.getElementsByClassName = function(classNames) {}; -// NOTE: Document.prototype.getElementsByClassName is in gecko_dom.js - /** @type {boolean} */ HTMLElement.prototype.hidden; @@ -1346,7 +1773,7 @@ var GetRootNodeOptions; /** * @see https://dom.spec.whatwg.org/#dom-node-getrootnode * @param {GetRootNodeOptions=} opt_options - * @return {?Node} + * @return {!Node} */ Node.prototype.getRootNode = function(opt_options) {}; @@ -1392,6 +1819,13 @@ HTMLElement.prototype.attachedCallback; */ HTMLElement.prototype.detachedCallback; +/** + * Cryptographic nonce used by Content Security Policy. + * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement + * @type {?string} + */ +HTMLElement.prototype.nonce; + /** @type {string} */ HTMLAnchorElement.prototype.download; @@ -1423,6 +1857,9 @@ HTMLAnchorElement.prototype.port; /** @type {string} */ HTMLAnchorElement.prototype.protocol; +/** @type {!DOMTokenList} */ +HTMLAnchorElement.prototype.relList; + /** @type {string} */ HTMLAnchorElement.prototype.search; @@ -1437,16 +1874,29 @@ HTMLAreaElement.prototype.ping; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc */ HTMLIFrameElement.prototype.srcdoc; /** - * @type {?string} + * @type {?DOMTokenList} * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox */ HTMLIFrameElement.prototype.sandbox; +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-allow + */ +HTMLIFrameElement.prototype.allow; + +/** + * @type {Window} + * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/contentWindow + */ +HTMLIFrameElement.prototype.contentWindow; + /** @type {string} */ HTMLInputElement.prototype.autocomplete; @@ -1518,39 +1968,117 @@ HTMLInputElement.prototype.stepUp = function(opt_n) {}; function HTMLMediaElement() {} /** - * @type {number} - * @const + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty + * @const {number} */ -HTMLMediaElement.HAVE_NOTHING; // = 0 +HTMLMediaElement.NETWORK_EMPTY; /** - * @type {number} - * @const + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty + * @const {number} */ -HTMLMediaElement.HAVE_METADATA; // = 1 +HTMLMediaElement.prototype.NETWORK_EMPTY; /** - * @type {number} - * @const + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle + * @const {number} */ -HTMLMediaElement.HAVE_CURRENT_DATA; // = 2 +HTMLMediaElement.NETWORK_IDLE; /** - * @type {number} - * @const + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle + * @const {number} */ -HTMLMediaElement.HAVE_FUTURE_DATA; // = 3 +HTMLMediaElement.prototype.NETWORK_IDLE; /** - * @type {number} - * @const + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading + * @const {number} + */ +HTMLMediaElement.NETWORK_LOADING; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading + * @const {number} + */ +HTMLMediaElement.prototype.NETWORK_LOADING; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source + * @const {number} + */ +HTMLMediaElement.NETWORK_NO_SOURCE; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source + * @const {number} + */ +HTMLMediaElement.prototype.NETWORK_NO_SOURCE; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing + * @const {number} + */ +HTMLMediaElement.HAVE_NOTHING; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing + * @const {number} */ -HTMLMediaElement.HAVE_ENOUGH_DATA; // = 4 +HTMLMediaElement.prototype.HAVE_NOTHING; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata + * @const {number} + */ +HTMLMediaElement.HAVE_METADATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata + * @const {number} + */ +HTMLMediaElement.prototype.HAVE_METADATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data + * @const {number} + */ +HTMLMediaElement.HAVE_CURRENT_DATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data + * @const {number} + */ +HTMLMediaElement.prototype.HAVE_CURRENT_DATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data + * @const {number} + */ +HTMLMediaElement.HAVE_FUTURE_DATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data + * @const {number} + */ +HTMLMediaElement.prototype.HAVE_FUTURE_DATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data + * @const {number} + */ +HTMLMediaElement.HAVE_ENOUGH_DATA; + +/** + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data + * @const {number} + */ +HTMLMediaElement.prototype.HAVE_ENOUGH_DATA; /** @type {MediaError} */ HTMLMediaElement.prototype.error; -/** @type {string} */ +/** @type {string} @implicitCast */ HTMLMediaElement.prototype.src; /** @type {string} */ @@ -1562,9 +2090,12 @@ HTMLMediaElement.prototype.networkState; /** @type {boolean} */ HTMLMediaElement.prototype.autobuffer; -/** @type {TimeRanges} */ +/** @type {!TimeRanges} */ HTMLMediaElement.prototype.buffered; +/** @type {?MediaStream} */ +HTMLMediaElement.prototype.srcObject; + /** * Loads the media element. * @return {undefined} @@ -1652,12 +2183,21 @@ HTMLImageElement.prototype.onload; /** @type {?function(Event)} */ HTMLImageElement.prototype.onerror; +/** @type {string} */ +HTMLMediaElement.prototype.preload; + /** @type {number} */ HTMLMediaElement.prototype.readyState; /** @type {boolean} */ HTMLMediaElement.prototype.seeking; +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin + */ +HTMLMediaElement.prototype.crossOrigin; + /** * The current time, in seconds. * @type {number} @@ -1702,7 +2242,9 @@ HTMLMediaElement.prototype.loop; /** * Starts playing the media. - * @return {undefined} + * @return {?Promise} This is a *nullable* Promise on purpose unlike + * the HTML5 spec because supported older browsers (incl. Smart TVs) don't + * return a Promise. */ HTMLMediaElement.prototype.play = function() {}; @@ -1729,14 +2271,64 @@ HTMLMediaElement.prototype.muted; * @param {string} kind Kind of the text track. * @param {string=} opt_label Label of the text track. * @param {string=} opt_language Language of the text track. - * @return {TextTrack} TextTrack object added to the media element. + * @return {!TextTrack} TextTrack object added to the media element. */ HTMLMediaElement.prototype.addTextTrack = function(kind, opt_label, opt_language) {}; -/** @type {TextTrackList} */ +/** @type {!TextTrackList} */ HTMLMediaElement.prototype.textTracks; +/** + * The ID of the audio device through which output is being delivered, or an + * empty string if using the default device. + * + * Implemented as a draft spec in Chrome 49+. + * + * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions + * @type {string} + */ +HTMLMediaElement.prototype.sinkId; + +/** + * Sets the audio device through which output should be delivered. + * + * Implemented as a draft spec in Chrome 49+. + * + * @param {string} sinkId The ID of the audio output device, or empty string + * for default device. + * + * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions + * @return {!Promise} + */ +HTMLMediaElement.prototype.setSinkId = function(sinkId) {}; + + +/** + * Produces a real-time capture of the media that is rendered to the media + * element. + * @return {!MediaStream} + * @see https://w3c.github.io/mediacapture-fromelement/#html-media-element-media-capture-extensions + */ +HTMLMediaElement.prototype.captureStream = function() {}; + +/** + * The Firefox flavor of captureStream. + * @return {!MediaStream} + * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/captureStream#Browser_compatibility + */ +HTMLMediaElement.prototype.mozCaptureStream = function() {}; + +/** + * @constructor + * @extends {HTMLElement} + * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement + * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions + * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api + */ +function HTMLUnknownElement() {} + + /** * @see http://www.w3.org/TR/shadow-dom/ @@ -1748,6 +2340,7 @@ Text.prototype.getDestinationInsertionPoints = function() {}; /** * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist * @constructor + * @implements {EventTarget} * @implements {IArrayLike} */ function TextTrackList() {} @@ -1761,6 +2354,16 @@ TextTrackList.prototype.length; */ TextTrackList.prototype.getTrackById = function(id) {}; +/** @override */ +TextTrackList.prototype.addEventListener = function( + type, listener, opt_useCapture) {}; + +/** @override */ +TextTrackList.prototype.dispatchEvent = function(evt) {}; + +/** @override */ +TextTrackList.prototype.removeEventListener = function( + type, listener, opt_options) {}; /** * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack @@ -1796,24 +2399,16 @@ TextTrack.prototype.cues; */ TextTrack.prototype.mode; -/** - * @override - * @return {undefined} - */ -TextTrack.prototype.addEventListener = function(type, listener, useCapture) {}; +/** @override */ +TextTrack.prototype.addEventListener = function( + type, listener, opt_useCapture) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ TextTrack.prototype.dispatchEvent = function(evt) {}; -/** - * @override - * @return {undefined} - */ -TextTrack.prototype.removeEventListener = function(type, listener, useCapture) - {}; +/** @override */ +TextTrack.prototype.removeEventListener = function( + type, listener, opt_options) {}; @@ -1857,13 +2452,97 @@ TextTrackCue.prototype.endTime; TextTrackCue.prototype.text; + +/** + * @see https://w3c.github.io/webvtt/#vttregion + * @constructor + */ +function VTTRegion() {} + +/** @type {string} */ +VTTRegion.prototype.id; + +/** @type {number} */ +VTTRegion.prototype.width; + +/** @type {number} */ +VTTRegion.prototype.lines; + +/** @type {number} */ +VTTRegion.prototype.regionAnchorX; + +/** @type {number} */ +VTTRegion.prototype.regionAnchorY; + +/** @type {number} */ +VTTRegion.prototype.viewportAnchorX; + +/** @type {number} */ +VTTRegion.prototype.viewportAnchorY; + +/** + * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting + * @type {string} + */ +VTTRegion.prototype.scroll; + + + /** * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface * @constructor * @extends {TextTrackCue} + * @param {number} startTime + * @param {number} endTime + * @param {string} text */ function VTTCue(startTime, endTime, text) {} +/** @type {?VTTRegion} */ +VTTCue.prototype.region; + +/** + * @see https://w3c.github.io/webvtt/#enumdef-directionsetting + * @type {string} + */ +VTTCue.prototype.vertical; + +/** @type {boolean} */ +VTTCue.prototype.snapToLines; + +/** @type {(number|string)} */ +VTTCue.prototype.line; + +/** + * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting + * @type {string} + */ +VTTCue.prototype.lineAlign; + +/** @type {(number|string)} */ +VTTCue.prototype.position; + +/** + * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting + * @type {string} + */ +VTTCue.prototype.positionAlign; + +/** @type {number} */ +VTTCue.prototype.size; + +/** + * @see https://w3c.github.io/webvtt/#enumdef-alignsetting + * @type {string} + */ +VTTCue.prototype.align; + +/** @type {string} */ +VTTCue.prototype.text; + +/** @return {!DocumentFragment} */ +VTTCue.prototype.getCueAsHTML = function() {}; + /** * @constructor @@ -1875,7 +2554,7 @@ function HTMLAudioElement() {} * @constructor * @extends {HTMLMediaElement} * The webkit-prefixed attributes are defined in - * https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/html/HTMLVideoElement.idl + * https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl */ function HTMLVideoElement() {} @@ -1936,7 +2615,8 @@ HTMLVideoElement.prototype.webkitDroppedFrameCount; * totalVideoFrames: number, * droppedVideoFrames: number, * corruptedVideoFrames: number, - * totalFrameDelay: number + * totalFrameDelay: number, + * displayCompositedVideoFrames: (number|undefined) * }} */ var VideoPlaybackQuality; @@ -1948,38 +2628,140 @@ var VideoPlaybackQuality; HTMLVideoElement.prototype.getVideoPlaybackQuality = function() {}; +/** + * The metadata provided by the callback given to + * HTMLVideoElement.requestVideoFrameCallback(). + * + * See https://wicg.github.io/video-rvfc/#video-frame-metadata + * + * @record + */ +function VideoFrameMetadata() {}; + +/** + * The time at which the user agent submitted the frame for composition. + * @const {number} + */ +VideoFrameMetadata.prototype.presentationTime; + +/** + * The time at which the user agent expects the frame to be visible. + * @const {number} + */ +VideoFrameMetadata.prototype.expectedDisplayTime; + +/** + * The width of the video frame, in media pixels. + * @const {number} + */ +VideoFrameMetadata.prototype.width; + +/** + * The height of the video frame, in media pixels. + * @const {number} + */ +VideoFrameMetadata.prototype.height; + +/** + * The media presentation timestamp (PTS) in seconds of the frame presented + * (e.g. its timestamp on the video.currentTime timeline). + * @const {number} + */ +VideoFrameMetadata.prototype.mediaTime; + +/** + * A count of the number of frames submitted for composition. + * @const {number} + */ +VideoFrameMetadata.prototype.presentedFrames; + +/** + * The elapsed duration in seconds from submission of the encoded packet with + * the same presentation timestamp (PTS) as this frame (e.g. same as the + * mediaTime) to the decoder until the decoded frame was ready for presentation. + * @const {number|undefined} + */ +VideoFrameMetadata.prototype.processingDuration; + +/** + * For video frames coming from either a local or remote source, this is the + * time at which the frame was captured by the camera. + * @const {number|undefined} + */ +VideoFrameMetadata.prototype.captureTime; + +/** + * For video frames coming from a remote source, this is the time the encoded + * frame was received by the platform, i.e., the time at which the last packet + * belonging to this frame was received over the network. + * @const {number|undefined} + */ +VideoFrameMetadata.prototype.receiveTime; + +/** + * The RTP timestamp associated with this video frame. + * @const {number|undefined} + */ +VideoFrameMetadata.prototype.rtpTimestamp; + +/** + * @typedef {function(number, ?VideoFrameMetadata): undefined} + * @see https://wicg.github.io/video-rvfc/#dom-htmlvideoelement-requestvideoframecallback + */ +var VideoFrameRequestCallback; + +/** + * Registers a callback to be fired the next time a frame is presented to the + * compositor. + * @param {!VideoFrameRequestCallback} callback + * @return {number} + */ +HTMLVideoElement.prototype.requestVideoFrameCallback = function(callback) {}; + +/** + * Cancels an existing video frame request callback given its handle. + * @param {number} handle + * @return {undefined} + */ +HTMLVideoElement.prototype.cancelVideoFrameCallback = function(handle) {}; + + /** * @constructor + * @see https://html.spec.whatwg.org/multipage/media.html#error-codes */ function MediaError() {} /** @type {number} */ MediaError.prototype.code; +/** @type {string} */ +MediaError.prototype.message; + /** * The fetching process for the media resource was aborted by the user agent at * the user's request. - * @type {number} + * @const {number} */ MediaError.MEDIA_ERR_ABORTED; /** * A network error of some description caused the user agent to stop fetching * the media resource, after the resource was established to be usable. - * @type {number} + * @const {number} */ MediaError.MEDIA_ERR_NETWORK; /** * An error of some description occurred while decoding the media resource, * after the resource was established to be usable. - * @type {number} + * @const {number} */ MediaError.MEDIA_ERR_DECODE; /** * The media resource indicated by the src attribute was not suitable. - * @type {number} + * @const {number} */ MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED; @@ -2011,26 +2793,15 @@ MessageChannel.prototype.port2; */ function MessagePort() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -MessagePort.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; +/** @override */ +MessagePort.prototype.addEventListener = function(type, listener, opt_options) { +}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ +/** @override */ MessagePort.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ MessagePort.prototype.dispatchEvent = function(evt) {}; @@ -2058,20 +2829,51 @@ MessagePort.prototype.close = function() {}; /** * TODO(blickly): Change this to MessageEvent<*> and add casts as needed - * @type {?function(!MessageEvent)} + * @type {?function(!MessageEvent): void} */ MessagePort.prototype.onmessage; // HTML5 MessageEvent class /** - * @see http://dev.w3.org/html5/spec/comms.html#messageevent + * @typedef {Window|MessagePort|ServiceWorker} + * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource + */ +var MessageEventSource; + + +/** + * @record + * @extends {EventInit} + * @template T + * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit + */ +function MessageEventInit() {} + +/** @type {T|undefined} */ +MessageEventInit.prototype.data; + +/** @type {(string|undefined)} */ +MessageEventInit.prototype.origin; + +/** @type {(string|undefined)} */ +MessageEventInit.prototype.lastEventId; + +/** @type {(?MessageEventSource|undefined)} */ +MessageEventInit.prototype.source; + +/** @type {(!Array|undefined)} */ +MessageEventInit.prototype.ports; + + +/** + * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent * @constructor * @extends {Event} - * @template T * @param {string} type - * @param {Object=} init + * @param {MessageEventInit=} opt_eventInitDict + * @template T */ -function MessageEvent(type, init) {} +function MessageEvent(type, opt_eventInitDict) {} /** * The data payload of the message. @@ -2101,7 +2903,7 @@ MessageEvent.prototype.source; /** * The Array of MessagePorts sent with the message, for cross-document * messaging and channel messaging. - * @type {Array} + * @type {!Array} */ MessageEvent.prototype.ports; @@ -2109,13 +2911,13 @@ MessageEvent.prototype.ports; * Initializes the event in a manner analogous to the similarly-named methods in * the DOM Events interfaces. * @param {string} typeArg - * @param {boolean} canBubbleArg - * @param {boolean} cancelableArg - * @param {T} dataArg - * @param {string} originArg - * @param {string} lastEventIdArg - * @param {Window} sourceArg - * @param {Array} portsArg + * @param {boolean=} canBubbleArg + * @param {boolean=} cancelableArg + * @param {T=} dataArg + * @param {string=} originArg + * @param {string=} lastEventIdArg + * @param {?MessageEventSource=} sourceArg + * @param {!Array=} portsArg * @return {undefined} */ MessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg, @@ -2125,20 +2927,65 @@ MessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg, * Initializes the event in a manner analogous to the similarly-named methods in * the DOM Events interfaces. * @param {string} namespaceURI - * @param {string} typeArg - * @param {boolean} canBubbleArg - * @param {boolean} cancelableArg - * @param {T} dataArg - * @param {string} originArg - * @param {string} lastEventIdArg - * @param {Window} sourceArg - * @param {Array} portsArg + * @param {string=} typeArg + * @param {boolean=} canBubbleArg + * @param {boolean=} cancelableArg + * @param {T=} dataArg + * @param {string=} originArg + * @param {string=} lastEventIdArg + * @param {?MessageEventSource=} sourceArg + * @param {!Array=} portsArg * @return {undefined} */ MessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {}; +/** + * @record + * @extends {EventInit} + * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface + */ +function CloseEventInit() {} + +/** + * @type {undefined|boolean} + */ +CloseEventInit.prototype.wasClean; + +/** + * @type {undefined|number} + */ +CloseEventInit.prototype.code; + +/** + * @type {undefined|string} + */ +CloseEventInit.prototype.reason; + +/** + * @constructor + * @extends {Event} + * @param {string} type + * @param {!CloseEventInit=} opt_init + */ +var CloseEvent = function(type, opt_init) {}; + +/** + * @type {boolean} + */ +CloseEvent.prototype.wasClean; + +/** + * @type {number} + */ +CloseEvent.prototype.code; + +/** + * @type {string} + */ +CloseEvent.prototype.reason; + /** * HTML5 BroadcastChannel class. * @param {string} channelName @@ -2154,25 +3001,25 @@ function BroadcastChannel(channelName) {} * listening to the same channel. * @param {*} message */ -BroadcastChannel.prototype.postMessage; +BroadcastChannel.prototype.postMessage = function(message) {}; /** * Closes the channel object, indicating it won't get any new messages, and * allowing it to be, eventually, garbage collected. * @return {void} */ -BroadcastChannel.prototype.close; +BroadcastChannel.prototype.close = function() {}; /** @override */ BroadcastChannel.prototype.addEventListener = function( - type, listener, useCapture) {}; + type, listener, opt_options) {}; /** @override */ BroadcastChannel.prototype.dispatchEvent = function(evt) {}; /** @override */ BroadcastChannel.prototype.removeEventListener = function( - type, listener, useCapture) {}; + type, listener, opt_options) {}; /** * An EventHandler property that specifies the function to execute when a @@ -2190,15 +3037,10 @@ BroadcastChannel.prototype.name; /** * HTML5 DataTransfer class. * - * We say that this extends ClipboardData, because Event.prototype.clipboardData - * is a DataTransfer on WebKit but a ClipboardData on IE. The interfaces are so - * similar that it's easier to merge them. - * * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html * @see http://developers.whatwg.org/dnd.html#datatransferitem * @constructor - * @extends {ClipboardData} */ function DataTransfer() {} @@ -2208,15 +3050,14 @@ DataTransfer.prototype.dropEffect; /** @type {string} */ DataTransfer.prototype.effectAllowed; -/** @type {Array} */ +/** @type {!Array} */ DataTransfer.prototype.types; -/** @type {FileList} */ +/** @type {!FileList} */ DataTransfer.prototype.files; /** * @param {string=} opt_format Format for which to remove data. - * @override * @return {undefined} */ DataTransfer.prototype.clearData = function(opt_format) {}; @@ -2224,7 +3065,6 @@ DataTransfer.prototype.clearData = function(opt_format) {}; /** * @param {string} format Format for which to set data. * @param {string} data Data to add. - * @override * @return {boolean} */ DataTransfer.prototype.setData = function(format, data) {}; @@ -2232,7 +3072,6 @@ DataTransfer.prototype.setData = function(format, data) {}; /** * @param {string} format Format for which to set data. * @return {string} Data for the given format. - * @override */ DataTransfer.prototype.getData = function(format) { return ''; }; @@ -2285,13 +3124,13 @@ WheelEventInit.prototype.deltaMode; */ function WheelEvent(type, opt_eventInitDict) {} -/** @type {number} */ +/** @const {number} */ WheelEvent.DOM_DELTA_PIXEL; -/** @type {number} */ +/** @const {number} */ WheelEvent.DOM_DELTA_LINE; -/** @type {number} */ +/** @const {number} */ WheelEvent.DOM_DELTA_PAGE; /** @const {number} */ @@ -2334,14 +3173,6 @@ DataTransferItem.prototype.getAsString = function(callback) {}; */ DataTransferItem.prototype.getAsFile = function() { return null; }; -/** - * @return {?Entry} The Entry corresponding to this item, or null. Note that - * despite its name,this method only works in Chrome, and will eventually - * be renamed to {@code getAsEntry}. - * @nosideeffects - */ -DataTransferItem.prototype.webkitGetAsEntry = function() { return null; }; - /** * HTML5 DataTransferItemList class. There are some discrepancies in the docs * on the whatwg.org site. When in doubt, these prototypes match what is @@ -2432,6 +3263,7 @@ ProgressEventInit.prototype.total; /** * @constructor + * @template TARGET * @param {string} type * @param {ProgressEventInit=} opt_progressEventInitDict * @extends {Event} @@ -2439,6 +3271,12 @@ ProgressEventInit.prototype.total; */ function ProgressEvent(type, opt_progressEventInitDict) {} +/** + * @override + * @type {TARGET} + */ +ProgressEvent.prototype.target; + /** @type {number} */ ProgressEvent.prototype.total; @@ -2474,58 +3312,70 @@ TimeRanges.prototype.end = function(index) { return 0; }; // HTML5 Web Socket class /** - * @see http://dev.w3.org/html5/websockets/ + * @see https://html.spec.whatwg.org/multipage/web-sockets.html * @constructor * @param {string} url - * @param {string=} opt_protocol + * @param {(string|!Array)=} opt_protocol * @implements {EventTarget} */ function WebSocket(url, opt_protocol) {} /** * The connection has not yet been established. - * @type {number} + * @const {number} + */ +WebSocket.CONNECTING; + +/** + * The connection has not yet been established. + * @const {number} */ -WebSocket.CONNECTING = 0; +WebSocket.prototype.CONNECTING; /** * The WebSocket connection is established and communication is possible. - * @type {number} + * @const {number} */ -WebSocket.OPEN = 1; +WebSocket.OPEN; /** - * The connection is going through the closing handshake, or the close() method has been invoked. - * @type {number} + * The WebSocket connection is established and communication is possible. + * @const {number} */ -WebSocket.CLOSING = 2; +WebSocket.prototype.OPEN; /** - * The connection has been closed or could not be opened. - * @type {number} + * The connection is going through the closing handshake, or the close() method has been invoked. + * @const {number} */ -WebSocket.CLOSED = 3; +WebSocket.CLOSING; /** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} + * The connection is going through the closing handshake, or the close() method has been invoked. + * @const {number} */ -WebSocket.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; +WebSocket.prototype.CLOSING; /** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} + * The connection has been closed or could not be opened. + * @const {number} */ -WebSocket.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; +WebSocket.CLOSED; /** - * @override - * @return {boolean} + * The connection has been closed or could not be opened. + * @const {number} */ +WebSocket.prototype.CLOSED; + +/** @override */ +WebSocket.prototype.addEventListener = function(type, listener, opt_options) {}; + +/** @override */ +WebSocket.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ WebSocket.prototype.dispatchEvent = function(evt) {}; /** @@ -2546,29 +3396,34 @@ WebSocket.prototype.readyState; */ WebSocket.prototype.bufferedAmount; +/** + * An event handler called on error event. + * @type {?function(!Event): void} + */ +WebSocket.prototype.onerror; + /** * An event handler called on open event. - * @type {?function(!Event)} + * @type {?function(!Event): void} */ WebSocket.prototype.onopen; /** * An event handler called on message event. - * TODO(blickly): Change this to MessageEvent<*> and add casts as needed - * @type {?function(!MessageEvent)} + * @type {?function(!MessageEvent): void} */ WebSocket.prototype.onmessage; /** * An event handler called on close event. - * @type {?function(!Event)} + * @type {?function(!CloseEvent): void} */ WebSocket.prototype.onclose; /** * Transmits data using the connection. - * @param {string|ArrayBuffer|ArrayBufferView} data - * @return {boolean} + * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data + * @return {void} */ WebSocket.prototype.send = function(data) {}; @@ -2588,9 +3443,45 @@ WebSocket.prototype.binaryType; // HTML5 History /** * @constructor + * @see http://w3c.github.io/html/browsers.html#the-history-interface */ function History() {} +/** + * Goes back one step in the joint session history. + * If there is no previous page, does nothing. + * + * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back + * + * @return {undefined} + */ +History.prototype.back = function() {}; + +/** + * Goes forward one step in the joint session history. + * If there is no next page, does nothing. + * + * @return {undefined} + */ +History.prototype.forward = function() {}; + +/** + * The number of entries in the joint session history. + * + * @type {number} + */ +History.prototype.length; + +/** + * Goes back or forward the specified number of steps in the joint session + * history. A zero delta will reload the current page. If the delta is out of + * range, does nothing. + * + * @param {number} delta The number of entries to go back. + * @return {undefined} + */ +History.prototype.go = function(delta) {}; + /** * Pushes a new state into the session history. * @see http://www.w3.org/TR/html5/history.html#the-history-interface @@ -2630,6 +3521,128 @@ History.prototype.state; */ History.prototype.scrollRestoration; +/** + * Add history property to Window. + * + * @type {!History} + */ +Window.prototype.history; + +/** + * @constructor + * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface + */ +function Location() {} + +/** + * Returns the Location object's URL. Can be set, to navigate to the given URL. + * @implicitCast + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href + */ +Location.prototype.href; + +/** + * Returns the Location object's URL's origin. + * @const {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin + */ +Location.prototype.origin; + +/** + * Returns the Location object's URL's scheme. Can be set, to navigate to the + * same URL with a changed scheme. + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol + */ +Location.prototype.protocol; + +/** + * Returns the Location object's URL's host and port (if different from the + * default port for the scheme). Can be set, to navigate to the same URL with + * a changed host and port. + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host + */ +Location.prototype.host; + +/** + * Returns the Location object's URL's host. Can be set, to navigate to the + * same URL with a changed host. + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname + */ +Location.prototype.hostname; + +/** + * Returns the Location object's URL's port. Can be set, to navigate to the + * same URL with a changed port. + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port + */ +Location.prototype.port; + +/** + * Returns the Location object's URL's path. Can be set, to navigate to the + * same URL with a changed path. + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname + */ +Location.prototype.pathname; + +/** + * Returns the Location object's URL's query (includes leading "?" if + * non-empty). Can be set, to navigate to the same URL with a changed query + * (ignores leading "?"). + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search + */ +Location.prototype.search; + +/** + * Returns the Location object's URL's fragment (includes leading "#" if + * non-empty). Can be set, to navigate to the same URL with a changed fragment + * (ignores leading "#"). + * @type {string} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash + */ +Location.prototype.hash; + +/** + * Navigates to the given page. + * @param {string} url + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign + */ +Location.prototype.assign = function(url) {}; + +/** + * Removes the current page from the session history and navigates to the given + * page. + * @param {string} url + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace + */ +Location.prototype.replace = function(url) {}; + +/** + * Reloads the current page. + * @param {boolean=} forceReload If true, reloads the page from + * the server. Defaults to false. + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload + */ +Location.prototype.reload = function(forceReload) {}; + +/** + * Returns a DOMStringList object listing the origins of the ancestor browsing + * contexts, from the parent browsing context to the top-level browsing + * context. + * @type {DOMStringList} + * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins + */ +Location.prototype.ancestorOrigins; + /** * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent * @constructor @@ -2812,26 +3825,15 @@ XMLHttpRequest.prototype.mozResponseArrayBuffer; */ function XMLHttpRequestEventTarget() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ +/** @override */ XMLHttpRequestEventTarget.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; + type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ +/** @override */ XMLHttpRequestEventTarget.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ XMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {}; /** @@ -2861,8 +3863,7 @@ function Image(opt_width, opt_height) {} * Dataset collection. * This is really a DOMStringMap but it behaves close enough to an object to * pass as an object. - * @type {Object} - * @const + * @const {!Object} */ HTMLElement.prototype.dataset; @@ -2880,6 +3881,12 @@ function DOMTokenList() {} */ DOMTokenList.prototype.length; +/** + * Returns the string value applied to this Element. + * @type {string|undefined} + */ +DOMTokenList.prototype.value; + /** * @param {number} index The index of the item to return. * @return {string} The CSS class at the specified index. @@ -2906,6 +3913,22 @@ DOMTokenList.prototype.add = function(var_args) {}; */ DOMTokenList.prototype.remove = function(var_args) {}; +/** + * Replaces token with newToken. + * @param {string} token The CSS class to replace. + * @param {string} newToken The new CSS class to use. + * @return {undefined} + */ +DOMTokenList.prototype.replace = function(token, newToken) {}; + +/** + * @param {string} token The token to query for. + * @return {boolean} Whether the token was found. + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/supports + * @nosideeffects + */ +DOMTokenList.prototype.supports = function(token) {}; + /** * @param {string} token The CSS class to toggle from this element. * @param {boolean=} opt_force True to add the class whether it exists @@ -2924,11 +3947,18 @@ DOMTokenList.prototype.toggle = function(token, opt_force) {}; */ DOMTokenList.prototype.toString = function() {}; +/** + * @return {!IteratorIterable} An iterator to go through all values of + * the key/value pairs contained in this object. + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/values + */ +DOMTokenList.prototype.values = function() {}; + /** * A better interface to CSS classes than className. - * @type {!DOMTokenList} + * @const {!DOMTokenList} * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList - * @const */ Element.prototype.classList; @@ -2987,8 +4017,9 @@ ValidityState.prototype.valueMissing; HTMLButtonElement.prototype.autofocus; /** - * @const - * @type {NodeList} + * Can return null when hidden. + * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels + * @const {?NodeList} */ HTMLButtonElement.prototype.labels; @@ -2996,8 +4027,7 @@ HTMLButtonElement.prototype.labels; HTMLButtonElement.prototype.validationMessage; /** - * @const - * @type {ValidityState} + * @const {ValidityState} */ HTMLButtonElement.prototype.validity; @@ -3018,6 +4048,7 @@ HTMLButtonElement.prototype.setCustomValidity = function(message) {}; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction */ HTMLButtonElement.prototype.formAction; @@ -3048,6 +4079,7 @@ HTMLInputElement.prototype.formNoValidate; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction */ HTMLInputElement.prototype.formAction; @@ -3065,23 +4097,58 @@ HTMLInputElement.prototype.formEnctype; HTMLInputElement.prototype.formMethod; /** - * @type {string} - * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget + * @type {string} + * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget + */ +HTMLInputElement.prototype.formTarget; + +/** + * Can return null when hidden. + * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels + * @const {?NodeList} + */ +HTMLInputElement.prototype.labels; + +/** @type {string} */ +HTMLInputElement.prototype.validationMessage; + +/** + * @type {number} + * @implicitCast + */ +HTMLInputElement.prototype.selectionStart; + +/** + * @type {number} + * @implicitCast + */ +HTMLInputElement.prototype.selectionEnd; + +/** @type {string} */ +HTMLInputElement.prototype.selectionDirection; + +/** + * @param {number} start + * @param {number} end + * @param {string=} direction + * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange + * @return {undefined} */ -HTMLInputElement.prototype.formTarget; +HTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {}; /** - * @const - * @type {NodeList} + * @param {string} replacement + * @param {number=} start + * @param {number=} end + * @param {string=} selectionMode + * @see https://html.spec.whatwg.org/#dom-textarea/input-setrangetext + * @return {undefined} */ -HTMLInputElement.prototype.labels; - -/** @type {string} */ -HTMLInputElement.prototype.validationMessage; +HTMLInputElement.prototype.setRangeText = + function(replacement, start, end, selectionMode) {}; /** - * @const - * @type {ValidityState} + * @const {ValidityState} */ HTMLInputElement.prototype.validity; @@ -3107,8 +4174,9 @@ HTMLLabelElement.prototype.control; HTMLSelectElement.prototype.autofocus; /** - * @const - * @type {NodeList} + * Can return null when hidden. + * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels + * @const {?NodeList} */ HTMLSelectElement.prototype.labels; @@ -3119,8 +4187,7 @@ HTMLSelectElement.prototype.selectedOptions; HTMLSelectElement.prototype.validationMessage; /** - * @const - * @type {ValidityState} + * @const {ValidityState} */ HTMLSelectElement.prototype.validity; @@ -3143,17 +4210,29 @@ HTMLSelectElement.prototype.setCustomValidity = function(message) {}; HTMLTextAreaElement.prototype.autofocus; /** - * @const - * @type {NodeList} + * Can return null when hidden. + * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels + * @const {?NodeList} */ HTMLTextAreaElement.prototype.labels; +/** @type {number} */ +HTMLTextAreaElement.prototype.maxLength; + +/** @type {number} */ +HTMLTextAreaElement.prototype.minLength; + +/** @type {string} */ +HTMLTextAreaElement.prototype.placeholder; + +/** @type {number} */ +HTMLTextAreaElement.prototype.textLength; + /** @type {string} */ HTMLTextAreaElement.prototype.validationMessage; /** - * @const - * @type {ValidityState} + * @const {ValidityState} */ HTMLTextAreaElement.prototype.validity; @@ -3193,6 +4272,7 @@ HTMLEmbedElement.prototype.height; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src */ HTMLEmbedElement.prototype.src; @@ -3206,10 +4286,20 @@ HTMLEmbedElement.prototype.type; // Fullscreen APIs. /** - * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-element-requestfullscreen - * @return {undefined} + * @record + * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions + */ +function FullscreenOptions() {} + +/** @type {string} */ +FullscreenOptions.prototype.navigationUI; + +/** + * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen + * @param {!FullscreenOptions=} options + * @return {!Promise} */ -Element.prototype.requestFullscreen = function() {}; +Element.prototype.requestFullscreen = function(options) {}; /** * @type {boolean} @@ -3288,7 +4378,7 @@ Document.prototype.webkitFullScreenKeyboardInputAllowed; Element.prototype.msRequestFullscreen = function() {}; /** @return {void} */ -Element.prototype.msExitFullscreen = function() {}; +Document.prototype.msExitFullscreen = function() {}; /** @type {boolean} */ Document.prototype.msFullscreenEnabled; @@ -3296,11 +4386,11 @@ Document.prototype.msFullscreenEnabled; /** @type {Element} */ Document.prototype.msFullscreenElement; -/** @type {number} */ -Element.ALLOW_KEYBOARD_INPUT = 1; +/** @const {number} */ +Element.ALLOW_KEYBOARD_INPUT; -/** @type {number} */ -Element.prototype.ALLOW_KEYBOARD_INPUT = 1; +/** @const {number} */ +Element.prototype.ALLOW_KEYBOARD_INPUT; /** @@ -3326,16 +4416,16 @@ MutationRecord.prototype.type; /** @type {Node} */ MutationRecord.prototype.target; -/** @type {NodeList} */ +/** @type {!NodeList} */ MutationRecord.prototype.addedNodes; -/** @type {NodeList} */ +/** @type {!NodeList} */ MutationRecord.prototype.removedNodes; -/** @type {Node} */ +/** @type {?Node} */ MutationRecord.prototype.previousSibling; -/** @type {Node} */ +/** @type {?Node} */ MutationRecord.prototype.nextSibling; /** @type {?string} */ @@ -3350,7 +4440,7 @@ MutationRecord.prototype.oldValue; /** * @see http://www.w3.org/TR/domcore/#mutation-observers - * @param {function(Array, MutationObserver)} callback + * @param {function(!Array, !MutationObserver)} callback * @constructor */ function MutationObserver(callback) {} @@ -3426,19 +4516,20 @@ Document.prototype.msHidden; * @see http://www.w3.org/TR/components-intro/ * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register * @param {string} type - * @param {{extends: (string|undefined), prototype: (Object|undefined)}=} options - * @return {!Function} a constructor for the new tag. A generic function is the best we - * can do here as it allows the return value to be annotated properly - * at the call site. + * @param {{extends: (string|undefined), prototype: (Object|undefined)}=} + * options + * @return {function(new:Element, ...*)} a constructor for the new tag. + * @deprecated document.registerElement() is deprecated in favor of + * customElements.define() */ Document.prototype.registerElement = function(type, options) {}; /** - * This method is deprecated and should be removed by the end of 2014. * @see http://www.w3.org/TR/components-intro/ * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register * @param {string} type * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options + * @deprecated This method has been removed and will be removed soon from this file. */ Document.prototype.register = function(type, options) {}; @@ -3450,6 +4541,7 @@ Document.prototype.fonts; /** + * @type {?HTMLScriptElement} * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript */ Document.prototype.currentScript; @@ -3481,31 +4573,6 @@ ShadowRoot.prototype.host; ShadowRoot.prototype.getElementById = function(id) {}; -/** - * @param {string} className - * @return {!NodeList} - * @nosideeffects - */ -ShadowRoot.prototype.getElementsByClassName = function(className) {}; - - -/** - * @param {string} tagName - * @return {!NodeList} - * @nosideeffects - */ -ShadowRoot.prototype.getElementsByTagName = function(tagName) {}; - - -/** - * @param {string} namespace - * @param {string} localName - * @return {!NodeList} - * @nosideeffects - */ -ShadowRoot.prototype.getElementsByTagNameNS = function(namespace, localName) {}; - - /** * @return {Selection} * @nosideeffects @@ -3523,31 +4590,36 @@ ShadowRoot.prototype.elementFromPoint = function(x, y) {}; /** - * @type {boolean} + * @param {number} x + * @param {number} y + * @return {!IArrayLike} + * @nosideeffects */ -ShadowRoot.prototype.applyAuthorStyles; +ShadowRoot.prototype.elementsFromPoint = function(x, y) {}; /** - * @type {boolean} + * @type {?Element} */ -ShadowRoot.prototype.resetStyleInheritance; +ShadowRoot.prototype.activeElement; /** - * @type {Element} + * @type {string} */ -ShadowRoot.prototype.activeElement; +ShadowRoot.prototype.mode; /** * @type {?ShadowRoot} + * @deprecated */ ShadowRoot.prototype.olderShadowRoot; /** * @type {string} + * @implicitCast */ ShadowRoot.prototype.innerHTML; @@ -3567,7 +4639,7 @@ ShadowRoot.prototype.styleSheets; function HTMLContentElement() {} /** - * @type {!string} + * @type {string} */ HTMLContentElement.prototype.select; @@ -3669,7 +4741,7 @@ HTMLSourceElement.prototype.media; /** @type {string} */ HTMLSourceElement.prototype.sizes; -/** @type {string} */ +/** @type {string} @implicitCast */ HTMLSourceElement.prototype.src; /** @type {string} */ @@ -3851,6 +4923,19 @@ HTMLTemplateElement.prototype.content; */ HTMLLinkElement.prototype.import; +/** + * @type {string} + * @see https://html.spec.whatwg.org/#attr-link-as + * @see https://w3c.github.io/preload/#as-attribute + */ +HTMLLinkElement.prototype.as; + +/** + * @see https://html.spec.whatwg.org/#attr-link-crossorigin + * @type {string} + */ +HTMLLinkElement.prototype.crossOrigin; + /** * @return {boolean} @@ -3909,6 +4994,11 @@ HTMLFieldSetElement.prototype.willValidate; */ function RadioNodeList() {} +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist + */ +RadioNodeList.prototype.value; /** @@ -3923,6 +5013,37 @@ function HTMLDataListElement() {} HTMLDataListElement.prototype.options; +/** + * @return {boolean} + * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element + */ +HTMLObjectElement.prototype.checkValidity; + +/** + * @param {string} message + * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element + * @return {undefined} + */ +HTMLObjectElement.prototype.setCustomValidity; + +/** + * @type {string} + * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element + */ +HTMLObjectElement.prototype.validationMessage; + +/** + * @type {!ValidityState} + * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element + */ +HTMLObjectElement.prototype.validity; + +/** + * @type {boolean} + * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element + */ +HTMLObjectElement.prototype.willValidate; + /** * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element @@ -3962,7 +5083,7 @@ HTMLOutputElement.prototype.defaultValue; HTMLOutputElement.prototype.value; /** - * @const {NodeList} + * @const {?NodeList} */ HTMLOutputElement.prototype.labels; @@ -4008,7 +5129,7 @@ HTMLProgressElement.prototype.max; HTMLProgressElement.prototype.position; -/** @type {NodeList} */ +/** @type {?NodeList} */ HTMLProgressElement.prototype.labels; @@ -4025,7 +5146,7 @@ function HTMLTrackElement() {} HTMLTrackElement.prototype.kind; -/** @type {string} */ +/** @type {string} @implicitCast */ HTMLTrackElement.prototype.src; @@ -4045,7 +5166,7 @@ HTMLTrackElement.prototype.default; HTMLTrackElement.prototype.readyState; -/** @const {TextTrack} */ +/** @const {!TextTrack} */ HTMLTrackElement.prototype.track; @@ -4082,15 +5203,28 @@ HTMLMeterElement.prototype.high; HTMLMeterElement.prototype.optimum; -/** @type {NodeList} */ +/** @type {?NodeList} */ HTMLMeterElement.prototype.labels; +/** + * @interface + * @see https://storage.spec.whatwg.org/#api + */ +function NavigatorStorage() {}; + +/** + * @type {!StorageManager} + */ +NavigatorStorage.prototype.storage; + /** * @constructor + * @implements NavigatorStorage * @see https://www.w3.org/TR/html5/webappapis.html#navigator */ function Navigator() {} + /** * @type {string} * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename @@ -4182,13 +5316,13 @@ Navigator.prototype.unregisterProtocolHandler = function(scheme, url) {} Navigator.prototype.unregisterContentHandler = function(mimeType, url) {} /** - * @type {MimeTypeArray} + * @type {!MimeTypeArray} * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes */ Navigator.prototype.mimeTypes; /** - * @type {PluginArray} + * @type {!PluginArray} * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins */ Navigator.prototype.plugins; @@ -4200,6 +5334,79 @@ Navigator.prototype.plugins; */ Navigator.prototype.javaEnabled = function() {}; +/** + * @type {number} + * @see https://developers.google.com/web/updates/2017/12/device-memory + * https://github.com/w3c/device-memory + */ +Navigator.prototype.deviceMemory; + +/** + * @type {!StorageManager} + * @see https://storage.spec.whatwg.org + */ +Navigator.prototype.storage; + +/** + * @param {!ShareData=} data + * @return {boolean} + * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/canShare + */ +Navigator.prototype.canShare = function(data) {}; + +/** + * @param {!ShareData=} data + * @return {!Promise} + * @see https://wicg.github.io/web-share/#share-method + */ +Navigator.prototype.share = function(data) {}; + +/** + * @type {number} + * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency + */ +Navigator.prototype.hardwareConcurrency; + +/** + * @constructor + * @implements NavigatorStorage + * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object + */ +function WorkerNavigator() {} + +/** + * @type {number} + * @see https://developers.google.com/web/updates/2017/12/device-memory + * https://github.com/w3c/device-memory + */ +WorkerNavigator.prototype.deviceMemory; + +/** + * @type {number} + * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency + */ +WorkerNavigator.prototype.hardwareConcurrency; + +/** + * @type {!StorageManager} + * @see https://storage.spec.whatwg.org + */ +WorkerNavigator.prototype.storage; + +/** + * @record + * @see https://wicg.github.io/web-share/#sharedata-dictionary + */ +function ShareData() {} + +/** @type {string|undefined} */ +ShareData.prototype.title; + +/** @type {string|undefined} */ +ShareData.prototype.text; + +/** @type {string|undefined} */ +ShareData.prototype.url; /** * @constructor @@ -4291,3 +5498,187 @@ Plugin.prototype.length; /** @type {string} */ Plugin.prototype.name; + +/** + * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry + * @constructor + */ +function CustomElementRegistry() {} + +/** + * @param {string} tagName + * @param {function(new:HTMLElement)} klass + * @param {{extends: string}=} options + * @return {undefined} + */ +CustomElementRegistry.prototype.define = function (tagName, klass, options) {}; + +/** + * @param {string} tagName + * @return {function(new:HTMLElement)|undefined} + */ +CustomElementRegistry.prototype.get = function(tagName) {}; + +/** + * @param {string} tagName + * @return {!Promise} + */ +CustomElementRegistry.prototype.whenDefined = function(tagName) {}; + +/** + * @param {!Node} root + * @return {undefined} + */ +CustomElementRegistry.prototype.upgrade = function(root) {}; + +/** @type {!CustomElementRegistry} */ +var customElements; + +/** + * @constructor + * @extends {HTMLElement} + */ +function HTMLSlotElement() {} + +/** @typedef {{flatten: boolean}} */ +var AssignedNodesOptions; + +/** + * @param {!AssignedNodesOptions=} options + * @return {!Array} + */ +HTMLSlotElement.prototype.assignedNodes = function(options) {}; + +/** + * @param {!AssignedNodesOptions=} options + * @return {!Array} + */ +HTMLSlotElement.prototype.assignedElements = function(options) {}; + +/** @type {boolean} */ +Event.prototype.composed; + +/** + * @return {!Array} + * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath + */ +Event.prototype.composedPath = function() {}; + +/** + * @constructor + * @param {{ + * firesTouchEvents: (string|undefined), + * pointerMovementScrolls: (string|undefined) + * }=} opt_options + */ +function InputDeviceCapabilities(opt_options){} + +/** @type {boolean} */ +InputDeviceCapabilities.prototype.firesTouchEvents; + +/** @type {boolean} */ +InputDeviceCapabilities.prototype.pointerMovementScrolls; + +/** @type {?InputDeviceCapabilities} */ +MouseEvent.prototype.sourceCapabilities; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport + * @constructor + * @implements {EventTarget} + */ +function VisualViewport() {} + +/** @type {number} */ +VisualViewport.prototype.offsetLeft; + +/** @type {number} */ +VisualViewport.prototype.offsetTop; + +/** @type {number} */ +VisualViewport.prototype.pageLeft; + +/** @type {number} */ +VisualViewport.prototype.pageTop; + +/** @type {number} */ +VisualViewport.prototype.width; + +/** @type {number} */ +VisualViewport.prototype.height; + +/** @type {number} */ +VisualViewport.prototype.scale; + +/** @override */ +VisualViewport.prototype.addEventListener = function(type, listener, + opt_options) {}; + +/** @override */ +VisualViewport.prototype.removeEventListener = function(type, listener, + opt_options) {}; + +/** @override */ +VisualViewport.prototype.dispatchEvent = function(evt) {}; + +/** @type {?function(!Event)} */ +VisualViewport.prototype.onresize; + +/** @type {?function(!Event)} */ +VisualViewport.prototype.onscroll; + +/** + * @see https://storage.spec.whatwg.org/ + * @constructor + */ +function StorageManager() {} + +/** @return {!Promise} */ +StorageManager.prototype.persisted = function() {}; + +/** @return {!Promise} */ +StorageManager.prototype.persist = function() {}; + +/** @return {!Promise} */ +StorageManager.prototype.estimate = function() {}; + +/** + * @see https://storage.spec.whatwg.org/ + * @typedef {{ + * usage: number, + * quota: number + * }} + */ +var StorageEstimate; + +/* + * Focus Management APIs + * + * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis + */ + + +/** + * @type {?Element} + * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement + */ +Document.prototype.activeElement; + +/** + * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus + * @return {boolean} + */ +Document.prototype.hasFocus = function() {}; + +/** + * @param {{preventScroll: boolean}=} options + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus + */ +Element.prototype.focus = function(options) {}; + +/** + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur + */ +Element.prototype.blur = function() {}; diff --git a/javascript/externs/web/ie_css.js b/javascript/externs/web/ie_css.js index 359b9ceb4194..0eb7d3ba83ea 100644 --- a/javascript/externs/web/ie_css.js +++ b/javascript/externs/web/ie_css.js @@ -252,6 +252,9 @@ CSSProperties.prototype.MsWritingMode; /** @type {string} */ CSSProperties.prototype.MsZoom; +/** @type {string} */ +CSSProperties.prototype.msUserSelect; + // See: http://msdn.microsoft.com/en-us/library/windows/apps/Hh702466.aspx /** @type {string} */ diff --git a/javascript/externs/web/ie_dom.js b/javascript/externs/web/ie_dom.js index 7ed5e9fdac5d..b9cfd3bd0abb 100644 --- a/javascript/externs/web/ie_dom.js +++ b/javascript/externs/web/ie_dom.js @@ -120,14 +120,6 @@ XMLDOMDocument.prototype.abort = function() {}; */ XMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {}; -/** - * @param {string} xmlSource - * @return {undefined} - * @see http://msdn.microsoft.com/en-us/library/ms762722(VS.85).aspx - * @override - */ -XMLDOMDocument.prototype.load = function(xmlSource) {}; - /** * @param {string} xmlString * @return {boolean} @@ -179,13 +171,12 @@ Node.prototype.document; * Inserts the given HTML text into the element at the location. * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin', * 'afterBegin', 'beforeEnd', 'afterEnd'. - * @param {string} sText HTML text to insert. + * @param {!TrustedHTML|string} sText HTML text to insert. * @see http://msdn.microsoft.com/en-us/library/ms536452(VS.85).aspx * @return {undefined} */ Node.prototype.insertAdjacentHTML = function(sWhere, sText) {}; - /** * @type {*} * @see http://msdn.microsoft.com/en-us/library/ms762308(VS.85).aspx @@ -204,12 +195,6 @@ Node.prototype.nodeTypeString; */ Node.prototype.parsed; -/** - * @type {Element} - * @see http://msdn.microsoft.com/en-us/library/ms534327(VS.85).aspx - */ -Node.prototype.parentElement; - /** * @type {boolean} * @see http://msdn.microsoft.com/en-us/library/ms753816(VS.85).aspx @@ -304,7 +289,7 @@ ClipboardData.prototype.getData = function(type) { }; * @type {!Window} * @see https://developer.mozilla.org/en/DOM/window */ -var window; + var window; /** * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx @@ -354,11 +339,13 @@ Window.prototype.offscreenBuffering; /** * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx + * @type {number|undefined} */ Window.prototype.screenLeft; /** * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx + * @type {number|undefined} */ Window.prototype.screenTop; @@ -388,26 +375,6 @@ Window.prototype.detachEvent; */ Window.prototype.execScript; -/** - * @see http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx - */ -Window.prototype.focus; - -/** - * @param {number} x - * @param {number} y - * @see http://msdn.microsoft.com/en-us/library/ms536618(VS.85).aspx - * @return {undefined} - */ -Window.prototype.moveBy = function(x, y) {}; - -/** - * @param {number} x - * @param {number} y - * @see http://msdn.microsoft.com/en-us/library/ms536626(VS.85).aspx - * @return {undefined} - */ -Window.prototype.moveTo = function(x, y) {}; /** * @see http://msdn.microsoft.com/en-us/library/ms536638(VS.85).aspx @@ -422,29 +389,29 @@ Window.prototype.navigate; * @return {Window} * @see http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx */ -Window.prototype.open = function(opt_url, opt_windowName, opt_windowFeatures, - opt_replace) {}; + Window.prototype.open = function(opt_url, opt_windowName, opt_windowFeatures, + opt_replace) {}; /** - * @see http://msdn.microsoft.com/en-us/library/ms536672(VS.85).aspx - * @return {undefined} - */ +* @see http://msdn.microsoft.com/en-us/library/ms536672(VS.85).aspx +* @return {undefined} +*/ Window.prototype.print = function() {}; /** - * @param {number} width - * @param {number} height - * @see http://msdn.microsoft.com/en-us/library/ms536722(VS.85).aspx - * @return {undefined} - */ +* @param {number} width +* @param {number} height +* @see http://msdn.microsoft.com/en-us/library/ms536722(VS.85).aspx +* @return {undefined} +*/ Window.prototype.resizeBy = function(width, height) {}; /** - * @param {number} width - * @param {number} height - * @see http://msdn.microsoft.com/en-us/library/ms536723(VS.85).aspx - * @return {undefined} - */ +* @param {number} width +* @param {number} height +* @see http://msdn.microsoft.com/en-us/library/ms536723(VS.85).aspx +* @return {undefined} +*/ Window.prototype.resizeTo = function(width, height) {}; /** @@ -469,32 +436,10 @@ Window.prototype.showModelessDialog; Window.prototype.external; /** - * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx - * @param {number|string} delta The number of entries to go back, or - * the URL to which to go back. (URL form is supported only in IE) - * @return {undefined} - */ -History.prototype.go = function(delta) {}; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx - * @param {number=} opt_distance The number of entries to go back - * (Mozilla doesn't support distance -- use #go instead) - * @return {undefined} - */ -History.prototype.back = function(opt_distance) {}; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx - * @type {number} - */ -History.prototype.length; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx - * @return {undefined} + * @see https://msdn.microsoft.com/en-us/ie/dn265046(v=vs.94) + * @const {!Object} */ -History.prototype.forward = function() {}; +Window.prototype.msCrypto; /** * @type {boolean} @@ -516,12 +461,6 @@ HTMLFrameElement.prototype.contentWindow; */ HTMLIFrameElement.prototype.allowTransparency; -/** - * @type {Window} - * @see http://msdn.microsoft.com/en-us/library/ms533692(VS.85).aspx - */ -HTMLIFrameElement.prototype.contentWindow; - /** * @see http://msdn.microsoft.com/en-us/library/ms536385(VS.85).aspx */ @@ -761,24 +700,6 @@ TextRange.prototype.select = function() {}; */ TextRange.prototype.setEndPoint; -/** - * @return {undefined} - * @see http://msdn.microsoft.com/en-us/library/ms536418(VS.85).aspx - */ -Selection.prototype.clear = function() {}; - -/** - * @return {TextRange|ControlRange} - * @see http://msdn.microsoft.com/en-us/library/ms536394(VS.85).aspx - */ -Selection.prototype.createRange = function() {}; - -/** - * @return {Array} - * @see http://msdn.microsoft.com/en-us/library/ms536396(VS.85).aspx - */ -Selection.prototype.createRangeCollection = function() {}; - /** * @constructor * @see http://msdn.microsoft.com/en-us/library/ms537447(VS.85).aspx @@ -791,11 +712,6 @@ Document.prototype.loadXML; // http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx -/** - * @see http://msdn.microsoft.com/en-us/library/ms533065(VS.85).aspx - */ -Document.prototype.activeElement; - /** * @see http://msdn.microsoft.com/en-us/library/ms533553(VS.85).aspx */ @@ -806,11 +722,6 @@ Document.prototype.charset; */ Document.prototype.cookie; -/** - * @see http://msdn.microsoft.com/en-us/library/ms533714(VS.85).aspx - */ -Document.prototype.defaultCharset; - /** * @see http://msdn.microsoft.com/en-us/library/ms533731(VS.85).aspx */ @@ -843,6 +754,7 @@ Document.prototype.fileSize; /** * @see http://msdn.microsoft.com/en-us/library/ms534331(VS.85).aspx + * @type {?Window} */ Document.prototype.parentWindow; @@ -857,12 +769,6 @@ Document.prototype.protocol; */ HTMLDocument.prototype.readyState; -/** - * @type {Selection} - * @see http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx - */ -Document.prototype.selection; - /** * @see http://msdn.microsoft.com/en-us/library/ms534704(VS.85).aspx */ @@ -914,12 +820,6 @@ Document.prototype.detachEvent; */ Document.prototype.focus; -/** - * @see http://msdn.microsoft.com/en-us/library/ms536447(VS.85).aspx - * @return {boolean} - */ -Document.prototype.hasFocus = function() {}; - /** * @see http://msdn.microsoft.com/en-us/library/ms536614(VS.85).aspx */ @@ -965,6 +865,7 @@ Document.prototype.namespaces; /** * @see http://msdn.microsoft.com/en-us/library/ms537487(VS.85).aspx + * @type {!HTMLCollection} */ Document.prototype.scripts; @@ -1008,7 +909,8 @@ Element.prototype.componentFromPoint = function(iCoordX, iCoordY) {}; /** - * @type {boolean} + * TODO(tjgq): Make this string once existing usages have been migrated. + * @type {string|boolean} * @see http://msdn.microsoft.com/en-us/library/ms533690(VS.85).aspx */ Element.prototype.contentEditable; @@ -1051,11 +953,18 @@ Element.prototype.fireEvent; Element.prototype.hideFocus; /** + * @type {string} + * @implicitCast + * + * TODO(lharker): remove the @implicitCast to enforce assigning an explicit + * string to innerText instead of relying on coercion. + * * @see http://msdn.microsoft.com/en-us/library/ms533899.aspx */ Element.prototype.innerText; /** + * @type {boolean} * @see http://msdn.microsoft.com/en-us/library/ms537838(VS.85).aspx */ Element.prototype.isContentEditable; @@ -1098,18 +1007,6 @@ Element.prototype.onmouseenter; */ Element.prototype.onmouseleave; -/** - * @type {?function(Event)} - * @see http://msdn.microsoft.com/en-us/library/ms536969(VS.85).aspx - */ -Element.prototype.onselectstart; - -/** - * @type {string} - * @see http://msdn.microsoft.com/en-us/library/aa752326(VS.85).aspx - */ -Element.prototype.outerHTML; - /** * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx * @return {undefined} @@ -1215,90 +1112,90 @@ AlphaImageLoaderFilter.prototype.sizingMethod; * @constructor * @see http://msdn.microsoft.com/en-us/library/ms535866(VS.85).aspx */ -function Location() {} - -/** - * @see http://trac.webkit.org/changeset/113945 - * @type {DOMStringList} - */ -Location.prototype.ancestorOrigins; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms533775(VS.85).aspx - * @type {string} - */ -Location.prototype.hash; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms533784(VS.85).aspx - * @type {string} - */ -Location.prototype.host; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms533785(VS.85).aspx - * @type {string} - */ -Location.prototype.hostname; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms533867(VS.85).aspx - * @type {string} - */ -Location.prototype.href; - -/** - * @see https://docs.google.com/document/view?id=1r_VTFKApVOaNIkocrg0z-t7lZgzisTuGTXkdzAk4gLU&hl=en - * @type {string} - */ -Location.prototype.origin; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms534332(VS.85).aspx - * @type {string} - */ -Location.prototype.pathname; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms534342(VS.85).aspx - */ -Location.prototype.port; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx - * @type {string} - */ -Location.prototype.protocol; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms534620(VS.85).aspx - * @type {string} - */ -Location.prototype.search; - -/** - * @see http://msdn.microsoft.com/en-us/library/ms536342(VS.85).aspx - * @param {string} url - * @return {undefined} - */ -Location.prototype.assign = function(url) {}; - -/** - * @param {boolean=} opt_forceReload If true, reloads the page from - * the server. Defaults to false. - * @see http://msdn.microsoft.com/en-us/library/ms536691(VS.85).aspx - * @return {undefined} - */ -Location.prototype.reload = function(opt_forceReload) {}; - -/** - * @param {string} url - * @see http://msdn.microsoft.com/en-us/library/ms536712(VS.85).aspx - * @return {undefined} - */ -Location.prototype.replace = function(url) {}; - - + function Location() {} + + /** + * @see http://trac.webkit.org/changeset/113945 + * @type {DOMStringList} + */ + Location.prototype.ancestorOrigins; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms533775(VS.85).aspx + * @type {string} + */ + Location.prototype.hash; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms533784(VS.85).aspx + * @type {string} + */ + Location.prototype.host; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms533785(VS.85).aspx + * @type {string} + */ + Location.prototype.hostname; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms533867(VS.85).aspx + * @type {string} + */ + Location.prototype.href; + + /** + * @see https://docs.google.com/document/view?id=1r_VTFKApVOaNIkocrg0z-t7lZgzisTuGTXkdzAk4gLU&hl=en + * @type {string} + */ + Location.prototype.origin; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms534332(VS.85).aspx + * @type {string} + */ + Location.prototype.pathname; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms534342(VS.85).aspx + */ + Location.prototype.port; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx + * @type {string} + */ + Location.prototype.protocol; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms534620(VS.85).aspx + * @type {string} + */ + Location.prototype.search; + + /** + * @see http://msdn.microsoft.com/en-us/library/ms536342(VS.85).aspx + * @param {string} url + * @return {undefined} + */ + Location.prototype.assign = function(url) {}; + + /** + * @param {boolean=} opt_forceReload If true, reloads the page from + * the server. Defaults to false. + * @see http://msdn.microsoft.com/en-us/library/ms536691(VS.85).aspx + * @return {undefined} + */ + Location.prototype.reload = function(opt_forceReload) {}; + + /** + * @param {string} url + * @see http://msdn.microsoft.com/en-us/library/ms536712(VS.85).aspx + * @return {undefined} + */ + Location.prototype.replace = function(url) {}; + + // For IE, returns an object representing key-value pairs for all the global // variables prefixed with str, e.g. test* diff --git a/javascript/externs/web/ie_event.js b/javascript/externs/web/ie_event.js index 30763e5a55c2..30e1694188d5 100644 --- a/javascript/externs/web/ie_event.js +++ b/javascript/externs/web/ie_event.js @@ -71,7 +71,7 @@ Event.prototype.propertyName; /** @type {string} */ Event.prototype.qualifier; -/** @type {number} */ +/** @type {?} */ Event.prototype.reason; /** @type {Object<*>} */ @@ -135,13 +135,13 @@ MSPointerPoint.prototype.pointerType; */ function MSPointerEvent() {} -/** @type {number} */ +/** @const {number} */ MSPointerEvent.MSPOINTER_TYPE_MOUSE; -/** @type {number} */ +/** @const {number} */ MSPointerEvent.MSPOINTER_TYPE_PEN; -/** @type {number} */ +/** @const {number} */ MSPointerEvent.MSPOINTER_TYPE_TOUCH; /** @type {number} */ diff --git a/javascript/externs/web/mediasource.js b/javascript/externs/web/mediasource.js index d921537a7a72..283d24d7f7ab 100644 --- a/javascript/externs/web/mediasource.js +++ b/javascript/externs/web/mediasource.js @@ -27,26 +27,15 @@ */ function MediaSource() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -MediaSource.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; +/** @override */ +MediaSource.prototype.addEventListener = function(type, listener, opt_options) { +}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ +/** @override */ MediaSource.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ MediaSource.prototype.dispatchEvent = function(evt) {}; /** @type {Array} */ @@ -105,26 +94,15 @@ MediaSource.isTypeSupported = function(type) {}; */ function SourceBuffer() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ +/** @override */ SourceBuffer.prototype.addEventListener = function( - type, listener, opt_useCapture) {}; + type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ +/** @override */ SourceBuffer.prototype.removeEventListener = function( - type, listener, opt_useCapture) {}; + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ SourceBuffer.prototype.dispatchEvent = function(evt) {}; /** @type {string} */ @@ -169,3 +147,9 @@ SourceBuffer.prototype.abort = function() {}; * @return {undefined} */ SourceBuffer.prototype.remove = function(start, end) {}; + +/** + * @param {string} type + * @return {undefined} + */ +SourceBuffer.prototype.changeType = function(type) {}; diff --git a/javascript/externs/web/streamsapi.js b/javascript/externs/web/streamsapi.js index 4a335775aadb..f7d868a573bf 100644 --- a/javascript/externs/web/streamsapi.js +++ b/javascript/externs/web/streamsapi.js @@ -24,31 +24,117 @@ */ -/** @typedef {{ value:*, done:boolean }} */ -var IteratorResult; - - /** * @typedef {!CountQueuingStrategy|!ByteLengthQueuingStrategy|{ * size: (undefined|function(*): number), - * highWaterMark: number + * highWaterMark: (number|undefined), * }} */ var QueuingStrategy; +/** + * The TransformStreamDefaultController class has methods that allow + * manipulation of the associated ReadableStream and WritableStream. + * + * This class cannot be directly constructed and is instead passed by the + * TransformStream to the methods of its transformer. + * + * @interface + * @template OUT_VALUE + * @see https://streams.spec.whatwg.org/#ts-default-controller-class + */ +function TransformStreamDefaultController() {}; + +/** + * @type {number} + * @see https://streams.spec.whatwg.org/#ts-default-controller-desired-size + */ +TransformStreamDefaultController.prototype.desiredSize; + +/** + * @param {OUT_VALUE} chunk + * @return {undefined} + * @see https://streams.spec.whatwg.org/#ts-default-controller-enqueue + */ +TransformStreamDefaultController.prototype.enqueue = function(chunk) {}; + +/** + * @param {*} reason + * @return {undefined} + * @see https://streams.spec.whatwg.org/#ts-default-controller-error + */ +TransformStreamDefaultController.prototype.error = function(reason) {}; + +/** + * @return {undefined} + * @see https://streams.spec.whatwg.org/#ts-default-controller-terminate + */ +TransformStreamDefaultController.prototype.terminate = function() {}; + + +/** + * @record + * @template IN_VALUE, OUT_VALUE + * @see https://streams.spec.whatwg.org/#transformer-api + */ +function TransformStreamTransformer() {}; + +/** + * @type {(undefined|function( + * !TransformStreamDefaultController + * ):(!IThenable<*>|undefined) + * )} + */ +TransformStreamTransformer.prototype.start; + +/** + * @type {(undefined|function( + * IN_VALUE, !TransformStreamDefaultController + * ):(!IThenable<*>|undefined) + * )} + */ +TransformStreamTransformer.prototype.transform; + +/** + * @type {(undefined|function( + * !TransformStreamDefaultController + * ):(!IThenable<*>|undefined) + * )} + */ +TransformStreamTransformer.prototype.flush; + /** + * A transform stream (https://streams.spec.whatwg.org/#transform-stream). * @record + * @template IN_VALUE, OUT_VALUE */ -function TransformStream() {}; +function ITransformStream() {} -/** @type {!WritableStream} */ +/** @type {!WritableStream} */ +ITransformStream.prototype.writable; + +/** @type {!ReadableStream} */ +ITransformStream.prototype.readable; + + +/** + * @constructor + * @implements {ITransformStream} + * @template IN_VALUE, OUT_VALUE + * @param {!TransformStreamTransformer=} transformer + * @param {!QueuingStrategy=} writableStrategy + * @param {!QueuingStrategy=} readableStrategy + * @see https://streams.spec.whatwg.org/#ts-class + */ +function TransformStream(transformer, writableStrategy, readableStrategy) {}; + +/** @type {!WritableStream} */ TransformStream.prototype.writable; -/** @type {!ReadableStream} */ +/** @type {!ReadableStream} */ TransformStream.prototype.readable; - /** * @record */ @@ -66,18 +152,23 @@ PipeOptions.prototype.preventCancel; /** * @record + * @template VALUE */ function ReadableStreamSource() {}; /** - * @type {(undefined| - * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))} + * @type {(undefined|function( + * (!ReadableByteStreamController|!ReadableStreamDefaultController) + * ):(!IThenable<*>|undefined) + * )} */ ReadableStreamSource.prototype.start; /** - * @type {(undefined| - * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))} + * @type {(undefined|function( + * (!ReadableByteStreamController|!ReadableStreamDefaultController) + * ):(!IThenable<*>|undefined) + * )} */ ReadableStreamSource.prototype.pull; @@ -90,11 +181,19 @@ ReadableStreamSource.prototype.type; /** @type {(undefined|number)} */ ReadableStreamSource.prototype.autoAllocateChunkSize; +/** + * @record + */ +function ReadableStreamIteratorOptions() {}; + +/** @type {undefined|boolean} */ +ReadableStreamIteratorOptions.prototype.preventCancel; /** - * @param {!ReadableStreamSource=} opt_underlyingSource - * @param {!QueuingStrategy=} opt_queuingStrategy * @constructor + * @template VALUE + * @param {!ReadableStreamSource=} opt_underlyingSource + * @param {!QueuingStrategy=} opt_queuingStrategy * @see https://streams.spec.whatwg.org/#rs-class */ function ReadableStream(opt_underlyingSource, opt_queuingStrategy) {}; @@ -112,23 +211,31 @@ ReadableStream.prototype.locked; */ ReadableStream.prototype.cancel = function(reason) {}; +/** + * @param {!ReadableStreamIteratorOptions=} options + * @return {!AsyncIterator} + * @see https://streams.spec.whatwg.org/#rs-get-iterator + */ +ReadableStream.prototype.getIterator = function(options) {}; + /** * @param {{ mode:(undefined|string) }=} opt_options - * @return {(!ReadableStreamDefaultReader|!ReadableStreamBYOBReader)} + * @return {(!ReadableStreamDefaultReader|!ReadableStreamBYOBReader)} * @see https://streams.spec.whatwg.org/#rs-get-reader */ ReadableStream.prototype.getReader = function(opt_options) {}; /** - * @param {!TransformStream} transform + * @template PIPE_VALUE + * @param {!ITransformStream} transform * @param {!PipeOptions=} opt_options - * @return {!ReadableStream} + * @return {!ReadableStream} * @see https://streams.spec.whatwg.org/#rs-pipe-through */ ReadableStream.prototype.pipeThrough = function(transform, opt_options) {}; /** - * @param {!WritableStream} dest + * @param {!WritableStream} dest * @param {!PipeOptions=} opt_options * @return {!Promise} * @see https://streams.spec.whatwg.org/#rs-pipe-to @@ -136,17 +243,24 @@ ReadableStream.prototype.pipeThrough = function(transform, opt_options) {}; ReadableStream.prototype.pipeTo = function(dest, opt_options) {}; /** - * @return {!Array} + * @return {!Array>} * @see https://streams.spec.whatwg.org/#rs-tee */ ReadableStream.prototype.tee = function() {}; +/** + * @param {!ReadableStreamIteratorOptions=} options + * @return {!AsyncIterator} + * @see https://streams.spec.whatwg.org/#rs-asynciterator + */ +ReadableStream.prototype[Symbol.asyncIterator] = function(options) {}; /** - * The ReadableStreamDefaultReader constructor is generally not meant to be used directly; - * instead, a stream’s getReader() method should be used. + * The ReadableStreamDefaultReader constructor is generally not meant to be used + * directly; instead, a stream’s getReader() method should be used. * * @interface + * @template VALUE * @see https://streams.spec.whatwg.org/#default-reader-class */ function ReadableStreamDefaultReader() {}; @@ -165,7 +279,7 @@ ReadableStreamDefaultReader.prototype.closed; ReadableStreamDefaultReader.prototype.cancel = function(reason) {}; /** - * @return {!Promise} + * @return {!Promise>} * @see https://streams.spec.whatwg.org/#default-reader-read */ ReadableStreamDefaultReader.prototype.read = function() {}; @@ -200,8 +314,9 @@ ReadableStreamBYOBReader.prototype.closed; ReadableStreamBYOBReader.prototype.cancel = function(reason) {}; /** - * @param {!ArrayBufferView} view - * @return {!Promise} + * @template BUFFER + * @param {BUFFER} view + * @return {!Promise>} * @see https://streams.spec.whatwg.org/#byob-reader-read */ ReadableStreamBYOBReader.prototype.read = function(view) {}; @@ -218,6 +333,7 @@ ReadableStreamBYOBReader.prototype.releaseLock = function() {}; * it only works on a ReadableStream that is in the middle of being constructed. * * @interface + * @template VALUE * @see https://streams.spec.whatwg.org/#rs-default-controller-class */ function ReadableStreamDefaultController() {}; @@ -235,7 +351,7 @@ ReadableStreamDefaultController.prototype.desiredSize; ReadableStreamDefaultController.prototype.close = function() {}; /** - * @param {*} chunk + * @param {VALUE} chunk * @return {undefined} * @see https://streams.spec.whatwg.org/#rs-default-controller-enqueue */ @@ -320,13 +436,17 @@ ReadableStreamBYOBRequest.prototype.respondWithNewView = function(view) {}; /** * @record + * @template VALUE */ function WritableStreamSink() {}; /** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/ WritableStreamSink.prototype.start; -/** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/ +/** + * @type {(undefined|function(VALUE, + * !WritableStreamDefaultController):(!IThenable<*>|undefined))} + */ WritableStreamSink.prototype.write; /** @type {(undefined|function():(!IThenable<*>|undefined))} */ @@ -337,9 +457,10 @@ WritableStreamSink.prototype.abort; /** - * @param {!WritableStreamSink=} opt_underlyingSink - * @param {!QueuingStrategy=} opt_queuingStrategy * @constructor + * @template VALUE + * @param {!WritableStreamSink=} opt_underlyingSink + * @param {!QueuingStrategy=} opt_queuingStrategy * @see https://streams.spec.whatwg.org/#ws-class */ function WritableStream(opt_underlyingSink, opt_queuingStrategy) {}; @@ -358,7 +479,13 @@ WritableStream.prototype.locked; WritableStream.prototype.abort = function(reason) {}; /** - * @return {!WritableStreamDefaultWriter} + * @return {!Promise} + * @see https://streams.spec.whatwg.org/#ws-close + */ +WritableStream.prototype.close = function() {}; + +/** + * @return {!WritableStreamDefaultWriter} * @see https://streams.spec.whatwg.org/#ws-get-writer */ WritableStream.prototype.getWriter = function() {}; @@ -366,6 +493,7 @@ WritableStream.prototype.getWriter = function() {}; /** * @interface + * @template VALUE * @see https://streams.spec.whatwg.org/#default-writer-class */ function WritableStreamDefaultWriter() {}; @@ -408,7 +536,7 @@ WritableStreamDefaultWriter.prototype.close = function() {}; WritableStreamDefaultWriter.prototype.releaseLock = function() {}; /** - * @param {*} chunk + * @param {VALUE} chunk * @return {!Promise} * @see https://streams.spec.whatwg.org/#default-writer-write */ diff --git a/javascript/externs/web/url.js b/javascript/externs/web/url.js index c20605fac60b..5566cd5517a0 100644 --- a/javascript/externs/web/url.js +++ b/javascript/externs/web/url.js @@ -23,9 +23,32 @@ */ /** + * @typedef {Array} + */ +var URLSearchParamsTupleType; + +/** + * Represents the query string of a URL. + * + * * When `init` is a string, it is basically parsed as a query string + * `'name1=value1&name2=value2'`. + * + * * When `init` is an array of arrays of string + * `([['name1', 'value1'], ['name2', 'value2']])`, + * it must contain pairs of strings, where the first item in the pair will be + * interpreted as a key and the second as a value. + * + * NOTE: The specification uses Iterable rather than Array, but this is not + * supported in Edge 17 - 18. + * + * * When `init` is an object, keys and values will be interpreted as such + * `({name1: 'value1', name2: 'value2'}). + * + * @see https://url.spec.whatwg.org/#interface-urlsearchparams * @constructor * @implements {Iterable>} - * @param {(string|!URLSearchParams)=} init + * @param {(string|!Array|!Object)=} + * init */ function URLSearchParams(init) {} @@ -42,6 +65,19 @@ URLSearchParams.prototype.append = function(name, value) {}; */ URLSearchParams.prototype.delete = function(name) {}; +/** + * @return {!IteratorIterable>} + * @nosideeffects + * @see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/entries + */ +URLSearchParams.prototype.entries = function() {}; + +/** + * @param {function(string, string)} callback + * @return {undefined} + */ +URLSearchParams.prototype.forEach = function(callback) {}; + /** * @param {string} name * @return {?string} @@ -60,6 +96,12 @@ URLSearchParams.prototype.getAll = function(name) {}; */ URLSearchParams.prototype.has = function(name) {}; +/** + * @return {!IteratorIterable} + */ +URLSearchParams.prototype.keys = function() {}; + + /** * @param {string} name * @param {string} value @@ -67,6 +109,16 @@ URLSearchParams.prototype.has = function(name) {}; */ URLSearchParams.prototype.set = function(name, value) {}; +/** + * @return {undefined} + */ +URLSearchParams.prototype.sort = function() {}; + +/** + * @return {!IteratorIterable} + */ +URLSearchParams.prototype.values = function() {}; + /** * @see https://url.spec.whatwg.org * @constructor @@ -79,8 +131,7 @@ function URL(url, base) {} URL.prototype.href; /** - * @const - * @type {string} + * @const {string} */ URL.prototype.origin; @@ -109,8 +160,7 @@ URL.prototype.pathname; URL.prototype.search; /** - * @const - * @type {URLSearchParams} + * @const {!URLSearchParams} */ URL.prototype.searchParams; diff --git a/javascript/externs/web/w3c_anim_timing.js b/javascript/externs/web/w3c_anim_timing.js index 03e0cc2bc91a..78319d4ba562 100644 --- a/javascript/externs/web/w3c_anim_timing.js +++ b/javascript/externs/web/w3c_anim_timing.js @@ -23,7 +23,13 @@ */ /** - * @param {function(number)} callback + * @typedef {function(number): undefined} + * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback + */ +var FrameRequestCallback; + +/** + * @param {!FrameRequestCallback} callback * @param {Element=} opt_element In early versions of this API, the callback * was invoked only if the element was visible. * @return {number} diff --git a/javascript/externs/web/w3c_batterystatus.js b/javascript/externs/web/w3c_batterystatus.js index e062cbf2afc4..91eaec58a39e 100644 --- a/javascript/externs/web/w3c_batterystatus.js +++ b/javascript/externs/web/w3c_batterystatus.js @@ -17,7 +17,7 @@ /** * @fileoverview Definitions for W3C's Battery Status API. * The whole file has been fully type annotated. Created from - * http://www.w3.org/TR/2014/CR-battery-status-20141209/ + * https://www.w3.org/TR/battery-status/ * * @externs */ @@ -56,24 +56,30 @@ BatteryManager.prototype.level; /** - * @type {?function(!Event)} + * @type {?function(!Event): void} */ BatteryManager.prototype.onchargingchange; /** - * @type {?function(!Event)} + * @type {?function(!Event): void} */ BatteryManager.prototype.onchargingtimechange; /** - * @type {?function(!Event)} + * @type {?function(!Event): void} */ BatteryManager.prototype.ondischargingtimechange; /** - * @type {?function(!Event)} + * @type {?function(!Event): void} */ BatteryManager.prototype.onlevelchange; + +/** + * @return {!Promise} + * @see http://www.w3.org/TR/battery-status/ + */ +Navigator.prototype.getBattery = function() {}; diff --git a/javascript/externs/web/w3c_css.js b/javascript/externs/web/w3c_css.js index 5d7eae1acea8..d242d7ab64b6 100644 --- a/javascript/externs/web/w3c_css.js +++ b/javascript/externs/web/w3c_css.js @@ -236,52 +236,52 @@ CSSRule.prototype.style; /** * Indicates that the rule is a {@see CSSUnknownRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.UNKNOWN_RULE = 0; +CSSRule.UNKNOWN_RULE; /** * Indicates that the rule is a {@see CSSStyleRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.STYLE_RULE = 1; +CSSRule.STYLE_RULE; /** * Indicates that the rule is a {@see CSSCharsetRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.CHARSET_RULE = 2; +CSSRule.CHARSET_RULE; /** * Indicates that the rule is a {@see CSSImportRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.IMPORT_RULE = 3; +CSSRule.IMPORT_RULE; /** * Indicates that the rule is a {@see CSSMediaRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.MEDIA_RULE = 4; +CSSRule.MEDIA_RULE; /** * Indicates that the rule is a {@see CSSFontFaceRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.FONT_FACE_RULE = 5; +CSSRule.FONT_FACE_RULE; /** * Indicates that the rule is a {@see CSSPageRule}. - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType */ -CSSRule.PAGE_RULE = 6; +CSSRule.PAGE_RULE; /** * @constructor @@ -418,6 +418,7 @@ function CSSUnknownRule() {} * @extends {CSSProperties} * @implements {IObject<(string|number), string>} * @implements {IArrayLike} + * @implements {Iterable} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration */ function CSSStyleDeclaration() {} @@ -518,6 +519,7 @@ CSSStyleDeclaration.prototype.removeAttribute = CSSStyleDeclaration.prototype.removeExpression = function(name) {}; /** + * @deprecated * @param {string} name * @param {*} value * @param {number=} opt_flags @@ -556,28 +558,28 @@ CSSValue.prototype.cssText; CSSValue.prototype.cssValueType; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types */ -CSSValue.CSS_INHERIT = 0; +CSSValue.CSS_INHERIT; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types */ -CSSValue.CSS_PRIMITIVE_VALUE = 1; +CSSValue.CSS_PRIMITIVE_VALUE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types */ -CSSValue.CSS_VALUE_LIST = 2; +CSSValue.CSS_VALUE_LIST; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types */ -CSSValue.CSS_CUSTOM = 3; +CSSValue.CSS_CUSTOM; /** * @constructor @@ -593,160 +595,160 @@ function CSSPrimitiveValue() {} CSSPrimitiveValue.prototype.primitiveType; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_UNKNOWN = 0; +CSSPrimitiveValue.CSS_UNKNOWN; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_NUMBER = 1; +CSSPrimitiveValue.CSS_NUMBER; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_PERCENTAGE = 2; +CSSPrimitiveValue.CSS_PERCENTAGE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_EMS = 3; +CSSPrimitiveValue.CSS_EMS; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_EXS = 4; +CSSPrimitiveValue.CSS_EXS; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_PX = 5; +CSSPrimitiveValue.CSS_PX; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_CM = 6; +CSSPrimitiveValue.CSS_CM; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_MM = 7; +CSSPrimitiveValue.CSS_MM; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_IN = 8; +CSSPrimitiveValue.CSS_IN; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_PT = 9; +CSSPrimitiveValue.CSS_PT; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_PC = 10; +CSSPrimitiveValue.CSS_PC; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_DEG = 11; +CSSPrimitiveValue.CSS_DEG; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_RAD = 12; +CSSPrimitiveValue.CSS_RAD; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_GRAD = 13; +CSSPrimitiveValue.CSS_GRAD; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_MS = 14; +CSSPrimitiveValue.CSS_MS; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_S = 15; +CSSPrimitiveValue.CSS_S; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_HZ = 16; +CSSPrimitiveValue.CSS_HZ; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_KHZ = 17; +CSSPrimitiveValue.CSS_KHZ; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_DIMENSION = 18; +CSSPrimitiveValue.CSS_DIMENSION; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_STRING = 19; +CSSPrimitiveValue.CSS_STRING; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_URI = 20; +CSSPrimitiveValue.CSS_URI; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_IDENT = 21; +CSSPrimitiveValue.CSS_IDENT; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_ATTR = 22; +CSSPrimitiveValue.CSS_ATTR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_COUNTER = 23; +CSSPrimitiveValue.CSS_COUNTER; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_RECT = 24; +CSSPrimitiveValue.CSS_RECT; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue */ -CSSPrimitiveValue.CSS_RGBCOLOR = 25; +CSSPrimitiveValue.CSS_RGBCOLOR; /** * @return {Counter} @@ -904,7 +906,7 @@ Counter.prototype.listStyle; Counter.prototype.separator; /** - * @constructor + * @interface * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS */ function ViewCSS() {} @@ -975,6 +977,12 @@ function CSSProperties() {} */ CSSProperties.prototype.azimuth; +/** + * @type {string} + * @see https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty + */ +CSSProperties.prototype.backdropFilter; + /** * @type {string} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background @@ -1820,6 +1828,62 @@ CSSProperties.prototype.opacity; */ CSSProperties.prototype.textOverflow; +// CSS 3 animations + +/** + * @type {string|number} + * @see https://www.w3.org/TR/css-animations-1/#animation + */ +CSSProperties.prototype.animation; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-delay + */ +CSSProperties.prototype.animationDelay; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-direction + */ +CSSProperties.prototype.animationDirection; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-duration + */ +CSSProperties.prototype.animationDuration; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode + */ +CSSProperties.prototype.animationFillMode; + +/** + * @type {string|number} + * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count + */ +CSSProperties.prototype.animationIterationCount; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-name + */ +CSSProperties.prototype.animationName; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-play-state + */ +CSSProperties.prototype.animationPlayState; + +/** + * @type {string} + * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function + */ +CSSProperties.prototype.animationTimingFunction; + // CSS 3 transforms /** @@ -1981,6 +2045,129 @@ CSSProperties.prototype.order; */ CSSProperties.prototype.willChange; +/** + * @type {string} + * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select + */ +CSSProperties.prototype.userSelect; + +// CSS 3 Images + +/** + * @type {string} + * @see https://www.w3.org/TR/css3-images/#the-object-fit + */ +CSSProperties.prototype.objectFit; + +/** + * @type {string} + * @see https://www.w3.org/TR/css3-images/#object-position + */ +CSSProperties.prototype.objectPosition; + +// CSS Masking + +/** + * @type {string} + * @see https://www.w3.org/TR/css-masking-1/ + */ +CSSProperties.prototype.clipPath; + +// CSS Containment + +/** + * @type {string} + * @see https://www.w3.org/TR/css-contain-1/ + */ +CSSProperties.prototype.contain; + +// SVG Fill Properties + +/** + * @type {string} + * @see https://www.w3.org/TR/fill-stroke-3/#fill-shorthand + */ +CSSProperties.prototype.fill; + +/** + * @type {string} + * @see https://www.w3.org/TR/fill-stroke-3/#fill-opacity + */ +CSSProperties.prototype.fillOpacity; + +/** + * @type {string} + * @see https://www.w3.org/TR/fill-stroke-3/#fill-rule + */ +CSSProperties.prototype.fillRule; + +// SVG Stroke Properties + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.stroke; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeAlignment; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeOpacity; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeWidth; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeLinecap; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeLinejoin; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeMiterlimit; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeDasharray; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeDashoffset; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeDashcorner; + +/** + * @type {string} + * @see https://www.w3.org/TR/svg-strokes/ + */ +CSSProperties.prototype.strokeDashadjust; /** * TODO(dbeam): Put this in separate file named w3c_cssom.js. @@ -1992,7 +2179,7 @@ CSSProperties.prototype.willChange; /** * @param {string} media_query_list - * @return {MediaQueryList} + * @return {!MediaQueryList} * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia */ Window.prototype.matchMedia = function(media_query_list) {}; @@ -2034,28 +2221,53 @@ Window.prototype.scrollY; Window.prototype.pageYOffset; /** - * @param {number} x - * @param {number} y + * @typedef {{ + * left: (number|undefined), + * top: (number|undefined), + * behavior: (string|undefined) + * }} + * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions + */ +var ScrollToOptions; + +/** + * @record + * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions + */ +function ScrollIntoViewOptions () {} + +/** @type {string|undefined} */ +ScrollIntoViewOptions.prototype.behavior; + +/** @type {string|undefined} */ +ScrollIntoViewOptions.prototype.block; + +/** @type {string|undefined} */ +ScrollIntoViewOptions.prototype.inline; + +/** + * @param {number|!ScrollToOptions} scrollToOptionsOrX + * @param {number=} opt_y * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll * @return {undefined} */ -Window.prototype.scroll = function(x, y) {}; +Window.prototype.scroll = function(scrollToOptionsOrX, opt_y) {}; /** - * @param {number} x - * @param {number} y + * @param {number|!ScrollToOptions} scrollToOptionsOrX + * @param {number=} opt_y * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto * @return {undefined} */ -Window.prototype.scrollTo = function(x, y) {}; +Window.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {}; /** - * @param {number} x - * @param {number} y + * @param {number|!ScrollToOptions} scrollToOptionsOrX + * @param {number=} opt_y * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby * @return {undefined} */ -Window.prototype.scrollBy = function(x, y) {}; +Window.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {}; /** * @type {number} @@ -2081,8 +2293,47 @@ Window.prototype.outerWidth; */ Window.prototype.outerHeight; +/** + * @type {number} + * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio + */ +Window.prototype.devicePixelRatio; + +/** + * @param {number} x + * @param {number} y + * @return {undefined} + * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto + */ +Window.prototype.moveTo = function(x, y) {}; + +/** + * @param {number} x + * @param {number} y + * @return {undefined} + * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby + */ +Window.prototype.moveBy = function(x, y) {}; + +/** + * @param {number} x + * @param {number} y + * @return {undefined} + * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto + */ +Window.prototype.resizeTo = function(x, y) {}; + +/** + * @param {number} x + * @param {number} y + * @return {undefined} + * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby + */ +Window.prototype.resizeBy = function(x, y) {}; + /** * @constructor + * @implements {EventTarget} * @see http://www.w3.org/TR/cssom-view/#mediaquerylist */ function MediaQueryList() {} @@ -2113,6 +2364,17 @@ MediaQueryList.prototype.addListener = function(listener) {}; */ MediaQueryList.prototype.removeListener = function(listener) {}; +/** @override Not available in some browsers; use addListener instead. */ +MediaQueryList.prototype.addEventListener = function( + type, listener, opt_options) {}; + +/** @override Not available in old browsers; use removeListener instead. */ +MediaQueryList.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ +MediaQueryList.prototype.dispatchEvent = function(evt) {}; + /** * @typedef {(function(!MediaQueryList) : void)} * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener @@ -2172,6 +2434,14 @@ Screen.prototype.pixelDepth; */ Document.prototype.elementFromPoint = function(x, y) {}; +/** + * @param {number} x + * @param {number} y + * @return {!IArrayLike} + * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint + */ +Document.prototype.elementsFromPoint = function(x, y) {}; + /** * @param {number} x * @param {number} y @@ -2214,17 +2484,25 @@ CaretPosition.prototype.offset; Element.prototype.getClientRects = function() {}; /** - * @return {!ClientRect} + * @return {!DOMRect} * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect */ Element.prototype.getBoundingClientRect = function() {}; /** - * @param {(boolean|{behavior: string, block: string})=} opt_top + * @param {(boolean|ScrollIntoViewOptions)=} top * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview * @return {undefined} */ -Element.prototype.scrollIntoView = function(opt_top) {}; +Element.prototype.scrollIntoView = function(top) {}; + +/** + * @param {number|!ScrollToOptions} scrollToOptionsOrX + * @param {number=} opt_y + * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface + * @return {undefined} + */ +Element.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {}; /** * @type {number} @@ -2316,7 +2594,7 @@ HTMLElement.prototype.offsetHeight; Range.prototype.getClientRects = function() {}; /** - * @return {!ClientRect} + * @return {!DOMRect} * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect */ Range.prototype.getBoundingClientRect = function() {}; @@ -2395,7 +2673,7 @@ MouseEvent.prototype.offsetY; /** * @constructor * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface - * @implements {IArrayLike} + * @implements {IArrayLike} */ function ClientRectList() {} @@ -2407,53 +2685,11 @@ ClientRectList.prototype.length; /** * @param {number} index - * @return {ClientRect} + * @return {?DOMRect} * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item */ ClientRectList.prototype.item = function(index) {}; -/** - * @constructor - * @see http://www.w3.org/TR/cssom-view/#the-clientrect-interface - */ -function ClientRect() {} - -/** - * @type {number} - * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top - */ -ClientRect.prototype.top; - -/** - * @type {number} - * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right - */ -ClientRect.prototype.right; - -/** - * @type {number} - * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom - */ -ClientRect.prototype.bottom; - -/** - * @type {number} - * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left - */ -ClientRect.prototype.left; - -/** - * @type {number} - * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width - */ -ClientRect.prototype.width; - -/** - * @type {number} - * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height - */ -ClientRect.prototype.height; - /** * @constructor * http://www.w3.org/TR/css3-conditional/#CSS-interface @@ -2620,12 +2856,12 @@ FontFaceSet.prototype.delete = function(value) {}; FontFaceSet.prototype.has = function(font) {}; /** - * @param {function(!FontFace, number, !FontFaceSet)} cb - * @param {Object|undefined=} opt_selfObj + * @param {function(!FontFace, number, !FontFaceSet)} callback + * @param {?Object=} selfObj * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach * @return {undefined} */ -FontFaceSet.prototype.forEach = function(cb, opt_selfObj) {}; +FontFaceSet.prototype.forEach = function(callback, selfObj) {}; /** * @param {string} font @@ -2654,3 +2890,92 @@ FontFaceSet.prototype.ready; * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status */ FontFaceSet.prototype.status; + +/** + * @constructor + * @param {string} type + * @param {{ + * animationName: (string|undefined), + * elapsedTime: (number|undefined), + * pseudoElement: (string|undefined) + * }=} opt_animationEventInitDict + * @extends {Event} + * @see https://drafts.csswg.org/css-animations/#interface-animationevent + */ +function AnimationEvent(type, opt_animationEventInitDict) {}; + +/** + * @type {string} + * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname + */ +AnimationEvent.prototype.animationName; + +/** + * @type {number} + * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime + */ +AnimationEvent.prototype.elapsedTime; + +/** + * @type {string} + * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement + */ +AnimationEvent.prototype.pseudoElement; + +/** + * @constructor + * @extends {CSSRule} + * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule + */ +function CSSKeyframeRule() {} + +/** + * @type {string} + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext + */ +CSSKeyframeRule.prototype.keyText; + +/** + * @type {!CSSStyleDeclaration} + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style + */ +CSSKeyframeRule.prototype.style; + + +/** + * @constructor + * @extends {CSSRule} + * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule + */ +function CSSKeyframesRule() {} + +/** + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name + * @type {string} + */ +CSSKeyframesRule.prototype.name; + +/** + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules + * @type {!CSSRuleList} + */ +CSSKeyframesRule.prototype.cssRules; + +/** + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule + * @param {string} key The key text for the rule to find. + * @return {?CSSKeyframeRule} + */ +CSSKeyframesRule.prototype.findRule = function(key) {}; + +/** + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule + * @param {string} rule The text for the rule to append. + */ +CSSKeyframesRule.prototype.appendRule = function(rule) {}; + +/** + * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule + * @param {string} key The key text for the rule to delete. + */ +CSSKeyframesRule.prototype.deleteRule = function(key) {}; diff --git a/javascript/externs/web/w3c_device_sensor_event.js b/javascript/externs/web/w3c_device_sensor_event.js index de36ea324484..98789d265afb 100644 --- a/javascript/externs/web/w3c_device_sensor_event.js +++ b/javascript/externs/web/w3c_device_sensor_event.js @@ -24,11 +24,32 @@ * @externs */ +/** + * @record + * @extends {EventInit} + * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation + */ +function DeviceOrientationEventInit() {} + +/** @type {number|undefined} */ +DeviceOrientationEventInit.prototype.alpha; + +/** @type {number|undefined} */ +DeviceOrientationEventInit.prototype.beta; + +/** @type {number|undefined} */ +DeviceOrientationEventInit.prototype.gamma; + +/** @type {boolean|undefined} */ +DeviceOrientationEventInit.prototype.absolute; + /** * @constructor * @extends {Event} + * @param {string} type + * @param {!DeviceOrientationEventInit=} opt_eventInitDict */ -function DeviceOrientationEvent() {} +function DeviceOrientationEvent(type, opt_eventInitDict) {} /** @type {?number} */ DeviceOrientationEvent.prototype.alpha; diff --git a/javascript/externs/web/w3c_dom1.js b/javascript/externs/web/w3c_dom1.js index bf85793fec6b..cb0537cefed0 100644 --- a/javascript/externs/web/w3c_dom1.js +++ b/javascript/externs/web/w3c_dom1.js @@ -20,76 +20,75 @@ * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html * * @externs - * @author stevey@google.com (Steve Yegge) */ /** * @constructor * @param {string=} message - * @param {string=} message - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-17189187 + * @param {string=} name + * @see https://heycam.github.io/webidl/#idl-DOMException */ function DOMException(message, name) {} /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.INDEX_SIZE_ERR = 1; +DOMException.INDEX_SIZE_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.DOMSTRING_SIZE_ERR = 2; +DOMException.DOMSTRING_SIZE_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.HIERARCHY_REQUEST_ERR = 3; +DOMException.HIERARCHY_REQUEST_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.WRONG_DOCUMENT_ERR = 4; +DOMException.WRONG_DOCUMENT_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.INVALID_CHARACTER_ERR = 5; +DOMException.INVALID_CHARACTER_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.NO_DATA_ALLOWED_ERR = 6; +DOMException.NO_DATA_ALLOWED_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.NO_MODIFICATION_ALLOWED_ERR = 7; +DOMException.NO_MODIFICATION_ALLOWED_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.NOT_FOUND_ERR = 8; +DOMException.NOT_FOUND_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.NOT_SUPPORTED_ERR = 9; +DOMException.NOT_SUPPORTED_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF */ -DOMException.INUSE_ATTRIBUTE_ERR = 10; +DOMException.INUSE_ATTRIBUTE_ERR; /** * @constructor @@ -119,24 +118,13 @@ DOMImplementation.prototype.hasFeature = function(feature, version) {}; */ function Node() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Node.prototype.addEventListener = function(type, listener, opt_useCapture) {}; +/** @override */ +Node.prototype.addEventListener = function(type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Node.prototype.removeEventListener = function(type, listener, opt_useCapture) {}; +/** @override */ +Node.prototype.removeEventListener = function(type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ Node.prototype.dispatchEvent = function(evt) {}; /** @@ -207,14 +195,16 @@ Node.prototype.previousSibling; /** * @param {Node} newChild - * @return {Node} + * @return {!Node} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild */ Node.prototype.appendChild = function(newChild) {}; /** * @param {boolean} deep - * @return {!Node} + * @return {THIS} + * @this {THIS} + * @template THIS * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode * @nosideeffects */ @@ -251,79 +241,73 @@ Node.prototype.removeChild = function(oldChild) {}; Node.prototype.replaceChild = function(newChild, oldChild) {}; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.ATTRIBUTE_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.CDATA_SECTION_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.COMMENT_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.DOCUMENT_FRAGMENT_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.DOCUMENT_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.DOCUMENT_TYPE_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.ELEMENT_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.ENTITY_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.ENTITY_REFERENCE_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.PROCESSING_INSTRUCTION_NODE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.TEXT_NODE; /** - * @type {number} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 - */ -Node.XPATH_NAMESPACE_NODE; - -/** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247 */ Node.NOTATION_NODE; @@ -349,7 +333,7 @@ function Document() {} Document.prototype.doctype; /** - * @type {!Element} + * @type {!HTMLHtmlElement} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement */ Document.prototype.documentElement; @@ -395,25 +379,17 @@ Document.prototype.createDocumentFragment = function() {}; * Create a DOM element. * * Web components introduced the second parameter as a way of extending existing - * tags (e.g. document.createElement('button', 'fancy-button')). + * tags (e.g. document.createElement('button', {is: 'fancy-button'})). * * @param {string} tagName - * @param {string=} opt_typeExtension + * @param {({is: string}|string)=} opt_typeExtension * @return {!Element} * @nosideeffects * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement - * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate + * @see https://dom.spec.whatwg.org/#dom-document-createelement */ Document.prototype.createElement = function(tagName, opt_typeExtension) {}; -/** - * @param {string} name - * @return {!EntityReference} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createEntityReference - * @nosideeffects - */ -Document.prototype.createEntityReference = function(name) {}; - /** * @param {string} target * @param {string} data @@ -439,6 +415,32 @@ Document.prototype.createTextNode = function(data) {}; */ Document.prototype.getElementsByTagName = function(tagname) {}; +/** + * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/open + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open + */ +Document.prototype.open; + +/** + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close + */ +Document.prototype.close = function() {}; + +/** + * @param {!TrustedHTML|string} text + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write + */ +Document.prototype.write = function(text) {}; + +/** + * @param {!TrustedHTML|string} text + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln + */ +Document.prototype.writeln = function(text) {}; + /** * @constructor * @implements {IArrayLike} @@ -461,6 +463,33 @@ NodeList.prototype.length; */ NodeList.prototype.item = function(index) {}; +/** + * @param {?function(this:S, T, number, !NodeList): ?} callback + * @param {S=} opt_thisobj + * @template S + * @return {undefined} + * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach + */ +NodeList.prototype.forEach = function(callback, opt_thisobj) {}; + +/** + * @return {!IteratorIterable>} + * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/entries + */ +NodeList.prototype.entries = function() {}; + +/** + * @return {!IteratorIterable} + * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/keys + */ +NodeList.prototype.keys = function() {}; + +/** + * @return {!IteratorIterable} + * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/values + */ +NodeList.prototype.values = function() {}; + /** * @constructor * @implements {IObject<(string|number), T>} @@ -599,6 +628,13 @@ Attr.prototype.value; */ function Element() {} +/** + * @type {string} + * @implicitCast + * @see https://dom.spec.whatwg.org/index.html#dom-element-id + */ +Element.prototype.id; + /** * An Element always contains a non-null NamedNodeMap containing the attributes * of this node. @@ -626,13 +662,13 @@ Element.prototype.className; /** * @param {string} name - * @param {number?=} opt_flags + * @param {?number=} flags * @return {string} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx * @nosideeffects */ -Element.prototype.getAttribute = function(name, opt_flags) {}; +Element.prototype.getAttribute = function(name, flags) {}; /** * @param {string} name @@ -666,9 +702,9 @@ Element.prototype.removeAttributeNode = function(oldAttr) {}; /** * @param {string} name - * @param {string|number|boolean} value Values are converted to strings with - * ToString, so we accept number and boolean since both convert easily to - * strings. + * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL} + * value Values are converted to strings with ToString, so we accept number + * and boolean since both convert easily to strings. * @return {undefined} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute */ @@ -706,8 +742,8 @@ Element.prototype.setAttributeNode = function(newAttr) {}; /** @type {?function (Event)} */ Element.prototype.onkeydown; /** @type {?function (Event)} */ Element.prototype.onkeypress; /** @type {?function (Event)} */ Element.prototype.onkeyup; -/** @type {?function (Event)} */ Element.prototype.onload; -/** @type {?function (Event)} */ Element.prototype.onunload; +/** @type {?function (Event): void} */ Element.prototype.onload; +/** @type {?function (Event): void} */ Element.prototype.onunload; /** @type {?function (Event)} */ Element.prototype.onmousedown; /** @type {?function (Event)} */ Element.prototype.onmousemove; /** @type {?function (Event)} */ Element.prototype.onmouseout; @@ -726,9 +762,10 @@ Element.prototype.setAttributeNode = function(newAttr) {}; /** * @constructor * @extends {CharacterData} + * @param {string=} contents Optional textual content. * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772 */ -function Text() {} +function Text(contents) {} /** * @param {number} offset @@ -758,75 +795,12 @@ function CDATASection() {} */ function DocumentType() {} -/** - * @type {NamedNodeMap} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1788794630 - */ -DocumentType.prototype.entities; - /** * @type {string} * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134 */ DocumentType.prototype.name; -/** - * @type {NamedNodeMap} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D46829EF - */ -DocumentType.prototype.notations; - -/** - * @constructor - * @extends {Node} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5431D1B9 - */ -function Notation() {} - -/** - * @type {string} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-54F2B4D0 - */ -Notation.prototype.publicId; - -/** - * @type {string} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E8AAB1D0 - */ -Notation.prototype.systemId; - -/** - * @constructor - * @extends {Node} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-527DCFF2 - */ -function Entity() {} - -/** - * @type {string} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D7303025 - */ -Entity.prototype.publicId; - -/** - * @type {string} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D7C29F3E - */ -Entity.prototype.systemId; - -/** - * @type {string} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6ABAEB38 - */ -Entity.prototype.notationName; - -/** - * @constructor - * @extends {Node} - * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-11C98490 - */ -function EntityReference() {} - /** * @constructor * @extends {Node} @@ -854,25 +828,13 @@ ProcessingInstruction.prototype.target; function Window() {} Window.prototype.Window; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Window.prototype.addEventListener = function(type, listener, opt_useCapture) {}; +/** @override */ +Window.prototype.addEventListener = function(type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Window.prototype.removeEventListener = function(type, listener, opt_useCapture) - {}; +/** @override */ +Window.prototype.removeEventListener = function(type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ Window.prototype.dispatchEvent = function(evt) {}; /** @type {?function (Event)} */ Window.prototype.onabort; @@ -885,9 +847,11 @@ Window.prototype.dispatchEvent = function(evt) {}; /** @type {?function (Event)} */ Window.prototype.ondblclick; /** @type {?function (Event)} */ Window.prototype.ondragdrop; // onerror has a special signature. -// See https://developer.mozilla.org/en/DOM/window.onerror -// and http://msdn.microsoft.com/en-us/library/cc197053(VS.85).aspx -/** @type {?function (string, string, number)} */ +// See +// https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror +/** + * @type {?function (string, string, number, number, !Error):?} + */ Window.prototype.onerror; /** @type {?function (Event)} */ Window.prototype.onfocus; /** @type {?function (Event)} */ Window.prototype.onhashchange; @@ -908,5 +872,7 @@ Window.prototype.onerror; /** @type {?function (Event)} */ Window.prototype.onscroll; /** @type {?function (Event)} */ Window.prototype.onselect; /** @type {?function (Event=)} */ Window.prototype.onsubmit; +/** @type {?function (Event)} */ Window.prototype.onunhandledrejection; /** @type {?function (Event)} */ Window.prototype.onunload; /** @type {?function (Event)} */ Window.prototype.onwheel; +/** @type {?function (Event)} */ Window.prototype.onstorage; diff --git a/javascript/externs/web/w3c_dom2.js b/javascript/externs/web/w3c_dom2.js index fa35250d79fb..43867eff7b84 100644 --- a/javascript/externs/web/w3c_dom2.js +++ b/javascript/externs/web/w3c_dom2.js @@ -51,6 +51,32 @@ Document.prototype.createElementNS = Document.prototype.createAttributeNS = function(namespaceURI, qualifiedName) {}; +/** + * @param {Node} root + * @param {number=} whatToShow + * @param {NodeFilter=} filter + * @param {boolean=} entityReferenceExpansion + * @return {!NodeIterator} + * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document + * @see https://dom.spec.whatwg.org/#interface-document + * @nosideeffects + */ +Document.prototype.createNodeIterator = function( + root, whatToShow, filter, entityReferenceExpansion) {}; + +/** + * @param {Node} root + * @param {number=} whatToShow + * @param {NodeFilter=} filter + * @param {boolean=} entityReferenceExpansion + * @return {!TreeWalker} + * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document + * @see https://dom.spec.whatwg.org/#interface-document + * @nosideeffects + */ +Document.prototype.createTreeWalker = function( + root, whatToShow, filter, entityReferenceExpansion) {}; + /** * @param {string} namespace * @param {string} name @@ -61,9 +87,9 @@ Document.prototype.createAttributeNS = Document.prototype.getElementsByTagNameNS = function(namespace, name) {}; /** - * @param {Node} externalNode - * @param {boolean} deep - * @return {Node} + * @param {!Node} externalNode + * @param {boolean=} deep + * @return {!Node} * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode */ Document.prototype.importNode = function(externalNode, deep) {}; @@ -72,6 +98,7 @@ Document.prototype.importNode = function(externalNode, deep) {}; * @constructor * @implements {IObject<(string|number),T>} * @implements {IArrayLike} + * @implements {Iterable} * @template T * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506 */ @@ -101,26 +128,44 @@ HTMLCollection.prototype.namedItem = function(name) {}; /** * @constructor - * @implements {IObject<(string|number),HTMLOptionElement>} - * @implements {IArrayLike} - * @see http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection + * @extends {HTMLCollection} + * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection */ function HTMLOptionsCollection() {} /** * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection-length + * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length + * @nosideeffects */ HTMLOptionsCollection.prototype.length; /** + * @param {HTMLOptionElement|HTMLOptGroupElement} element + * @param {HTMLElement|number=} before + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add + */ +HTMLOptionsCollection.prototype.add = function(element, before) {}; + +/** + * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from + * HTMLCollection, but it must be declared explicitly to work around an error + * when building a jsinterop library for GWT. * @param {number} index - * @return {Node} - * @see http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection-item + * @return {HTMLOptionElement} + * @override * @nosideeffects */ HTMLOptionsCollection.prototype.item = function(index) {}; +/** + * @param {number} index + * @return {undefined} + * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove + */ +HTMLOptionsCollection.prototype.remove = function(index) {}; + /** * @constructor * @extends {Document} @@ -210,24 +255,24 @@ HTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {}; * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98948567 * @override */ -HTMLDocument.prototype.close = function() {}; - -/** - * @param {string} text - * @return {undefined} - * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75233634 - * @override - */ -HTMLDocument.prototype.write = function(text) {}; - -/** - * @param {string} text - * @return {undefined} - * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35318390 - * @override - */ -HTMLDocument.prototype.writeln = function(text) {}; - + HTMLDocument.prototype.close = function() {}; + + /** + * @param {string} text + * @return {undefined} + * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75233634 + * @override + */ + HTMLDocument.prototype.write = function(text) {}; + + /** + * @param {string} text + * @return {undefined} + * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35318390 + * @override + */ + HTMLDocument.prototype.writeln = function(text) {}; + /** * @param {string} elementName * @return {!NodeList} @@ -245,7 +290,7 @@ HTMLDocument.prototype.getElementsByName = function(elementName) {}; * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-Document * @nosideeffects */ -HTMLDocument.prototype.createNodeIterator = function( + HTMLDocument.prototype.createNodeIterator = function( root, whatToShow, filter, entityReferenceExpansion) {}; /** @@ -268,7 +313,7 @@ HTMLDocument.prototype.createTreeWalker = function( var TraversalDocument; /** - * @interface + * @record * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter */ function NodeFilter() {} @@ -405,13 +450,6 @@ TreeWalker.prototype.currentNode; */ function HTMLElement() {} -/** - * @implicitCast - * @type {string} - * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63534901 - */ -HTMLElement.prototype.id; - /** * @type {string} * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800 @@ -497,6 +535,7 @@ HTMLLinkElement.prototype.charset; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588 */ HTMLLinkElement.prototype.href; @@ -540,6 +579,12 @@ HTMLLinkElement.prototype.type; /** @type {StyleSheet} */ HTMLLinkElement.prototype.sheet; +/** + * @type {!DOMTokenList} + * @see https://github.com/WICG/webpackage/blob/master/explainers/subresource-loading.md + */ +HTMLLinkElement.prototype.resources; + /** * @constructor * @extends {HTMLElement} @@ -593,6 +638,7 @@ function HTMLBaseElement() {} /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887 */ HTMLBaseElement.prototype.href; @@ -710,7 +756,6 @@ function HTMLFormControlsCollection() {} * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem * @nosideeffects * @override - * @suppress {newCheckTypes} */ HTMLFormControlsCollection.prototype.namedItem = function(name) {}; @@ -722,7 +767,7 @@ HTMLFormControlsCollection.prototype.namedItem = function(name) {}; function HTMLFormElement() {} /** - * @type {HTMLFormControlsCollection} + * @type {!HTMLFormControlsCollection} * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479 */ HTMLFormElement.prototype.elements; @@ -747,6 +792,7 @@ HTMLFormElement.prototype.acceptCharset; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184 */ HTMLFormElement.prototype.action; @@ -954,6 +1000,20 @@ HTMLOptionElement.prototype.text; */ HTMLOptionElement.prototype.value; + + +/** + * @constructor + * @extends {HTMLOptionElement} + * @param {*=} opt_text + * @param {*=} opt_value + * @param {*=} opt_defaultSelected + * @param {*=} opt_selected + */ +function Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {} + + + /** * @constructor * @extends {HTMLElement} @@ -1041,6 +1101,7 @@ HTMLInputElement.prototype.size; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704 */ HTMLInputElement.prototype.src; @@ -1618,6 +1679,7 @@ HTMLAnchorElement.prototype.coords; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319 */ HTMLAnchorElement.prototype.href; @@ -1803,6 +1865,7 @@ HTMLObjectElement.prototype.code; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136 */ HTMLObjectElement.prototype.codeBase; @@ -1821,6 +1884,7 @@ HTMLObjectElement.prototype.contentDocument; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986 */ HTMLObjectElement.prototype.data; @@ -2045,6 +2109,7 @@ HTMLAreaElement.prototype.coords; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936 */ HTMLAreaElement.prototype.href; @@ -2104,14 +2169,21 @@ HTMLScriptElement.prototype.event; */ HTMLScriptElement.prototype.htmlFor; +/** + * @type {?function(!Event)} + */ +HTMLScriptElement.prototype.onreadystatechange; + /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231 */ HTMLScriptElement.prototype.src; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999 */ HTMLScriptElement.prototype.text; @@ -2436,7 +2508,7 @@ HTMLTableRowElement.prototype.deleteCell = function(index) {}; /** * @param {number} index - * @return {HTMLElement} + * @return {!HTMLElement} * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016 */ HTMLTableRowElement.prototype.insertCell = function(index) {}; @@ -2616,6 +2688,7 @@ HTMLFrameElement.prototype.scrolling; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535 */ HTMLFrameElement.prototype.src; @@ -2684,6 +2757,7 @@ HTMLIFrameElement.prototype.scrolling; /** * @type {string} + * @implicitCast * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957 */ HTMLIFrameElement.prototype.src; @@ -2696,31 +2770,253 @@ HTMLIFrameElement.prototype.src; HTMLIFrameElement.prototype.width; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF */ -DOMException.INVALID_STATE_ERR = 11; +DOMException.INVALID_STATE_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF */ -DOMException.SYNTAX_ERR = 12; +DOMException.SYNTAX_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF */ -DOMException.INVALID_MODIFICATION_ERR = 13; +DOMException.INVALID_MODIFICATION_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF */ -DOMException.NAMESPACE_ERR = 14; +DOMException.NAMESPACE_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF */ -DOMException.INVALID_ACCESS_ERR = 15; +DOMException.INVALID_ACCESS_ERR; +/** + * @type {boolean} + * @see https://developer.mozilla.org/en/DOM/window.closed + */ +Window.prototype.closed; + +/** + * @type {HTMLObjectElement|HTMLIFrameElement|null} + * @see https://developer.mozilla.org/en/DOM/window.frameElement + */ +Window.prototype.frameElement; + +/** + * Allows lookup of frames by index or by name. + * @type {!Window} + * @see https://developer.mozilla.org/en/DOM/window.frames + */ +Window.prototype.frames; + +/** + * @type {!History} + * @suppress {duplicate} + * @see https://developer.mozilla.org/en/DOM/window.history + */ +var history; + +/** + * @type {!History} + * @see https://developer.mozilla.org/en/DOM/window.history + */ +Window.prototype.history; + +/** + * Returns the number of frames (either frame or iframe elements) in the + * window. + * + * @type {number} + * @see https://developer.mozilla.org/en/DOM/window.length + */ +Window.prototype.length; + +/** + * Location has an exception in the DeclaredGlobalExternsOnWindow pass + * so we have to manually include it: + * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116 + * + * @type {!Location} + * @implicitCast + * @see https://developer.mozilla.org/en/DOM/window.location + */ +Window.prototype.location; + +/** + + * @type {string} + * @see https://developer.mozilla.org/en/DOM/window.name + */ +Window.prototype.name; + +/** + * @type {!Navigator} + * @see https://developer.mozilla.org/en/DOM/window.navigator + */ +Window.prototype.navigator; + +/** + * @type {?Window} + * @see https://developer.mozilla.org/en/DOM/window.opener + */ +Window.prototype.opener; + +/** + * @type {!Window} + * @see https://developer.mozilla.org/en/DOM/window.parent + */ +Window.prototype.parent; + +/** + * @type {!Window} + * @see https://developer.mozilla.org/en/DOM/window.self + */ +Window.prototype.self; + +/** + * @type {?string} + * @see https://developer.mozilla.org/en/DOM/window.status + */ +Window.prototype.status; + +/** + * @interface + * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object + */ +function BarProp() {} + +/** @const {boolean} */ +BarProp.prototype.visible; + +/** + * @type {!BarProp} + * @see https://developer.mozilla.org/en/DOM/window.locationbar + */ +Window.prototype.locationbar; + +/** + * @type {!BarProp} + * @see https://developer.mozilla.org/en/DOM/window.menubar + */ +Window.prototype.menubar; + +/** + * @type {!BarProp} + * @see https://developer.mozilla.org/en/DOM/window.personalbar + */ +Window.prototype.personalbar; + + +/** + * @type {!BarProp} + * @see https://developer.mozilla.org/en/DOM/window.scrollbars + */ +Window.prototype.scrollbars; + +/** + * @type {!BarProp} + * @see https://developer.mozilla.org/en/DOM/window.statusbar + */ +Window.prototype.statusbar; + +/** + * @type {!BarProp} + * @see https://developer.mozilla.org/en/DOM/window.toolbar + */ +Window.prototype.toolbar; + +/** + * @type {!Window} + * @see https://developer.mozilla.org/en/DOM/window.self + */ +Window.prototype.top; + +/** + * @type {!Window} + * @see https://developer.mozilla.org/en/DOM/window.self + */ +Window.prototype.window; + +/** + * @param {*} message + * @see https://developer.mozilla.org/en/DOM/window.alert + * @return {undefined} + */ +Window.prototype.alert = function(message) {}; + +/** + * @param {*} message + * @return {boolean} + * @see https://developer.mozilla.org/en/DOM/window.confirm + */ +Window.prototype.confirm = function(message) {}; + +/** + * @param {string} message + * @param {string=} value + * @return {?string} + * @see https://developer.mozilla.org/en/DOM/window.prompt + */ +Window.prototype.prompt = function(message, value) {}; + +/** + * @see https://developer.mozilla.org/en/DOM/window.blur + * @return {undefined} + */ +Window.prototype.blur = function() {}; + +/** + * @see https://developer.mozilla.org/en/DOM/window.close + * @return {undefined} + */ +Window.prototype.close = function() {}; + +/** + * @see https://developer.mozilla.org/en/DOM/window.focus + * @return {undefined} + */ +Window.prototype.focus = function() {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/print + * @return {undefined} + */ +Window.prototype.print = function() {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/stop + * @return {undefined} + */ +Window.prototype.stop = function() {}; + +/** + * @param {*=} url + * @param {string=} windowName + * @param {string=} windowFeatures + * @param {boolean=} replace + * @return {Window} + * @see http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx + */ +Window.prototype.open = function(url, windowName, windowFeatures, replace) {}; + +/** + * @type {string} + * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML + * @implicitCast + */ +Element.prototype.innerHTML; + +/** + * @type {string} + * @implicitCast + * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface + */ +Element.prototype.outerHTML; diff --git a/javascript/externs/web/w3c_dom3.js b/javascript/externs/web/w3c_dom3.js index 6ddcaefa7030..c87a840ebedf 100644 --- a/javascript/externs/web/w3c_dom3.js +++ b/javascript/externs/web/w3c_dom3.js @@ -32,16 +32,16 @@ DOMException.prototype.code; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF */ -DOMException.VALIDATION_ERR = 16; +DOMException.VALIDATION_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF */ -DOMException.TYPE_MISMATCH_ERR = 17; +DOMException.TYPE_MISMATCH_ERR; /** * @constructor @@ -72,52 +72,6 @@ DOMStringList.prototype.contains = function(str) {}; */ DOMStringList.prototype.item = function(index) {}; -/** - * @constructor - * @implements {IArrayLike} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList - */ -function NameList() {} - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-length - */ -NameList.prototype.length; - -/** - * @param {string} str - * @return {boolean} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-contains - * @nosideeffects - */ -NameList.prototype.contains = function(str) {}; - -/** - * @param {?string} namespaceURI - * @param {string} name - * @return {boolean} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-containsNS - * @nosideeffects - */ -NameList.prototype.containsNS = function(namespaceURI, name) {}; - -/** - * @param {number} index - * @return {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-getName - * @nosideeffects - */ -NameList.prototype.getName = function(index) {}; - -/** - * @param {number} index - * @return {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-getNamespaceURI - * @nosideeffects - */ -NameList.prototype.getNamespaceURI = function(index) {}; - /** * @constructor * @implements {IArrayLike} @@ -148,9 +102,9 @@ function DOMImplementationSource() {} /** * @param {?string} namespaceURI * @param {string} publicId - * @param {DocumentType} doctype + * @param {DocumentType=} doctype * @return {Document} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument + * @see https://dom.spec.whatwg.org/#ref-for-dom-domimplementation-createdocument%E2%91%A0 * @nosideeffects */ DOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {}; @@ -181,15 +135,6 @@ DOMImplementationSource.prototype.getDOMImplementation = function(features) {}; */ DOMImplementationSource.prototype.getDOMImplementationList = function(features) {}; -/** - * @param {string} feature - * @param {string} version - * @return {Object} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementation3-getFeature - * @nosideeffects - */ -DOMImplementation.prototype.getFeature = function(feature, version) {}; - /** * @param {Node} externalNode * @return {Node} @@ -203,24 +148,12 @@ Document.prototype.adoptNode = function(externalNode) {}; */ Document.prototype.documentURI; -/** - * @type {DOMConfiguration} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-domConfig - */ -Document.prototype.domConfig; - /** * @type {string} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding */ Document.prototype.inputEncoding; -/** - * @type {boolean} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-strictErrorChecking - */ -Document.prototype.strictErrorChecking; - /** * @type {string} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding @@ -239,21 +172,6 @@ Document.prototype.xmlStandalone; */ Document.prototype.xmlVersion; -/** - * @return {undefined} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-normalizeDocument - */ -Document.prototype.normalizeDocument = function() {}; - -/** - * @param {Node} n - * @param {?string} namespaceURI - * @param {string} qualifiedName - * @return {Node} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-renameNode - */ -Document.prototype.renameNode = function(n, namespaceURI, qualifiedName) {}; - /** * @type {?string} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI @@ -286,40 +204,40 @@ Node.prototype.prefix; Node.prototype.textContent; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED */ -Node.DOCUMENT_POSITION_DISCONNECTED = 0x01; +Node.DOCUMENT_POSITION_DISCONNECTED; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING */ -Node.DOCUMENT_POSITION_PRECEDING = 0x02; +Node.DOCUMENT_POSITION_PRECEDING; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING */ -Node.DOCUMENT_POSITION_FOLLOWING = 0x04; +Node.DOCUMENT_POSITION_FOLLOWING; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS */ -Node.DOCUMENT_POSITION_CONTAINS = 0x08; +Node.DOCUMENT_POSITION_CONTAINS; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY */ -Node.DOCUMENT_POSITION_CONTAINED_BY = 0x10; +Node.DOCUMENT_POSITION_CONTAINED_BY; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC */ -Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; +Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC; /** * @param {Node} other @@ -377,15 +295,6 @@ Node.prototype.isEqualNode = function(arg) {}; */ Node.prototype.isSameNode = function(other) {}; -/** - * @param {string} feature - * @param {string} version - * @return {boolean} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-Node-supports - * @nosideeffects - */ -Node.prototype.isSupported = function(feature, version) {}; - /** * @param {string} prefix * @return {string} @@ -408,15 +317,6 @@ Node.prototype.lookupPrefix = function(namespaceURI) {}; */ Node.prototype.normalize = function() {}; -/** - * @param {Object} key - * @param {Object} data - * @param {UserDataHandler} handler - * @return {Object} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-setUserData' - */ -Node.prototype.setUserData = function(key, data, handler) {}; - /** * @param {string} query * @return {?Element} @@ -445,18 +345,6 @@ Attr.prototype.ownerElement; */ Attr.prototype.isId; -/** - * @type {TypeInfo} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-schemaTypeInfo - */ -Attr.prototype.schemaTypeInfo; - -/** - * @type {TypeInfo} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Element-schemaTypeInfo - */ -Element.prototype.schemaTypeInfo; - /** * @param {?string} namespaceURI * @param {string} localName @@ -527,144 +415,12 @@ Element.prototype.setAttributeNodeNS = function(newAttr) {}; */ Element.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {}; -/** - * @param {string} name - * @param {boolean} isId - * @return {undefined} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetIdAttr - */ -Element.prototype.setIdAttribute = function(name, isId) {}; - -/** - * @param {Attr} idAttr - * @param {boolean} isId - * @return {undefined} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetIdAttrNode - */ -Element.prototype.setIdAttributeNode = function(idAttr, isId) {}; - -/** - * @param {?string} namespaceURI - * @param {string} localName - * @param {boolean} isId - * @return {undefined} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetIdAttrNS - */ -Element.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {}; - /** * @type {string} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText */ Text.prototype.wholeText; -/** - * @param {string} newText - * @return {Text} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-replaceWholeText - */ -Text.prototype.replaceWholeText = function(newText) {}; - -/** - * @constructor - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo - */ -function TypeInfo() {} - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_EXTENSION - */ -TypeInfo.prototype.DERIVATION_EXTENSION; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_LIST - */ -TypeInfo.prototype.DERIVATION_LIST; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_RESTRICTION - */ -TypeInfo.prototype.DERIVATION_RESTRICTION; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_UNION - */ -TypeInfo.prototype.DERIVATION_UNION; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-typeName - */ -TypeInfo.prototype.typeName; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-typeNamespace - */ -TypeInfo.prototype.typeNamespace; - -/** - * @param {string} typeNamespaceArg - * @param {string} typeNameArg - * @param {number} derivationMethod - * @return {boolean} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-isDerivedFrom - * @nosideeffects - */ -TypeInfo.prototype.isDerivedFrom = function(typeNamespaceArg, typeNameArg, derivationMethod) {}; - -/** - * @constructor - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler - */ -function UserDataHandler() {} - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-CLONED - */ -UserDataHandler.prototype.NODE_CLONED = 1; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-IMPORTED - */ -UserDataHandler.prototype.NODE_IMPORTED = 2; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-DELETED - */ -UserDataHandler.prototype.NODE_DELETED = 3; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-RENAMED - */ -UserDataHandler.prototype.NODE_RENAMED = 4; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-ADOPTED - */ -UserDataHandler.prototype.NODE_ADOPTED = 5; - -/** - * @param {number} operation - * @param {string} key - * @param {*=} opt_data - * @param {?Node=} opt_src - * @param {?Node=} opt_dst - * @return {undefined} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-handleUserDataEvent - */ -UserDataHandler.prototype.handle = function(operation, key, opt_data, - opt_src, opt_dst) {}; - /** * @constructor * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError @@ -696,22 +452,22 @@ DOMError.prototype.relatedData; DOMError.prototype.relatedException; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning */ -DOMError.SEVERITY_WARNING = 1; +DOMError.SEVERITY_WARNING; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error */ -DOMError.SEVERITY_ERROR = 2; +DOMError.SEVERITY_ERROR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error */ -DOMError.SEVERITY_FATAL_ERROR = 3; +DOMError.SEVERITY_FATAL_ERROR; /** * @type {number} @@ -786,48 +542,6 @@ DOMLocator.prototype.uri; */ DOMLocator.prototype.utf16Offset; -/** - * @constructor - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration - */ -function DOMConfiguration() {} - -/** - * @type {DOMStringList} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-parameterNames - */ -DOMConfiguration.prototype.parameterNames; - -/** - * @param {string} name - * @return {boolean} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-canSetParameter - * @nosideeffects - */ -DOMConfiguration.prototype.canSetParameter = function(name) {}; - -/** - * @param {string} name - * @return {*} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-getParameter - * @nosideeffects - */ -DOMConfiguration.prototype.getParameter = function(name) {}; - -/** - * @param {string} name - * @param {*} value - * @return {*} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-property - */ -DOMConfiguration.prototype.setParameter = function(name, value) {}; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-internalSubset - */ -DocumentType.prototype.internalSubset; - /** * @type {string} * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId @@ -839,21 +553,3 @@ DocumentType.prototype.publicId; * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId */ DocumentType.prototype.systemId; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Entity3-inputEncoding - */ -Entity.prototype.inputEncoding; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Entity3-encoding - */ -Entity.prototype.xmlEncoding; - -/** - * @type {string} - * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Entity3-version - */ -Entity.prototype.xmlVersion; diff --git a/javascript/externs/web/w3c_dom4.js b/javascript/externs/web/w3c_dom4.js index 000ce709c1e2..d0bd05a534f1 100644 --- a/javascript/externs/web/w3c_dom4.js +++ b/javascript/externs/web/w3c_dom4.js @@ -46,3 +46,223 @@ Element.prototype.remove = function() {}; * @see https://www.w3.org/TR/domcore/#dom-childnode-remove */ CharacterData.prototype.remove = function() {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith + */ +DocumentType.prototype.replaceWith = function(nodes) {}; + +/** + * @const {string} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror + */ +DOMException.prototype.name; + +/** + * @const {string} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror + */ +DOMException.prototype.message; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.SECURITY_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.NETWORK_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.ABORT_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.URL_MISMATCH_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.QUOTA_EXCEEDED_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.TIMEOUT_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.INVALID_NODE_TYPE_ERR; + +/** + * @const {number} + * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table + */ +DOMException.DATA_CLONE_ERR; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith + */ +Element.prototype.replaceWith = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith + */ +CharacterData.prototype.replaceWith = function(nodes) {}; + +/** + * @return {!Array} + * @see https://dom.spec.whatwg.org/#dom-element-getattributenames + */ +Element.prototype.getAttributeNames = function() {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-parentnode-append + */ +Element.prototype.append = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-parentnode-append + */ +Document.prototype.append = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-parentnode-append + */ +DocumentFragment.prototype.append = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend + */ +Element.prototype.prepend = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend + */ +Document.prototype.prepend = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend + */ +DocumentFragment.prototype.prepend = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-before + */ +Element.prototype.before = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-before + */ +DocumentType.prototype.before = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-before + */ +CharacterData.prototype.before = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-after + */ +Element.prototype.after = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-after + */ +DocumentType.prototype.after = function(nodes) {}; + +/** + * @param {...(!Node|string)} nodes + * @return {undefined} + * @see https://dom.spec.whatwg.org/#dom-childnode-after + */ +CharacterData.prototype.after = function(nodes) {}; + +/** + * @param {string} name + * @param {boolean=} force + * @return {boolean} + * @throws {DOMException} + * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute + */ +Element.prototype.toggleAttribute = function(name, force) {}; + +/** + * @type {Element} + * @see http://msdn.microsoft.com/en-us/library/ms534327(VS.85).aspx + */ +Node.prototype.parentElement; + +/** + * @param {string} name + * @return {!HTMLCollection} + * @nosideeffects + * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames + */ +Document.prototype.getElementsByClassName = function(name) {}; + +/** + * @param {string} classNames + * @return {!HTMLCollection} + * @nosideeffects + * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames + */ +Element.prototype.getElementsByClassName = function(classNames) {}; + +/** + * @param {string} where + * @param {Element} element + * @return {!Element} + * @throws {DOMException} + * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement + */ +Element.prototype.insertAdjacentElement = function(where, element) {}; + +/** + * @param {string} where + * @param {string} data + * @return {undefined} + * @throws {DOMException} + * @see https://dom.spec.whatwg.org/#dom-element-insertadjacenttext + */ +Element.prototype.insertAdjacentText = function(where, data) {}; diff --git a/javascript/externs/web/w3c_event.js b/javascript/externs/web/w3c_event.js index 8b66d6a4d809..bbe0ba06624f 100644 --- a/javascript/externs/web/w3c_event.js +++ b/javascript/externs/web/w3c_event.js @@ -26,33 +26,38 @@ /** * @interface + * @see https://dom.spec.whatwg.org/#interface-eventtarget */ function EventTarget() {} /** - * TODO(tbreisacher): Change the type of useCapture to be - * {boolean|!EventListenerOptions}, here and in removeEventListener. - * * @param {string} type - * @param {EventListener|function(!Event):(boolean|undefined)} listener - * @param {boolean} useCapture + * @param {EventListener|function(this:THIS, !Event):*} listener + * @param {(boolean|!AddEventListenerOptions)=} opt_options * @return {undefined} + * @this {THIS} + * @template THIS + * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener */ -EventTarget.prototype.addEventListener = function(type, listener, useCapture) - {}; +EventTarget.prototype.addEventListener = function(type, listener, opt_options) { +}; /** * @param {string} type - * @param {EventListener|function(!Event):(boolean|undefined)} listener - * @param {boolean} useCapture + * @param {EventListener|function(this:THIS, !Event):*} listener + * @param {(boolean|!EventListenerOptions)=} opt_options * @return {undefined} + * @this {THIS} + * @template THIS + * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener */ -EventTarget.prototype.removeEventListener = function(type, listener, useCapture) - {}; +EventTarget.prototype.removeEventListener = function( + type, listener, opt_options) {}; /** * @param {!Event} evt * @return {boolean} + * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent */ EventTarget.prototype.dispatchEvent = function(evt) {}; @@ -99,23 +104,22 @@ EventInit.prototype.composed; function Event(type, opt_eventInitDict) {} /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html */ -Event.AT_TARGET; +Event.CAPTURING_PHASE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html */ -Event.BUBBLING_PHASE; +Event.AT_TARGET; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html */ -Event.CAPTURING_PHASE; - +Event.BUBBLING_PHASE; /** @type {string} */ Event.prototype.type; @@ -163,8 +167,8 @@ Event.prototype.preventDefault = function() {}; /** * @param {string} eventTypeArg - * @param {boolean} canBubbleArg - * @param {boolean} cancelableArg + * @param {boolean=} canBubbleArg + * @param {boolean=} cancelableArg * @return {undefined} */ Event.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {}; @@ -172,18 +176,20 @@ Event.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) /** * @record * @extends {EventInit} + * @template T * @see https://dom.spec.whatwg.org/#dictdef-customeventinit */ function CustomEventInit() {} -/** @type {(*|undefined)} */ +/** @type {(T|undefined)} */ CustomEventInit.prototype.detail; /** * @constructor * @extends {Event} * @param {string} type - * @param {CustomEventInit=} opt_eventInitDict + * @param {CustomEventInit=} opt_eventInitDict + * @template T * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent */ function CustomEvent(type, opt_eventInitDict) {} @@ -192,14 +198,14 @@ function CustomEvent(type, opt_eventInitDict) {} * @param {string} eventType * @param {boolean} bubbles * @param {boolean} cancelable - * @param {*} detail + * @param {T} detail * @return {undefined} */ CustomEvent.prototype.initCustomEvent = function( eventType, bubbles, cancelable, detail) {}; /** - * @type {*} + * @type {T} */ CustomEvent.prototype.detail; @@ -430,6 +436,7 @@ KeyboardEventInit.prototype.char; KeyboardEventInit.prototype.locale; /** + * @see https://w3c.github.io/uievents/#idl-keyboardevent * @constructor * @extends {UIEvent} * @param {string} type @@ -452,6 +459,18 @@ KeyboardEvent.prototype.altKey; /** @type {boolean} */ KeyboardEvent.prototype.metaKey; +/** @type {number} */ +KeyboardEvent.DOM_KEY_LOCATION_STANDARD; + +/** @type {number} */ +KeyboardEvent.DOM_KEY_LOCATION_LEFT; + +/** @type {number} */ +KeyboardEvent.DOM_KEY_LOCATION_RIGHT; + +/** @type {number} */ +KeyboardEvent.DOM_KEY_LOCATION_NUMPAD; + /** * @param {string} keyIdentifierArg * @return {boolean} @@ -552,3 +571,33 @@ InputEvent.prototype.inputType; /** @type {?DataTransfer} */ InputEvent.prototype.dataTransfer; + + +/** + * @record + * @extends {EventInit} + * @see https://html.spec.whatwg.org/multipage/webappapis.html#promiserejectioneventinit + */ +function PromiseRejectionEventInit() {} + +/** @type {undefined|!Promise<*>} */ +PromiseRejectionEventInit.prototype.promise; + +/** @type {*} */ +PromiseRejectionEventInit.prototype.reason; + + +/** + * @constructor + * @extends {Event} + * @param {string} type + * @param {PromiseRejectionEventInit=} eventInitDict + * @see https://html.spec.whatwg.org/multipage/webappapis.html#promiserejectionevent + */ +function PromiseRejectionEvent(type, eventInitDict) {} + +/** @type {!Promise<*>} */ +PromiseRejectionEvent.prototype.promise; + +/** @type {*} */ +PromiseRejectionEvent.prototype.reason; \ No newline at end of file diff --git a/javascript/externs/web/w3c_geolocation.js b/javascript/externs/web/w3c_geolocation.js index afe2b52238aa..be541faac1cf 100644 --- a/javascript/externs/web/w3c_geolocation.js +++ b/javascript/externs/web/w3c_geolocation.js @@ -27,8 +27,18 @@ function Geolocation() {} /** - * @param {function(!GeolocationPosition)} successCallback - * @param {(function(!GeolocationPositionError)|null)=} opt_errorCallback + * @typedef {function(!GeolocationPosition): void} + */ +var PositionCallback; + +/** + * @typedef {function(!GeolocationPositionError): void} + */ +var PositionErrorCallback; + +/** + * @param {PositionCallback} successCallback + * @param {PositionErrorCallback=} opt_errorCallback * @param {GeolocationPositionOptions=} opt_options * @return {undefined} */ @@ -37,8 +47,8 @@ Geolocation.prototype.getCurrentPosition = function(successCallback, opt_options) {}; /** - * @param {function(!GeolocationPosition)} successCallback - * @param {(function(!GeolocationPositionError)|null)=} opt_errorCallback + * @param {PositionCallback} successCallback + * @param {PositionErrorCallback=} opt_errorCallback * @param {GeolocationPositionOptions=} opt_options * @return {number} */ @@ -54,7 +64,7 @@ Geolocation.prototype.clearWatch = function(watchId) {}; /** - * @constructor + * @record * @see http://www.w3.org/TR/geolocation-API/#coordinates */ function GeolocationCoordinates() {} @@ -64,24 +74,24 @@ GeolocationCoordinates.prototype.latitude; GeolocationCoordinates.prototype.longitude; /** @type {number} */ GeolocationCoordinates.prototype.accuracy; -/** @type {number} */ +/** @type {number|null} */ GeolocationCoordinates.prototype.altitude; -/** @type {number} */ +/** @type {number|null} */ GeolocationCoordinates.prototype.altitudeAccuracy; -/** @type {number} */ +/** @type {number|null} */ GeolocationCoordinates.prototype.heading; -/** @type {number} */ +/** @type {number|null} */ GeolocationCoordinates.prototype.speed; /** - * @constructor + * @record * @see http://www.w3.org/TR/geolocation-API/#position */ function GeolocationPosition() {} /** @type {GeolocationCoordinates} */ GeolocationPosition.prototype.coords; -/** @type {Date} */ +/** @type {number} */ GeolocationPosition.prototype.timestamp; @@ -99,7 +109,7 @@ GeolocationPositionOptions.prototype.timeout; /** - * @constructor + * @record * @see http://www.w3.org/TR/geolocation-API/#position-error */ function GeolocationPositionError() {} @@ -107,13 +117,13 @@ function GeolocationPositionError() {} GeolocationPositionError.prototype.code; /** @type {string} */ GeolocationPositionError.prototype.message; -/** @type {number} */ +/** @const {number} */ GeolocationPositionError.prototype.UNKNOWN_ERROR; -/** @type {number} */ +/** @const {number} */ GeolocationPositionError.prototype.PERMISSION_DENIED; -/** @type {number} */ +/** @const {number} */ GeolocationPositionError.prototype.POSITION_UNAVAILABLE; -/** @type {number} */ +/** @const {number} */ GeolocationPositionError.prototype.TIMEOUT; /** @type {Geolocation} */ diff --git a/javascript/externs/web/w3c_indexeddb.js b/javascript/externs/web/w3c_indexeddb.js index d0a87381c244..7d89363afac0 100644 --- a/javascript/externs/web/w3c_indexeddb.js +++ b/javascript/externs/web/w3c_indexeddb.js @@ -15,281 +15,140 @@ */ /** - * @fileoverview Definitions for W3C's IndexedDB API. In Chrome all the - * IndexedDB classes are prefixed with 'webkit'. In order to access constants - * and static methods of these classes they must be duplicated with the - * prefix here. - * @see http://www.w3.org/TR/IndexedDB/ + * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0. + * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/ + * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/ * * @externs * @author guido.tapia@picnet.com.au (Guido Tapia) + * @author vobruba.martin@gmail.com (Martin Vobruba) */ -/** @type {!IDBFactory|undefined} */ -Window.prototype.moz_indexedDB; +/** @type {!IDBFactory} */ +var indexedDB; /** @type {!IDBFactory|undefined} */ -Window.prototype.mozIndexedDB; +ServiceWorkerGlobalScope.prototype.indexedDB; -/** @type {!IDBFactory|undefined} */ -Window.prototype.webkitIndexedDB; -/** @type {!IDBFactory|undefined} */ -Window.prototype.msIndexedDB; - -/** @type {!IDBFactory|undefined} */ -Window.prototype.indexedDB; /** - * @constructor - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory - */ -function IDBFactory() {} - -/** - * @param {string} name The name of the database to open. - * @param {number=} opt_version The version at which to open the database. - * @return {!IDBOpenDBRequest} The IDBRequest object. - */ -IDBFactory.prototype.open = function(name, opt_version) {}; - -/** - * @param {string} name The name of the database to delete. - * @return {!IDBOpenDBRequest} The IDBRequest object. - */ -IDBFactory.prototype.deleteDatabase = function(name) {}; - -/** - * @constructor - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabaseException - */ -function IDBDatabaseException() {} - -/** - * @constructor - * @extends {IDBDatabaseException} - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabaseException - */ -function webkitIDBDatabaseException() {} - -/** - * @const - * @type {number} - */ -IDBDatabaseException.UNKNOWN_ERR; - -/** - * @const - * @type {number} + * Possible values: 'readonly', 'readwrite', 'versionchange' + * + * @typedef {string} + * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode */ -webkitIDBDatabaseException.UNKNOWN_ERR; +var IDBTransactionMode; -/** - * @const - * @type {number} - */ -IDBDatabaseException.NON_TRANSIENT_ERR; /** - * @const - * @type {number} - */ -webkitIDBDatabaseException.NON_TRANSIENT_ERR; - -/** - * @const - * @type {number} + * Possible values: 'pending', 'done' + * + * @typedef {string} + * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState */ -IDBDatabaseException.NOT_FOUND_ERR; +var IDBRequestReadyState; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.NOT_FOUND_ERR; /** - * @const - * @type {number} + * Possible values: 'next', 'nextunique', 'prev', 'prevunique' + * + * @typedef {string} + * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection */ -IDBDatabaseException.CONSTRAINT_ERR; +var IDBCursorDirection; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.CONSTRAINT_ERR; /** - * @const - * @type {number} + * @record + * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters */ -IDBDatabaseException.DATA_ERR; +function IDBIndexParameters(){}; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.DATA_ERR; +/** @type {(undefined|boolean)} */ +IDBIndexParameters.prototype.unique; -/** - * @const - * @type {number} - */ -IDBDatabaseException.NOT_ALLOWED_ERR; +/** @type {(undefined|boolean)} */ +IDBIndexParameters.prototype.multiEntry; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.NOT_ALLOWED_ERR; /** - * @const - * @type {number} + * @record + * @extends {EventInit} + * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit */ -IDBDatabaseException.TRANSACTION_INACTIVE_ERR; +function IDBVersionChangeEventInit(){}; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.TRANSACTION_INACTIVE_ERR; +/** @type {(undefined|number)} */ +IDBVersionChangeEventInit.prototype.oldVersion; -/** - * @const - * @type {number} - */ -IDBDatabaseException.ABORT_ERR; +/** @type {(undefined|number|null)} */ +IDBVersionChangeEventInit.prototype.newVersion; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.ABORT_ERR; -/** - * @const - * @type {number} - */ -IDBDatabaseException.READ_ONLY_ERR; /** - * @const - * @type {number} + * @record + * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters */ -webkitIDBDatabaseException.READ_ONLY_ERR; +function IDBObjectStoreParameters() {}; -/** - * @const - * @type {number} - */ -IDBDatabaseException.TIMEOUT_ERR; +/** @type {(undefined|string|!Array|null)} */ +IDBObjectStoreParameters.prototype.keyPath; -/** - * @const - * @type {number} - */ -webkitIDBDatabaseException.TIMEOUT_ERR; +/** @type {(undefined|boolean)} */ +IDBObjectStoreParameters.prototype.autoIncrement; -/** - * @const - * @type {number} - */ -IDBDatabaseException.QUOTA_ERR; /** - * @const - * @type {number} + * @constructor + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory */ -webkitIDBDatabaseException.QUOTA_ERR; +function IDBFactory() {} /** - * @const - * @type {number} + * @param {string} name The name of the database to open. + * @param {number=} opt_version The version at which to open the database. + * @return {!IDBOpenDBRequest} The IDBRequest object. */ -IDBDatabaseException.prototype.code; +IDBFactory.prototype.open = function(name, opt_version) {}; /** - * @const - * @type {number} + * @param {string} name The name of the database to delete. + * @return {!IDBOpenDBRequest} The IDBRequest object. */ -webkitIDBDatabaseException.prototype.code; +IDBFactory.prototype.deleteDatabase = function(name) {}; /** - * @const - * @type {string} + * @param {*} first + * @param {*} second + * @return {number} */ -IDBDatabaseException.prototype.message; +IDBFactory.prototype.cmp = function(first, second) {}; -/** - * @const - * @type {string} - */ -webkitIDBDatabaseException.prototype.message; /** * @constructor + * @template T * @implements {EventTarget} * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest + * @see https://www.w3.org/TR/IndexedDB-2/#request-api */ function IDBRequest() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -IDBRequest.prototype.addEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +IDBRequest.prototype.addEventListener = function(type, listener, opt_options) { +}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -IDBRequest.prototype.removeEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +IDBRequest.prototype.removeEventListener = function( + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ IDBRequest.prototype.dispatchEvent = function(evt) {}; /** - * @constructor - * @extends {IDBRequest} - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest - */ -function webkitIDBRequest() {} - -/** - * @type {number} - * @const - */ -IDBRequest.LOADING; - -/** - * @type {number} - * @const - */ -webkitIDBRequest.LOADING; - -/** - * @type {number} - * @const - */ -IDBRequest.DONE; - -/** - * @type {number} - * @const - */ -webkitIDBRequest.DONE; - -/** - * @type {number} + * @type {!IDBRequestReadyState} */ IDBRequest.prototype.readyState; // readonly @@ -303,7 +162,7 @@ IDBRequest.prototype.onsuccess = function(e) {}; */ IDBRequest.prototype.onerror = function(e) {}; -/** @type {*} */ +/** @type {T} */ IDBRequest.prototype.result; // readonly /** @@ -313,15 +172,16 @@ IDBRequest.prototype.result; // readonly IDBRequest.prototype.errorCode; // readonly -/** @type {!DOMError} */ +/** @type {?DOMError|?DOMException} */ IDBRequest.prototype.error; // readonly -/** @type {Object} */ +/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */ IDBRequest.prototype.source; // readonly -/** @type {IDBTransaction} */ +/** @type {?IDBTransaction} */ IDBRequest.prototype.transaction; // readonly + /** * @constructor * @extends {IDBRequest} @@ -339,40 +199,33 @@ IDBOpenDBRequest.prototype.onblocked = function(e) {}; */ IDBOpenDBRequest.prototype.onupgradeneeded = function(e) {}; + /** * @constructor * @implements {EventTarget} * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase + * @see https://www.w3.org/TR/IndexedDB-2/#database-interface */ function IDBDatabase() {} /** - * @type {string} - * @const + * @const {string} */ IDBDatabase.prototype.name; /** - * @type {string} - * @const - */ -IDBDatabase.prototype.description; - -/** - * @type {string} - * @const + * @const {number} */ IDBDatabase.prototype.version; /** - * @type {DOMStringList} - * @const + * @const {!DOMStringList} */ IDBDatabase.prototype.objectStoreNames; /** * @param {string} name The name of the object store. - * @param {Object=} opt_parameters Parameters to be passed + * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed * creating the object store. * @return {!IDBObjectStore} The created/open object store. */ @@ -386,15 +239,9 @@ IDBDatabase.prototype.createObjectStore = IDBDatabase.prototype.deleteObjectStore = function(name) {}; /** - * @param {string} version The new version of the database. - * @return {!IDBRequest} The IDBRequest object. - */ -IDBDatabase.prototype.setVersion = function(version) {}; - -/** - * @param {string|Array} storeNames The stores to open in this - * transaction. - * @param {(number|string)=} mode The mode for opening the object stores. + * @param {(string|!Array|!DOMStringList)} storeNames The stores to open + * in this transaction. + * @param {!IDBTransactionMode=} mode The mode for opening the object stores. * @return {!IDBTransaction} The IDBRequest object. */ IDBDatabase.prototype.transaction = function(storeNames, mode) {}; @@ -406,54 +253,52 @@ IDBDatabase.prototype.transaction = function(storeNames, mode) {}; IDBDatabase.prototype.close = function() {}; /** - * @type {Function} + * @type {?function(!Event)} */ -IDBDatabase.prototype.onabort = function() {}; +IDBDatabase.prototype.onabort; /** - * @type {Function} + * @type {?function(!Event)} */ -IDBDatabase.prototype.onerror = function() {}; +IDBDatabase.prototype.onclose; /** - * @type {Function} + * @type {?function(!Event)} */ -IDBDatabase.prototype.onversionchange = function() {}; +IDBDatabase.prototype.onerror; /** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} + * @type {?function(!IDBVersionChangeEvent)} */ -IDBDatabase.prototype.addEventListener = - function(type, listener, opt_useCapture) {}; +IDBDatabase.prototype.onversionchange; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -IDBDatabase.prototype.removeEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +IDBDatabase.prototype.addEventListener = function(type, listener, opt_options) { +}; -/** - * @override - * @return {boolean} - */ +/** @override */ +IDBDatabase.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ IDBDatabase.prototype.dispatchEvent = function(evt) {}; + /** * Typedef for valid key types according to the w3 specification. Note that this * is slightly wider than what is actually allowed, as all Array elements must * have a valid key type. * @see http://www.w3.org/TR/IndexedDB/#key-construct - * @typedef {number|string|!Date|!Array} + * @see https://www.w3.org/TR/IndexedDB-2/#key-construct + * @typedef {number|string|!Date|!Array|!BufferSource} */ var IDBKeyType; + /** * @constructor * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore + * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface */ function IDBObjectStore() {} @@ -463,16 +308,16 @@ function IDBObjectStore() {} IDBObjectStore.prototype.name; /** - * @type {string} + * @type {*} */ IDBObjectStore.prototype.keyPath; /** - * @type {DOMStringList} + * @type {!DOMStringList} */ IDBObjectStore.prototype.indexNames; -/** @type {IDBTransaction} */ +/** @type {!IDBTransaction} */ IDBObjectStore.prototype.transaction; /** @type {boolean} */ @@ -480,26 +325,26 @@ IDBObjectStore.prototype.autoIncrement; /** * @param {*} value The value to put into the object store. - * @param {IDBKeyType=} key The key of this value. + * @param {!IDBKeyType=} key The key of this value. * @return {!IDBRequest} The IDBRequest object. */ IDBObjectStore.prototype.put = function(value, key) {}; /** * @param {*} value The value to add into the object store. - * @param {IDBKeyType=} key The key of this value. + * @param {!IDBKeyType=} key The key of this value. * @return {!IDBRequest} The IDBRequest object. */ IDBObjectStore.prototype.add = function(value, key) {}; /** - * @param {IDBKeyType} key The key of this value. + * @param {!IDBKeyType|!IDBKeyRange} key The key of this value. * @return {!IDBRequest} The IDBRequest object. */ IDBObjectStore.prototype.delete = function(key) {}; /** - * @param {IDBKeyType|!IDBKeyRange} key The key of the document to retrieve. + * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve. * @return {!IDBRequest} The IDBRequest object. */ IDBObjectStore.prototype.get = function(key) {}; @@ -510,8 +355,9 @@ IDBObjectStore.prototype.get = function(key) {}; IDBObjectStore.prototype.clear = function() {}; /** - * @param {IDBKeyRange=} range The range of the cursor. - * @param {(number|string)=} direction The direction of cursor enumeration. + * @param {?IDBKeyRange=} range The range of the cursor. + * Nullable because IE <11 has problems with undefined. + * @param {!IDBCursorDirection=} direction The direction of cursor enumeration. * @return {!IDBRequest} The IDBRequest object. */ IDBObjectStore.prototype.openCursor = function(range, direction) {}; @@ -519,11 +365,11 @@ IDBObjectStore.prototype.openCursor = function(range, direction) {}; /** * @param {string} name The name of the index. * @param {string|!Array} keyPath The path to the index key. - * @param {Object=} opt_parameters Optional parameters + * @param {!IDBIndexParameters=} opt_paramters Optional parameters * for the created index. * @return {!IDBIndex} The IDBIndex object. */ -IDBObjectStore.prototype.createIndex = function(name, keyPath, opt_parameters) {}; +IDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {}; /** * @param {string} name The name of the index to retrieve. @@ -538,150 +384,151 @@ IDBObjectStore.prototype.index = function(name) {}; IDBObjectStore.prototype.deleteIndex = function(indexName) {}; /** - * @param {(IDBKeyType|IDBKeyRange)=} key The key of this value. + * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value. * @return {!IDBRequest} The IDBRequest object. * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count */ IDBObjectStore.prototype.count = function(key) {}; +/** + * @param {(!IDBKeyType|IDBKeyRange)=} query + * @return {!IDBRequest} The IDBRequest object. + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey + */ +IDBObjectStore.prototype.getKey = function(query) {}; + +/** + * @param {(!IDBKeyType|IDBKeyRange)=} query + * @param {number=} count + * @return {!IDBRequest} The IDBRequest object. + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall + */ +IDBObjectStore.prototype.getAll = function(query, count) {}; + +/** + * @param {(!IDBKeyType|IDBKeyRange)=} query + * @param {number=} count + * @return {!IDBRequest} The IDBRequest object. + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys + */ +IDBObjectStore.prototype.getAllKeys = function(query, count) {}; + +/** + * @param {(!IDBKeyType|IDBKeyRange)=} query + * @param {!IDBCursorDirection=} direction + * @return {!IDBRequest} The IDBRequest object. + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor + */ +IDBObjectStore.prototype.openKeyCursor = function(query, direction) {}; + + /** * @constructor * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex + * @see https://www.w3.org/TR/IndexedDB-2/#index-interface */ function IDBIndex() {} /** * @type {string} - * @const */ IDBIndex.prototype.name; /** - * @type {!IDBObjectStore} - * @const + * @const {!IDBObjectStore} */ IDBIndex.prototype.objectStore; /** - * @type {string} - * @const + * @const {*} */ IDBIndex.prototype.keyPath; /** - * @type {boolean} - * @const + * @const {boolean} + */ +IDBIndex.prototype.multiEntry; + +/** + * @const {boolean} */ IDBIndex.prototype.unique; /** - * @param {IDBKeyRange=} range The range of the cursor. - * @param {(number|string)=} direction The direction of cursor enumeration. + * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor. + * Nullable because IE <11 has problems with undefined. + * @param {!IDBCursorDirection=} direction The direction of cursor enumeration. * @return {!IDBRequest} The IDBRequest object. */ IDBIndex.prototype.openCursor = function(range, direction) {}; /** - * @param {IDBKeyRange=} range The range of the cursor. - * @param {(number|string)=} direction The direction of cursor enumeration. + * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor. + * Nullable because IE <11 has problems with undefined. + * @param {!IDBCursorDirection=} direction The direction of cursor enumeration. * @return {!IDBRequest} The IDBRequest object. */ IDBIndex.prototype.openKeyCursor = function(range, direction) {}; /** - * @param {IDBKeyType|!IDBKeyRange} key The id of the object to retrieve. + * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve. * @return {!IDBRequest} The IDBRequest object. */ IDBIndex.prototype.get = function(key) {}; /** - * @param {IDBKeyType|!IDBKeyRange} key The id of the object to retrieve. + * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve. * @return {!IDBRequest} The IDBRequest object. */ IDBIndex.prototype.getKey = function(key) {}; /** - * @constructor - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor - */ -function IDBCursor() {} - -/** - * @constructor - * @extends {IDBCursor} - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor - */ -function webkitIDBCursor() {} - -/** - * @const - * @type {number} - */ -IDBCursor.NEXT; - -/** - * @const - * @type {number} - */ -webkitIDBCursor.NEXT; - -/** - * @const - * @type {number} + * @param {(!IDBKeyType|!IDBKeyRange)=} query + * @param {number=} count + * @return {!IDBRequest} + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall */ -IDBCursor.NEXT_NO_DUPLICATE; +IDBIndex.prototype.getAll = function(query, count) {}; /** - * @const - * @type {number} + * @param {(!IDBKeyType|!IDBKeyRange)=} query + * @param {number=} count + * @return {!IDBRequest} + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys */ -webkitIDBCursor.NEXT_NO_DUPLICATE; +IDBIndex.prototype.getAllKeys = function(query, count) {}; /** - * @const - * @type {number} - */ -IDBCursor.PREV; - -/** - * @const - * @type {number} + * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key + * @return {!IDBRequest} */ -webkitIDBCursor.PREV; +IDBIndex.prototype.count = function(opt_key) {}; -/** - * @const - * @type {number} - */ -IDBCursor.PREV_NO_DUPLICATE; /** - * @const - * @type {number} + * @constructor + * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor + * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface */ -webkitIDBCursor.PREV_NO_DUPLICATE; +function IDBCursor() {} /** - * @type {*} - * @const + * @const {(!IDBObjectStore|!IDBIndex)} */ IDBCursor.prototype.source; /** - * @type {number} - * @const + * @const {!IDBCursorDirection} */ IDBCursor.prototype.direction; /** - * @type {IDBKeyType} - * @const + * @const {!IDBKeyType} */ IDBCursor.prototype.key; /** - * @type {number} - * @const + * @const {!IDBKeyType} */ IDBCursor.prototype.primaryKey; @@ -693,12 +540,20 @@ IDBCursor.prototype.update = function(value) {}; /** * Note: Must be quoted to avoid parse error. - * @param {IDBKeyType=} key Continue enumerating the cursor from the specified + * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified * key (or next). * @return {undefined} */ IDBCursor.prototype.continue = function(key) {}; +/** + * @param {!IDBKeyType} key + * @param {!IDBKeyType} primaryKey + * @return {undefined} + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey + */ +IDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {}; + /** * @param {number} count Number of times to iterate the cursor. * @return {undefined} @@ -711,6 +566,7 @@ IDBCursor.prototype.advance = function(count) {}; */ IDBCursor.prototype.delete = function() {}; + /** * @constructor * @extends {IDBCursor} @@ -721,66 +577,33 @@ function IDBCursorWithValue() {} /** @type {*} */ IDBCursorWithValue.prototype.value; // readonly -/** - * @constructor - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction - */ -function IDBTransaction() {} /** * @constructor - * @extends {IDBTransaction} * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction + * @see https://www.w3.org/TR/IndexedDB-2/#transaction */ -function webkitIDBTransaction() {} - -/** - * @const - * @type {number} - */ -IDBTransaction.READ_WRITE; - -/** - * @const - * @type {number} - */ -webkitIDBTransaction.READ_WRITE; - -/** - * @const - * @type {number} - */ -IDBTransaction.READ_ONLY; - -/** - * @const - * @type {number} - */ -webkitIDBTransaction.READ_ONLY; +function IDBTransaction() {} /** - * @const - * @type {number} + * @const {!DOMStringList} */ -IDBTransaction.VERSION_CHANGE; +IDBTransaction.prototype.objectStoreNames; /** - * @const - * @type {number} + * @const {!IDBTransactionMode} */ -webkitIDBTransaction.VERSION_CHANGE; +IDBTransaction.prototype.mode; /** - * @type {number|string} - * @const + * @const {!IDBDatabase} */ -IDBTransaction.prototype.mode; +IDBTransaction.prototype.db; /** - * @type {IDBDatabase} - * @const + * @type {!DOMError|!DOMException} */ -IDBTransaction.prototype.db; +IDBTransaction.prototype.error; /** * @param {string} name The name of the object store to retrieve. @@ -795,100 +618,77 @@ IDBTransaction.prototype.objectStore = function(name) {}; IDBTransaction.prototype.abort = function() {}; /** - * @type {Function} + * Commits the transaction. + * @return {undefined} */ -IDBTransaction.prototype.onabort = function() {}; +IDBTransaction.prototype.commit = function() {}; /** - * @type {Function} + * @type {?function(!Event)} */ -IDBTransaction.prototype.oncomplete = function() {}; +IDBTransaction.prototype.onabort; /** - * @type {Function} + * @type {?function(!Event)} */ -IDBTransaction.prototype.onerror = function() {}; +IDBTransaction.prototype.oncomplete; /** - * @constructor - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange + * @type {?function(!Event)} */ -function IDBKeyRange() {} +IDBTransaction.prototype.onerror; + /** * @constructor - * @extends {IDBKeyRange} * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange + * @see https://www.w3.org/TR/IndexedDB-2/#keyrange */ -function webkitIDBKeyRange() {} +function IDBKeyRange() {} /** - * @type {*} - * @const + * @const {*} */ IDBKeyRange.prototype.lower; /** - * @type {*} - * @const + * @const {*} */ IDBKeyRange.prototype.upper; /** - * @type {*} - * @const + * @const {boolean} */ IDBKeyRange.prototype.lowerOpen; /** - * @type {*} - * @const + * @const {boolean} */ IDBKeyRange.prototype.upperOpen; /** - * @param {IDBKeyType} value The single key value of this range. + * @param {!IDBKeyType} value The single key value of this range. * @return {!IDBKeyRange} The key range. */ IDBKeyRange.only = function(value) {}; /** - * @param {IDBKeyType} value The single key value of this range. - * @return {!IDBKeyRange} The key range. - */ -webkitIDBKeyRange.only = function(value) {}; - -/** - * @param {IDBKeyType} bound Creates a lower bound key range. + * @param {!IDBKeyType} bound Creates a lower bound key range. * @param {boolean=} open Open the key range. * @return {!IDBKeyRange} The key range. */ IDBKeyRange.lowerBound = function(bound, open) {}; /** - * @param {IDBKeyType} bound Creates a lower bound key range. - * @param {boolean=} open Open the key range. - * @return {!IDBKeyRange} The key range. - */ -webkitIDBKeyRange.lowerBound = function(bound, open) {}; - -/** - * @param {IDBKeyType} bound Creates an upper bound key range. + * @param {!IDBKeyType} bound Creates an upper bound key range. * @param {boolean=} open Open the key range. * @return {!IDBKeyRange} The key range. */ IDBKeyRange.upperBound = function(bound, open) {}; /** - * @param {IDBKeyType} bound Creates an upper bound key range. - * @param {boolean=} open Open the key range. - * @return {!IDBKeyRange} The key range. - */ -webkitIDBKeyRange.upperBound = function(bound, open) {}; - -/** - * @param {IDBKeyType} left The left bound value. - * @param {IDBKeyType} right The right bound value. + * @param {!IDBKeyType} left The left bound value. + * @param {!IDBKeyType} right The right bound value. * @param {boolean=} openLeft Whether the left bound value should be excluded. * @param {boolean=} openRight Whether the right bound value should be excluded. * @return {!IDBKeyRange} The key range. @@ -896,42 +696,28 @@ webkitIDBKeyRange.upperBound = function(bound, open) {}; IDBKeyRange.bound = function(left, right, openLeft, openRight) {}; /** - * @param {IDBKeyType} left The left bound value. - * @param {IDBKeyType} right The right bound value. - * @param {boolean=} openLeft Whether the left bound value should be excluded. - * @param {boolean=} openRight Whether the right bound value should be excluded. - * @return {!IDBKeyRange} The key range. + * @param {!IDBKeyType} key + * @return {boolean} + * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes */ -webkitIDBKeyRange.bound = function(left, right, openLeft, openRight) {}; +IDBKeyRange.prototype.includes = function(key) {}; + /** + * @param {string} type + * @param {!IDBVersionChangeEventInit=} opt_eventInit * @constructor * @extends {Event} * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent */ -function IDBVersionChangeEvent() {} +function IDBVersionChangeEvent(type, opt_eventInit) {} /** - * @type {number} - * @const + * @const {number} */ IDBVersionChangeEvent.prototype.oldVersion; /** - * @type {?number} - * @const + * @const {?number} */ IDBVersionChangeEvent.prototype.newVersion; - -/** - * @constructor - * @extends {IDBVersionChangeEvent} - * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent - */ -function webkitIDBVersionChangeEvent() {} - -/** - * @type {string} - * @const - */ -webkitIDBVersionChangeEvent.prototype.version; diff --git a/javascript/externs/web/w3c_navigation_timing.js b/javascript/externs/web/w3c_navigation_timing.js index 04d4f03cceb8..aaf1423c1f49 100644 --- a/javascript/externs/web/w3c_navigation_timing.js +++ b/javascript/externs/web/w3c_navigation_timing.js @@ -58,6 +58,7 @@ function PerformanceEntry() {} /** @type {number} */ PerformanceEntry.prototype.duration; /** + * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming * @constructor * @extends {PerformanceEntry} */ @@ -75,27 +76,138 @@ PerformanceResourceTiming.prototype.secureConnectionStart; /** @type {number} */ PerformanceResourceTiming.prototype.responseStart; /** @type {number} */ PerformanceResourceTiming.prototype.responseEnd; /** @type {string} */ PerformanceResourceTiming.prototype.initiatorType; +/** @type {number|undefined} */ +PerformanceResourceTiming.prototype.transferSize; +/** @type {number|undefined} */ +PerformanceResourceTiming.prototype.encodedBodySize; +/** @type {number|undefined} */ +PerformanceResourceTiming.prototype.decodedBodySize; +/** @type {number|undefined} */ +PerformanceResourceTiming.prototype.workerStart; +/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol; + +/** + * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'. + * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types + * @typedef {string} + */ +var NavigationType; + +/** + * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming + * @constructor + * @extends {PerformanceResourceTiming} + */ +function PerformanceNavigationTiming() {} +/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart; +/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd; +/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive; +/** @type {number} */ PerformanceNavigationTiming.prototype + .domContentLoadedEventStart; +/** @type {number} */ PerformanceNavigationTiming.prototype + .domContentLoadedEventEnd; +/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete; +/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart; +/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd; +/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type; +/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount; + +/** + * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming + * @constructor + * @extends {PerformanceEntry} + */ +function PerformancePaintTiming() {} /** @constructor */ function PerformanceNavigation() {} -/** @type {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE = 0; -/** @type {number} */ PerformanceNavigation.prototype.TYPE_RELOAD = 1; -/** @type {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD = 2; -/** @type {number} */ PerformanceNavigation.prototype.TYPE_RESERVED = 255; +/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE; +/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE; +/** @const {number} */ PerformanceNavigation.TYPE_RELOAD; +/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD; +/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD; +/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD; +/** @const {number} */ PerformanceNavigation.TYPE_RESERVED; +/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED; /** @type {number} */ PerformanceNavigation.prototype.type; /** @type {number} */ PerformanceNavigation.prototype.redirectCount; -// Only available in WebKit, and only with the --enable-memory-info flag. -/** @constructor */ -function PerformanceMemory() {} -/** @type {number} */ PerformanceMemory.prototype.jsHeapSizeLimit; -/** @type {number} */ PerformanceMemory.prototype.totalJSHeapSize; -/** @type {number} */ PerformanceMemory.prototype.usedJSHeapSize; +/** + * https://w3c.github.io/longtasks/#taskattributiontiming + * @constructor + * @extends {PerformanceEntry} + */ +function TaskAttributionTiming() {} +/** @type {string} */ TaskAttributionTiming.prototype.containerId; +/** @type {string} */ TaskAttributionTiming.prototype.containerName; +/** @type {string} */ TaskAttributionTiming.prototype.containerSrc; +/** @type {string} */ TaskAttributionTiming.prototype.containerType; + +/** + * https://w3c.github.io/longtasks/#performancelongtasktiming + * @constructor + * @extends {PerformanceEntry} + */ +function PerformanceLongTaskTiming() {} +/** @type {!Array} */ +PerformanceLongTaskTiming.prototype.attribution; + +/** + * https://wicg.github.io/layout-instability/#sec-layout-shift + * @constructor + * @extends {PerformanceEntry} + */ +function LayoutShift() {} +/** @type {number} */ LayoutShift.prototype.value; +/** @type {boolean} */ LayoutShift.prototype.hadRecentInput; +/** @type {number} */ LayoutShift.prototype.lastInputTime; +/** @type {!Array} */ LayoutShift.prototype.sources; + +/** + * https://wicg.github.io/layout-instability/#sec-layout-shift + * @constructor + */ +function LayoutShiftAttribution() {} +/** @type {?Node} */ LayoutShiftAttribution.prototype.node; +/** @type {!DOMRectReadOnly} */ LayoutShiftAttribution.prototype.previousRect; +/** @type {!DOMRectReadOnly} */ LayoutShiftAttribution.prototype.currentRect; + +/** + * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint + * @constructor + * @extends {PerformanceEntry} + */ +function LargestContentfulPaint() {} +/** @type {number} */ LargestContentfulPaint.prototype.renderTime; +/** @type {number} */ LargestContentfulPaint.prototype.loadTime; +/** @type {number} */ LargestContentfulPaint.prototype.size; +/** @type {string} */ LargestContentfulPaint.prototype.id; +/** @type {string} */ LargestContentfulPaint.prototype.url; +/** @type {?Element} */ LargestContentfulPaint.prototype.element; + +/** + * https://wicg.github.io/event-timing/#sec-performance-event-timing + * @constructor + * @extends {PerformanceEntry} + */ +function PerformanceEventTiming() {} +/** @type {number} */ PerformanceEventTiming.prototype.processingStart; +/** @type {number} */ PerformanceEventTiming.prototype.processingEnd; +/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable; +/** @type {?Node} */ PerformanceEventTiming.prototype.target; /** @constructor */ function Performance() {} -/** @type {PerformanceTiming} */ Performance.prototype.timing; -/** @type {PerformanceNavigation} */ Performance.prototype.navigation; + +/** @type {PerformanceTiming} */ +Performance.prototype.timing; + +/** @type {PerformanceNavigation} */ +Performance.prototype.navigation; + +/** @type {number} */ +Performance.prototype.timeOrigin; + /** * Clears the buffer used to store the current list of @@ -105,10 +217,10 @@ function Performance() {} Performance.prototype.clearResourceTimings = function() {}; /** - * Clear out the buffer of performance timing events for webkit browsers. - * @return {undefined} + * A callback that is invoked when the resourcetimingbufferfull event is fired. + * @type {?function(Event)} */ -Performance.prototype.webkitClearResourceTimings = function() {}; +Performance.prototype.onresourcetimingbufferfull = function() {}; /** * Set the maximum number of PerformanceResourceTiming resources that may be @@ -119,46 +231,37 @@ Performance.prototype.webkitClearResourceTimings = function() {}; Performance.prototype.setResourceTimingBufferSize = function(maxSize) {}; /** - * @return {Array} A copy of the PerformanceEntry list, + * @return {!Array} A copy of the PerformanceEntry list, * in chronological order with respect to startTime. * @nosideeffects */ Performance.prototype.getEntries = function() {}; /** - * @param {string} entryType Only return {@code PerformanceEntry}s with this + * @param {string} entryType Only return `PerformanceEntry`s with this * entryType. - * @return {Array} A copy of the PerformanceEntry list, + * @return {!Array} A copy of the PerformanceEntry list, * in chronological order with respect to startTime. * @nosideeffects */ Performance.prototype.getEntriesByType = function(entryType) {}; /** - * @param {string} name Only return {@code PerformanceEntry}s with this name. - * @param {string=} opt_entryType Only return {@code PerformanceEntry}s with + * @param {string} name Only return `PerformanceEntry`s with this name. + * @param {string=} opt_entryType Only return `PerformanceEntry`s with * this entryType. - * @return {Array} PerformanceEntry list in chronological + * @return {!Array} PerformanceEntry list in chronological * order with respect to startTime. * @nosideeffects */ Performance.prototype.getEntriesByName = function(name, opt_entryType) {}; -// Only available in WebKit, and only with the --enable-memory-info flag. -/** @type {PerformanceMemory} */ Performance.prototype.memory; - /** * @return {number} * @nosideeffects */ Performance.prototype.now = function() {}; -/** - * @return {number} - * @nosideeffects - */ -Performance.prototype.webkitNow = function() {}; - /** * @param {string} markName * @return {undefined} @@ -177,8 +280,8 @@ Performance.prototype.clearMarks = function(opt_markName) {}; * @param {string=} opt_endMark * @return {undefined} */ -Performance.prototype.measure = - function(measureName, opt_startMark, opt_endMark) {}; +Performance.prototype.measure = function( + measureName, opt_startMark, opt_endMark) {}; /** * @param {string=} opt_measureName @@ -194,3 +297,73 @@ Window.prototype.performance; * @suppress {duplicate} */ var performance; + +/** + * @constructor + * @extends {Performance} + */ +function WorkerPerformance() {} + +/** + * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void} + */ +var PerformanceObserverCallback; + +/** + * See: + * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface + * @constructor + * @param {!PerformanceObserverCallback} callback + */ +function PerformanceObserver(callback) {} + +/** + * @param {!PerformanceObserverInit} options + */ +PerformanceObserver.prototype.observe = function(options) {}; + +/** @return {void} */ +PerformanceObserver.prototype.disconnect = function() {}; + +/** + * @see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/takeRecords + * @see https://www.w3.org/TR/performance-timeline-2/#takerecords-method + * @return {!Array} The current PerformanceEntry list stored + * in the performance observer buffer, emptying it out. + */ +PerformanceObserver.prototype.takeRecords = function() {}; + +/** @const {!Array} */ +PerformanceObserver.prototype.supportedEntryTypes; + +/** + * @record + */ +function PerformanceObserverInit() {} + +/** @type {undefined|!Array} */ +PerformanceObserverInit.prototype.entryTypes; +/** @type {undefined|string} */ +PerformanceObserverInit.prototype.type; +/** @type {undefined|boolean} */ +PerformanceObserverInit.prototype.buffered; + +/** + * @constructor + */ +function PerformanceObserverEntryList() {} + +/** @return {!Array} */ +PerformanceObserverEntryList.prototype.getEntries = function() {}; +/** + * @param {string} type + * @return {!Array} + */ +PerformanceObserverEntryList.prototype.getEntriesByName = function(type) {}; +/** + * @param {string} name + * @param {string=} opt_type + * @return {!Array} + */ +PerformanceObserverEntryList.prototype.getEntriesByType = function( + name, opt_type) {}; diff --git a/javascript/externs/web/w3c_permissions.js b/javascript/externs/web/w3c_permissions.js index 007f63d3a4f7..58e5a071f10b 100644 --- a/javascript/externs/web/w3c_permissions.js +++ b/javascript/externs/web/w3c_permissions.js @@ -78,27 +78,15 @@ PermissionStatus.prototype.status; /** @type {?function(!Event)} */ PermissionStatus.prototype.onchange; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -PermissionStatus.prototype.addEventListener = function(type, - listener, - opt_useCapture) {}; +/** @override */ +PermissionStatus.prototype.addEventListener = function( + type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -PermissionStatus.prototype.removeEventListener = function(type, - listener, - opt_useCapture) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ +PermissionStatus.prototype.removeEventListener = function( + type, listener, opt_options) {}; + +/** @override */ PermissionStatus.prototype.dispatchEvent = function(evt) {}; diff --git a/javascript/externs/web/w3c_pointer_events.js b/javascript/externs/web/w3c_pointer_events.js index 772b3fec3be8..41cbb5ca8d8a 100644 --- a/javascript/externs/web/w3c_pointer_events.js +++ b/javascript/externs/web/w3c_pointer_events.js @@ -42,6 +42,26 @@ Navigator.prototype.pointerEnabled; Navigator.prototype.maxTouchPoints; +/** + * @param {number} pointerId + * @see https://www.w3.org/TR/pointerevents/#widl-Element-setPointerCapture-void-long-pointerId + */ +Element.prototype.setPointerCapture = function(pointerId) {}; + +/** + * @param {number} pointerId + * @see https://www.w3.org/TR/pointerevents/#widl-Element-releasePointerCapture-void-long-pointerId + */ +Element.prototype.releasePointerCapture = function(pointerId) {}; + +/** + * @param {number} pointerId + * @see https://www.w3.org/TR/pointerevents/#dom-element-haspointercapture + * @return {boolean} + */ +Element.prototype.hasPointerCapture = function(pointerId) {}; + + /** * @record * @extends {MouseEventInit} @@ -107,11 +127,18 @@ PointerEvent.prototype.pointerType; PointerEvent.prototype.isPrimary; // Microsoft pointerType values -/** @type {string} */ +/** @const {string} */ PointerEvent.prototype.MSPOINTER_TYPE_TOUCH; -/** @type {string} */ +/** @const {string} */ PointerEvent.prototype.MSPOINTER_TYPE_PEN; -/** @type {string} */ +/** @const {string} */ PointerEvent.prototype.MSPOINTER_TYPE_MOUSE; + +/** + * @see https://w3c.github.io/pointerevents/extension.html + * @return {!Array} + */ +PointerEvent.prototype.getCoalescedEvents = function() {}; + diff --git a/javascript/externs/web/w3c_range.js b/javascript/externs/web/w3c_range.js index fb79fd236404..a24d217af0ec 100644 --- a/javascript/externs/web/w3c_range.js +++ b/javascript/externs/web/w3c_range.js @@ -32,6 +32,58 @@ */ function Range() {} +// constants on the constructor + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.START_TO_START; + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.START_TO_END; + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.END_TO_END; + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.END_TO_START; + +// constants repeated on the prototype + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.prototype.START_TO_START; + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.prototype.START_TO_END; + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.prototype.END_TO_END; + +/** + * @const {number} + * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow + */ +Range.prototype.END_TO_START; + /** * @type {Node} * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent @@ -133,30 +185,6 @@ Range.prototype.selectNode = function(refNode) {}; */ Range.prototype.selectNodeContents = function(refNode) {}; -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow - */ -Range.prototype.START_TO_START = 0; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow - */ -Range.prototype.START_TO_END = 1; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow - */ -Range.prototype.END_TO_END = 2; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow - */ -Range.prototype.END_TO_START = 3; - /** * @param {number} how * @param {Range} sourceRange @@ -211,7 +239,7 @@ Range.prototype.detach = function() {}; // Introduced in DOM Level 2: /** - * @constructor + * @interface * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl */ function DocumentRange() {} @@ -221,28 +249,3 @@ function DocumentRange() {} * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange */ DocumentRange.prototype.createRange = function() {}; - -// Introduced in DOM Level 2: -/** - * @constructor - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException - */ -function RangeException() {} - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode - */ -RangeException.prototype.code; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode - */ -RangeException.prototype.BAD_BOUNDARYPOINTS_ERR = 1; - -/** - * @type {number} - * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode - */ -RangeException.prototype.INVALID_NODE_TYPE_ERR = 2; diff --git a/javascript/externs/web/w3c_requestidlecallback.js b/javascript/externs/web/w3c_requestidlecallback.js index b6efd141195c..5842f2fd68f4 100644 --- a/javascript/externs/web/w3c_requestidlecallback.js +++ b/javascript/externs/web/w3c_requestidlecallback.js @@ -33,7 +33,7 @@ var IdleCallbackOptions; /** * Schedules a callback to run when the browser is idle. - * @param {function(!IdleDeadline)} callback Called when the browser is idle. + * @param {function(!IdleDeadline): void} callback Called when the browser is idle. * @param {number|IdleCallbackOptions=} opt_options If set, gives the browser a time in ms by which * it must execute the callback. No timeout enforced otherwise. * @return {number} A handle that can be used to cancel the scheduled callback. @@ -43,7 +43,7 @@ function requestIdleCallback(callback, opt_options) {} /** * Cancels a callback scheduled to run when the browser is idle. - * @param {number} handle The handle returned by {@code requestIdleCallback} for + * @param {number} handle The handle returned by `requestIdleCallback` for * the scheduled callback to cancel. * @return {undefined} */ @@ -53,7 +53,7 @@ function cancelIdleCallback(handle) {} /** * An interface for an object passed into the callback for - * {@code requestIdleCallback} that remains up-to-date on the amount of idle + * `requestIdleCallback` that remains up-to-date on the amount of idle * time left in the current time slice. * @interface */ diff --git a/javascript/externs/web/w3c_rtc.js b/javascript/externs/web/w3c_rtc.js index 027d33894262..3a17e6dc0beb 100644 --- a/javascript/externs/web/w3c_rtc.js +++ b/javascript/externs/web/w3c_rtc.js @@ -59,20 +59,17 @@ SourceInfo.prototype.facing; function MediaSettingsRange() {} /** - * @type {number} - * @const + * @const {number} */ MediaSettingsRange.prototype.max; /** - * @type {number} - * @const + * @const {number} */ MediaSettingsRange.prototype.min; /** - * @type {number} - * @const + * @const {number} */ MediaSettingsRange.prototype.step; @@ -304,27 +301,17 @@ MediaTrackSupportedConstraints.prototype.groupId; function MediaStreamTrack() {} /** - * @param {!function(!Array)} callback - * @return {undefined} - * @deprecated Use MediaDevices.enumerateDevices(). - */ -MediaStreamTrack.getSources = function(callback) {}; - -/** - * @type {string} - * @const + * @const {string} */ MediaStreamTrack.prototype.kind; /** - * @type {string} - * @const + * @const {string} */ MediaStreamTrack.prototype.id; /** - * @type {string} - * @const + * @const {string} */ MediaStreamTrack.prototype.label; @@ -334,8 +321,7 @@ MediaStreamTrack.prototype.label; MediaStreamTrack.prototype.enabled; /** - * @type {boolean} - * @const + * @const {boolean} */ MediaStreamTrack.prototype.muted; @@ -347,8 +333,7 @@ MediaStreamTrack.prototype.muted; MediaStreamTrack.prototype.contentHint; /** - * @type {boolean} - * @const + * @const {boolean} */ MediaStreamTrack.prototype.remote; @@ -423,8 +408,7 @@ var MediaStreamTrackEventInit; function MediaStreamTrackEvent(type, eventInitDict) {} /** - * @type {!MediaStreamTrack} - * @const + * @const {!MediaStreamTrack} */ MediaStreamTrackEvent.prototype.track; @@ -457,14 +441,12 @@ MediaStream.prototype.dispatchEvent = function(evt) {}; /** * TODO(bemasc): Remove this property. * @deprecated - * @type {string} - * @const + * @const {string} */ MediaStream.prototype.label; /** - * @type {string} - * @const + * @const {string} */ MediaStream.prototype.id; @@ -551,13 +533,6 @@ MediaStream.prototype.onremovetrack; */ MediaStream.prototype.stop = function() {}; -/** - * @type {function(new: MediaStream, - * (!MediaStream|!Array)=)} - */ -var webkitMediaStream; - - /** * @typedef {{tone: string}} * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit @@ -594,6 +569,11 @@ function RTCDTMFSender() {} RTCDTMFSender.prototype.insertDTMF = function(tones, opt_duration, opt_interToneGap) {}; +/** + * @type {?boolean} + */ +RTCDTMFSender.prototype.canInsertDTMF; + /** * @type {?function(!RTCDTMFToneChangeEvent)} */ @@ -606,10 +586,44 @@ RTCDTMFSender.prototype.toneBuffer; /** - * @interface + * @typedef {{ + * mimeType: string, + * clockRate: number, + * channels: (number|undefined), + * sdpFmtpLine: (string|undefined), + * }} + * + * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcodeccapability + */ +var RTCRtpCodecCapability; + + +/** + * @typedef {{ + * uri: string, + * }} + * + * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpheaderextensioncapability + */ +var RTCRtpHeaderExtensionCapability; + + +/** + * @typedef {{ + * codecs: !Array, + * headerExtensions: !Array, + * }} + * + * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcapabilities + */ +var RTCRtpCapabilities; + + +/** + * @constructor * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface */ -function RTCRtpSender(track, transport) {} +function RTCRtpSender() {} /** * @const {!RTCDTMFSender} @@ -622,24 +636,62 @@ RTCRtpSender.prototype.dtmf; RTCRtpSender.prototype.track; /** - * @param {!MediaStreamTrack} track + * @param {?MediaStreamTrack} track + * @return {!Promise} + * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender */ RTCRtpSender.prototype.replaceTrack = function(track) {}; /** - * @return {!Object} + * @return {!RTCRtpSendParameters} */ RTCRtpSender.prototype.getParameters = function() {}; /** - * @param {!Object} params + * @param {!RTCRtpSendParameters} params * @return {!Promise} */ RTCRtpSender.prototype.setParameters = function(params) {}; +/** + * @return {!Promise} + */ +RTCRtpSender.prototype.getStats = function() {}; + +/** + * @param {string} kind + * @return {?RTCRtpCapabilities} + */ +RTCRtpSender.getCapabilities = function(kind) {}; + + +/** + * @record + * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters + */ +function RTCRtpSendParameters() {} + +/** + * @type {string|undefined} + */ +RTCRtpSendParameters.prototype.transactionId; + +/** + * @type {!Array} + */ +RTCRtpSendParameters.prototype.encodings; + +/** + * Possible string values are "maintain-framerate", "maintain-resolution", and + * "balanced". + * @type {string|undefined} + */ +RTCRtpSendParameters.prototype.degradationPreference; + + /** * @interface * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource @@ -652,16 +704,36 @@ function RTCRtpContributingSource() {} RTCRtpContributingSource.prototype.source; /** - * @type {?Date} + * @type {?Date|number} */ RTCRtpContributingSource.prototype.timestamp; +/** + * @type {number|undefined} + */ +RTCRtpContributingSource.prototype.audioLevel; /** - * @interface + * This is a relatively new field and browsers may not yet be compliant to the + * spec. + * @type {?number} + * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp + */ +RTCRtpContributingSource.prototype.rtpTimestamp; + +/** + * This is a relatively new field and browsers may not yet be compliant to the + * spec. + * @type {number|undefined} + * @see https://w3c.github.io/webrtc-extensions/#dictionary-rtcrtpcontributingsource-members + */ +RTCRtpContributingSource.prototype.captureTimestamp; + +/** + * @constructor * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface */ -function RTCRtpReceiver(transport, kind) {} +function RTCRtpReceiver() {} /** * @const {!MediaStreamTrack} @@ -678,6 +750,28 @@ RTCRtpReceiver.prototype.getContributingSources = function() {}; */ RTCRtpReceiver.prototype.getSynchronizationSources = function() {}; + +/** + * @return {!Promise} + */ +RTCRtpReceiver.prototype.getStats = function() {}; + +/** + * Chrome exclusive hint to control jitter buffer delay. Measured in seconds. + * @see https://henbos.github.io/webrtc-extensions/#dfn-playoutdelayhint + * @type {?number|undefined} + */ +RTCRtpReceiver.prototype.playoutDelayHint; + +/** + * Get most optimistic view of the capabilities of the system for sending media + * of the given kind. + * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpreceiver-getcapabilities + * @param {!string} kind Media kind: 'video' or 'audio'. + * @return {!RTCRtpCapabilities} + */ +RTCRtpReceiver.getCapabilities = function(kind) {}; + /** * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit * @record @@ -729,6 +823,13 @@ RTCRtpEncodingParameters.prototype.active; */ RTCRtpEncodingParameters.prototype.priority; +/** + * Possible values are "very-low", "low" (default), "medium", and "high". + * @see https://w3c.github.io/webrtc-dscp-exp/ + * @type {?string|undefined} + */ +RTCRtpEncodingParameters.prototype.networkPriority; + /** * @type {?number|undefined} */ @@ -754,6 +855,12 @@ RTCRtpEncodingParameters.prototype.rid; */ RTCRtpEncodingParameters.prototype.scaleResolutionDownBy; +/** + * @see https://w3c.github.io/webrtc-extensions/#dom-rtcrtpencodingparameters-adaptiveptime + * @type {?boolean|undefined} + */ +RTCRtpEncodingParameters.prototype.adaptivePtime; + /** * @interface * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface @@ -771,7 +878,7 @@ RTCRtpTransceiver.prototype.mid; RTCRtpTransceiver.prototype.stopped; /** - * @const {!RTCRtpTransceiverDirection} + * @type {!RTCRtpTransceiverDirection} */ RTCRtpTransceiver.prototype.direction; @@ -799,6 +906,11 @@ RTCRtpTransceiver.prototype.sender; */ RTCRtpTransceiver.prototype.receiver; +/** + * @param {!Array} codecs + */ +RTCRtpTransceiver.prototype.setCodecPreferences = function(codecs) {}; + /** * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange * @record @@ -1042,11 +1154,10 @@ MediaStreamConstraints.prototype.video; function NavigatorUserMediaError() {} /** - * @type {number} + * @const {number} * @deprecated Removed from the standard and some browsers. - * @const */ -NavigatorUserMediaError.prototype.PERMISSION_DENIED; /** 1 */ +NavigatorUserMediaError.prototype.PERMISSION_DENIED; /** * @type {number} @@ -1073,19 +1184,6 @@ NavigatorUserMediaError.prototype.message; */ NavigatorUserMediaError.prototype.constraintName; -/** - * @param {MediaStreamConstraints} constraints A MediaStreamConstraints object. - * @param {function(!MediaStream)} successCallback - * A NavigatorUserMediaSuccessCallback function. - * @param {function(!NavigatorUserMediaError)=} errorCallback A - * NavigatorUserMediaErrorCallback function. - * @see http://dev.w3.org/2011/webrtc/editor/getusermedia.html - * @see https://www.w3.org/TR/mediacapture-streams/ - * @return {undefined} - */ -Navigator.prototype.webkitGetUserMedia = - function(constraints, successCallback, errorCallback) {}; - /** * @param {string} type * @param {!Object} eventInitDict @@ -1094,8 +1192,7 @@ Navigator.prototype.webkitGetUserMedia = function MediaStreamEvent(type, eventInitDict) {} /** - * @type {?MediaStream} - * @const + * @const {?MediaStream} */ MediaStreamEvent.prototype.stream; @@ -1222,6 +1319,21 @@ MediaRecorder.prototype.requestData = function() {}; */ MediaRecorder.isTypeSupported = function(type) {}; +/** + * @constructor + * @extends {Event} + * @param {string} type + * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict + * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section + */ +function BlobEvent(type, eventInitDict) {} + +/** @type {!Blob} */ +BlobEvent.prototype.data; + +/** @type {number} */ +BlobEvent.prototype.timecode; + /** * @interface * @see https://w3c.github.io/mediacapture-image/##photosettings-section @@ -1255,26 +1367,22 @@ PhotoSettings.prototype.redEyeReduction; function PhotoCapabilities() {} /** - * @type {string} - * @const + * @const {string} */ PhotoCapabilities.prototype.redEyeReduction; /** - * @type {!MediaSettingsRange} - * @const + * @const {!MediaSettingsRange} */ PhotoCapabilities.prototype.imageHeight; /** - * @type {!MediaSettingsRange} - * @const + * @const {!MediaSettingsRange} */ PhotoCapabilities.prototype.imageWidth; /** - * @type {!Array} - * @const + * @const {!Array} */ PhotoCapabilities.prototype.fillLightMode; @@ -1302,8 +1410,7 @@ ImageCapture.prototype.getPhotoCapabilities = function() {}; ImageCapture.prototype.grabFrame = function() {}; /** - * @type {!MediaStreamTrack} - * @const + * @const {!MediaStreamTrack} */ ImageCapture.prototype.track; @@ -1316,26 +1423,22 @@ ImageCapture.prototype.track; function RTCTrackEvent(type, eventInitDict) {} /** - * @type {?RTCRtpReceiver} - * @const + * @const {!RTCRtpReceiver} */ RTCTrackEvent.prototype.receiver; /** - * @type {?MediaStreamTrack} - * @const + * @const {!MediaStreamTrack} */ RTCTrackEvent.prototype.track; /** - * @type {?Array} - * @const + * @const {!Array} */ RTCTrackEvent.prototype.streams; /** - * @type {?RTCRtpTransceiver} - * @const + * @const {!RTCRtpTransceiver} */ RTCTrackEvent.prototype.transceiver; @@ -1391,6 +1494,13 @@ MediaDevices.prototype.enumerateDevices = function() {}; */ MediaDevices.prototype.getUserMedia = function(constraints) {} +/** + * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia + * @param {!MediaStreamConstraints=} constraints + * @return {!Promise} + */ +MediaDevices.prototype.getDisplayMedia = function(constraints) {} + /** * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints * @return {!MediaTrackSupportedConstraints} @@ -1487,7 +1597,7 @@ RTCIceCandidate.prototype.sdpMid; RTCIceCandidate.prototype.sdpMLineIndex; /** - * @typedef {{urls: string}|{urls: !Array}} + * @typedef {{urls: string}|{urls: !Array}} * @private * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary * This dictionary type also has an optional key {credential: ?string}. @@ -1501,7 +1611,7 @@ var RTCIceServerRecord_; function RTCIceServerInterface_() {} /** - * @type {string|!Array} + * @type {string|!Array} */ RTCIceServerInterface_.prototype.urls; @@ -1587,6 +1697,12 @@ var RTCIceConnectionState; */ var RTCIceGatheringState; +/** + * @see https://www.w3.org/TR/webrtc/#rtcpeerconnectionstate-enum + * @typedef {string} + */ +var RTCPeerConnectionState; + /** * @param {string} type * @param {!Object} eventInitDict @@ -1595,8 +1711,7 @@ var RTCIceGatheringState; function RTCPeerConnectionIceEvent(type, eventInitDict) {} /** - * @type {RTCIceCandidate} - * @const + * @const {RTCIceCandidate} */ RTCPeerConnectionIceEvent.prototype.candidate; @@ -1605,18 +1720,540 @@ RTCPeerConnectionIceEvent.prototype.candidate; // modern browsers, breaking compatibility with older versions as they become // obsolete. /** + * @see https://www.w3.org/TR/webrtc/#dom-rtcstats + * @interface + */ +function RTCStats() {} + +/** + * @const {?Date|number} + */ +RTCStats.prototype.timestamp; + +/** + * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str* + * @const {string} + */ +RTCStats.prototype.type; + +/** + * @const {string} + */ +RTCStats.prototype.id; + +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats + * @interface + * @extends {RTCStats} + */ +function RTCRtpStreamStats() {} + +/** @const {number} */ +RTCRtpStreamStats.prototype.ssrc; + +/** @const {string} */ +RTCRtpStreamStats.prototype.kind; + +/** + * Safari 13 still uses .mediaType instead of .kind. + * @const {string} + */ +RTCRtpStreamStats.prototype.mediaType; + +/** @const {string} */ +RTCRtpStreamStats.prototype.transportId; + +/** @const {string} */ +RTCRtpStreamStats.prototype.codecId; + + +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcreceivedrtpstreamstats + * @interface + * @extends {RTCRtpStreamStats} + */ +function RTCReceivedRtpStreamStats() {} + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.packetsReceived; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.packetsLost; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.jitter; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.packetsDiscarded; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.packetsRepaired; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.burstPacketsLost; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.burstPacketsDiscarded; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.burstLossCount; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.burstDiscardCount; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.burstLossRate; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.burstDiscardRate; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.gapLossRate; + +/** @const {number} */ +RTCReceivedRtpStreamStats.prototype.gapDiscardRate; + + + +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcinboundrtpstreamstats * @interface + * @extends {RTCReceivedRtpStreamStats} + */ +function RTCInboundRtpStreamStats() {} + +/** @const {string} */ +RTCInboundRtpStreamStats.prototype.trackId; + +/** @const {string} */ +RTCInboundRtpStreamStats.prototype.receiverId; + +/** @const {string} */ +RTCInboundRtpStreamStats.prototype.remoteId; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.framesDecoded; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.keyFramesDecoded; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.frameWidth; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.frameHeight; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.frameBitDepth; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.framesPerSecond; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.qpSum; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.totalDecodeTime; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.totalInterframeDelay; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.totalSquaredInterFrameDelay; + +/** @const {boolean} */ +RTCInboundRtpStreamStats.prototype.voiceActivityFlag; + +/** @const {?Date|number} */ +RTCInboundRtpStreamStats.prototype.lastPacketReceivedTimestamp; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.averageRtcpInterval; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.headerBytesReceived; + +/** + * Not available in Safari 13, Firefox 69 (Chrome 81+ only). + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.fecPacketsReceived; + +/** + * Not available in Safari 13, Firefox 69 (Chrome 81+ only). + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.fecPacketsDiscarded; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.bytesReceived; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.packetsFailedDecryption; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.packetsDuplicated; + +// TODO: record perDscpPacketsReceived; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.nackCount; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.firCount; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.pliCount; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.sliCount; + +/** @const {?Date|number} */ +RTCInboundRtpStreamStats.prototype.estimatedPlayoutTimestamp; + +/** + * Firefox specific value. + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.bitrateMean; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.jitterBufferDelay; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.jitterBufferEmittedCount; + +/** + * Experimental chrome stats under this origin trial: + * https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/hE2B1iItPDk + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.jitterBufferFlushes; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.totalSamplesReceived; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.samplesDecodedWithSilk; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.samplesDecodedWithCelt; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.concealedSamples; + +/** + * Not available in Safari 13. + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.silentConcealedSamples; + +/** + * Not available in Safari 13. + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.concealmentEvents; + +/** + * Not available in Safari 13. + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.insertedSamplesForDeceleration + +/** + * Not available in Safari 13. + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.removedSamplesForAcceleration; + +/** + * Experimental chrome stats under this origin trial: + * https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/hE2B1iItPDk + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.delayedPacketOutageSamples; + +/** + * Safari still reprorting it as inbound-rtp, it supposed to be in remote part. + * @const {number|undefined} + */ +RTCInboundRtpStreamStats.prototype.fractionLost; + +/** @const {number} */ +RTCInboundRtpStreamStats.prototype.audioLevel; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.totalAudioEnergy; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.totalSamplesDuration; + +/** @const {number|undefined} */ +RTCInboundRtpStreamStats.prototype.framesReceived; + +/** @const {string|undefined} */ +RTCInboundRtpStreamStats.prototype.decoderImplementation; + + + +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats + * @interface + * @extends {RTCReceivedRtpStreamStats} + */ +function RTCRemoteInboundRtpStreamStats() {} + +/** @const {string} */ +RTCRemoteInboundRtpStreamStats.prototype.localId; + +/** @const {number} */ +RTCRemoteInboundRtpStreamStats.prototype.roundTripTime; + +/** @const {number} */ +RTCRemoteInboundRtpStreamStats.prototype.fractionLost; + + +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcsentrtpstreamstats + * @interface + * @extends {RTCRtpStreamStats} + */ +function RTCSentRtpStreamStats() {} + +/** @const {number} */ +RTCSentRtpStreamStats.prototype.packetsSent; + +/** @const {number} */ +RTCSentRtpStreamStats.prototype.packetsDiscardedOnSend; + +/** @const {number} */ +RTCSentRtpStreamStats.prototype.fecPacketsSent; + +/** @const {number} */ +RTCSentRtpStreamStats.prototype.bytesSent; + +/** @const {number} */ +RTCSentRtpStreamStats.prototype.bytesDiscardedOnSend; + + +/** +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcoutboundrtpstreamstats + * @interface + * @extends {RTCSentRtpStreamStats} + */ +function RTCOutboundRtpStreamStats() {} + +/** @const {string} */ +RTCOutboundRtpStreamStats.prototype.trackId; + +/** @const {string} */ +RTCOutboundRtpStreamStats.prototype.senderId; + +/** @const {string} */ +RTCOutboundRtpStreamStats.prototype.remoteId; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.lastPacketSentTimestamp; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.targetBitrate; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.framesEncoded; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.totalEncodeTime; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.averageRTCPInterval; + +/** @const {number|undefined} */ +RTCOutboundRtpStreamStats.prototype.qualityLimitationResolutionChanges; + +/** @const {string|undefined} */ +RTCOutboundRtpStreamStats.prototype.qualityLimitationReason; + +/** @const {string} */ +RTCOutboundRtpStreamStats.prototype.mediaSourceId; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.frameWidth; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.frameHeight; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.qpSum; + +/** + * Firefox specific value. + * @const {number|undefined} + */ +RTCOutboundRtpStreamStats.prototype.bitrateMean; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.nackCount; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.firCount; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.pliCount; + +/** @const {number} */ +RTCOutboundRtpStreamStats.prototype.sliCount; + +/** @const {string|undefined} */ +RTCOutboundRtpStreamStats.prototype.encoderImplementation; + + +/** + * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteoutboundrtpstreamstats + * @interface + * @extends {RTCSentRtpStreamStats} + */ +function RTCRemoteOutboundRtpStreamStats() {} + +/** @const {string} */ +RTCRemoteOutboundRtpStreamStats.prototype.localId; + +/** @const {?Date|number} */ +RTCRemoteOutboundRtpStreamStats.prototype.remoteTimestamp; + + +/** + * @see https://www.w3.org/TR/webrtc-stats/#transportstats-dict* + * @interface + * @extends {RTCStats} + */ +function RTCTransportStats() {} + +/** @type {number} */ +RTCTransportStats.prototype.packetsSent; + +/** @type {number} */ +RTCTransportStats.prototype.packetsReceived; + +/** @type {number} */ +RTCTransportStats.prototype.bytesSent; + +/** @type {number} */ +RTCTransportStats.prototype.bytesReceived; + +/** @type {string} */ +RTCTransportStats.prototype.rtcpTransportStatsId; + +/** + * @type {string} + * Set of possible string values: 'unknown', 'controlling', 'controlled'. + */ +RTCTransportStats.prototype.iceRole; + +/** + * @type {string} + * Set of possible string values: 'new', 'connecting', 'connected', + * 'closed', 'failed'. + */ +RTCTransportStats.prototype.dtlsState; + +/** @type {string} */ +RTCTransportStats.prototype.selectedCandidatePairId; + +/** @type {string} */ +RTCTransportStats.prototype.localCertificateId; + +/** @type {string} */ +RTCTransportStats.prototype.remoteCertificateId; + +/** @type {string} */ +RTCTransportStats.prototype.tlsVersion; + +/** @type {string} */ +RTCTransportStats.prototype.dtlsCipher; + +/** @type {string} */ +RTCTransportStats.prototype.srtpCipher; + +/** @type {string} */ +RTCTransportStats.prototype.tlsGroup; + +/** @type {number} */ +RTCTransportStats.prototype.selectedCandidatePairChanges; + + +/** + * @see https://w3c.github.io/webrtc-stats/#dom-rtcmediasourcestats + * @interface + * @extends {RTCStats} + */ +function RTCMediaSourceStats() {} + +/** @const {string} */ +RTCMediaSourceStats.prototype.trackIdentifier; + +/** @const {string} */ +RTCMediaSourceStats.prototype.kind; + +/** + * @see https://w3c.github.io/webrtc-stats/#dom-rtcvideosourcestats + * @interface + * @extends {RTCMediaSourceStats} + */ +function RTCVideoSourceStats() {} + +/** @const {number} */ +RTCVideoSourceStats.prototype.width; + +/** @const {number} */ +RTCVideoSourceStats.prototype.height; + +/** @const {number} */ +RTCVideoSourceStats.prototype.bitDepth; + +/** @const {number} */ +RTCVideoSourceStats.prototype.frames; + +/** @const {number} */ +RTCVideoSourceStats.prototype.framesPerSecond; + +/** + * @see https://w3c.github.io/webrtc-stats/#dom-rtcaudiosourcestats + * @interface + * @extends {RTCMediaSourceStats} + */ +function RTCAudioSourceStats() {} + +/** @const {number} */ +RTCAudioSourceStats.prototype.audioLevel; + +/** @const {number} */ +RTCAudioSourceStats.prototype.totalAudioEnergy; + +/** @const {number} */ +RTCAudioSourceStats.prototype.totalSamplesDuration; + +/** @const {number} */ +RTCAudioSourceStats.prototype.echoReturnLoss; + +/** @const {number} */ +RTCAudioSourceStats.prototype.echoReturnLossEnhancement; + + +/** + * @interface + * @extends {Iterable>} + * @see https://w3c.github.io/webrtc-pc/#rtcstatsreport-object */ function RTCStatsReport() {} /** - * @type {Date} - * @const + * @const {?Date|number} */ RTCStatsReport.prototype.timestamp; /** - * @return {!Array} + * @return {!Array} */ RTCStatsReport.prototype.names = function() {}; @@ -1628,27 +2265,23 @@ RTCStatsReport.prototype.stat = function(name) {}; /** * @deprecated - * @type {RTCStatsReport} - * @const + * @const {RTCStatsReport} */ RTCStatsReport.prototype.local; /** * @deprecated - * @type {RTCStatsReport} - * @const + * @const {RTCStatsReport} */ RTCStatsReport.prototype.remote; /** - * @type {string} - * @const + * @const {string} */ RTCStatsReport.prototype.type; /** - * @type {string} - * @const + * @const {string} */ RTCStatsReport.prototype.id; @@ -1657,27 +2290,52 @@ RTCStatsReport.prototype.id; // Mozilla. // See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition. /** - * @param {function(this:SCOPE, Object, string, MAP)} callback + * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback * @param {SCOPE=} opt_thisObj The value of "this" inside callback function. * @this {MAP} * @template MAP,SCOPE - * @readonly */ RTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {}; /** * @param {string} key - * @return {Object} - * @readonly + * @return {!IteratorIterable>} + */ +RTCStatsReport.prototype.entries = function(key) {}; + +/** + * @param {string} key + * @return {!RTCStats} */ RTCStatsReport.prototype.get = function(key) {}; /** * @return {!IteratorIterable} - * @readonly */ RTCStatsReport.prototype.keys = function() {}; +/** + * @return {!IteratorIterable} + */ +RTCStatsReport.prototype.values = function() {}; + +/** + * @param {string} key + * @return {boolean} + */ +RTCStatsReport.prototype.has = function(key) {}; + +/** + * @const {number} + */ +RTCStatsReport.prototype.size; + +/** + * @return {!Iterator>} + */ +RTCStatsReport.prototype[Symbol.iterator] = function() {}; + + /** * TODO(bemasc): Remove this type once it is no longer in use. It has already * been removed from the specification. @@ -1768,18 +2426,17 @@ var MediaConstraints; /** * @interface * @extends {EventTarget} + * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel */ function RTCDataChannel() {} /** - * @type {string} - * @const + * @const {string} */ RTCDataChannel.prototype.label; /** - * @type {boolean} - * @const + * @const {boolean} */ RTCDataChannel.prototype.reliable; @@ -1797,6 +2454,11 @@ RTCDataChannel.prototype.readyState; */ RTCDataChannel.prototype.bufferedAmount; +/** + * @type {number} + */ +RTCDataChannel.prototype.bufferedAmountLowThreshold; + /** * @type {?function(!Event)} */ @@ -1819,6 +2481,11 @@ RTCDataChannel.prototype.close = function() {}; */ RTCDataChannel.prototype.onmessage; +/** + * @type {?function(!Event)} + */ +RTCDataChannel.prototype.onbufferedamountlow; + /** * @type {string} */ @@ -1860,14 +2527,15 @@ function RTCDataChannelInitInterface_() {} RTCDataChannelInitInterface_.prototype.reliable; /** - * @typedef {Object} - * @property {boolean=} [ordered=true] - * @property {number=} maxPacketLifeTime - * @property {number=} maxRetransmits - * @property {string=} [protocol=""] - * @property {boolean=} [negotiated=false] - * @property {number=} id - * @property {string=} [priority='low'] + * @typedef {{ + * ordered: (boolean|undefined), + * maxPacketLifeTime: (number|undefined), + * maxRetransmits: (number|undefined), + * protocol: (string|undefined), + * negotiated: (boolean|undefined), + * id: (number|undefined), + * priority: (string|undefined), + * }} * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation * Type inconsistencies due to Closure limitations: * maxPacketLifeTime should be UnsignedShort @@ -1895,6 +2563,7 @@ var RTCCertificate; * @param {!MediaConstraints=} constraints * @constructor * @implements {EventTarget} + * @see https://www.w3.org/TR/webrtc/#interface-definition */ function RTCPeerConnection(configuration, constraints) {} @@ -1950,7 +2619,7 @@ RTCPeerConnection.prototype.createAnswer = function(successCallbackOrConstraints, errorCallback, constraints) {}; /** - * @param {!RTCSessionDescription} description + * @param {!RTCSessionDescription=} description * @param {!RTCVoidCallback=} successCallback * @param {!RTCPeerConnectionErrorCallback=} errorCallback * @return {!Promise} @@ -1996,7 +2665,7 @@ RTCPeerConnection.prototype.updateIce = function(configuration, constraints) {}; * Void in Chrome for now, a promise that you can then/catch in Firefox. * @param {!RTCIceCandidate} candidate * @param {!RTCVoidCallback=} successCallback - * @param {!function(DOMException)=} errorCallback + * @param {function(DOMException)=} errorCallback * @return {!Promise|undefined} */ RTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {}; @@ -2013,6 +2682,12 @@ RTCPeerConnection.prototype.iceGatheringState; */ RTCPeerConnection.prototype.iceConnectionState; +/** + * @type {!RTCPeerConnectionState} + * Read only. + */ +RTCPeerConnection.prototype.connectionState; + /** * @return {!Array} */ @@ -2123,6 +2798,11 @@ RTCPeerConnection.prototype.onnegotiationneeded; */ RTCPeerConnection.prototype.onicecandidate; +/** + * @type {?function(!Event)} + */ +RTCPeerConnection.prototype.onicegatheringstatechange; + /** * @type {?function(!Event)} */ @@ -2154,99 +2834,51 @@ RTCPeerConnection.prototype.oniceconnectionstatechange; RTCPeerConnection.prototype.ondatachannel; /** - * @const + * @type {?function(!Event)} */ -var webkitRTCPeerConnection = RTCPeerConnection; +RTCPeerConnection.prototype.onconnectionstatechange; /** - * @const + * @typedef {string} + * @see https://www.w3.org/TR/webrtc/#dom-rtcerrordetailtype + * Possible values: 'data-channel-failure', 'dtls-failure', + * 'fingerprint-failure', 'sctp-failure', 'sdp-syntax-error', + * 'hardware-encoder-not-available', 'hardware-encoder-error' */ -var mozRTCPeerConnection = RTCPeerConnection; +var RTCErrorDetailType; /** + * @see https://www.w3.org/TR/webrtc/#rtcerror-interface * @interface - * @param {RTCIceGatherer} iceGatherer - * @see https://www.w3.org/TR/webrtc/#idl-def-rtcicetransport */ -function RTCIceTransport(iceGatherer) {} +function RTCError() {} -/** - * @type {!RTCIceGatheringState} - * @const - */ -RTCIceTransport.prototype.gatheringState; +/** @const {!RTCErrorDetailType} */ +RTCError.prototype.errorDetail; -/** - * @return {RTCIceCandidate[]} - */ -RTCIceTransport.prototype.getLocalCandidates = function(){}; +/** @const {number|undefined} */ +RTCError.prototype.sdpLineNumber; -/** - * @return {RTCIceCandidate[]} - */ -RTCIceTransport.prototype.getRemoteCandidates = function(){}; +/** @const {number|undefined} */ +RTCError.prototype.httpRequestStatusCode; -/** - * @return {RTCIceCandidatePair} - */ -RTCIceTransport.prototype.getSelectedCandidatePair = function(){}; +/** @const {number|undefined} */ +RTCError.prototype.sctpCauseCode; -/** - * @return {RTCIceParameters} - */ -RTCIceTransport.prototype.getLocalParameters = function(){}; - -/** - * @return {RTCIceParameters} - */ -RTCIceTransport.prototype.getRemoteParameters = function(){}; +/** @const {number|undefined} */ +RTCError.prototype.receivedAlert; -/** - * @param {!Event} e - * @return {undefined} - */ -RTCIceTransport.prototype.onstatechange = function(e){}; - -/** - * @param {!Event} e - * @return {undefined} - */ -RTCIceTransport.prototype.ongatheringstatechange = function(e){}; - -/** - * @param {!Event} e - * @return {undefined} - */ -RTCIceTransport.prototype.onselectedcandidatepairchange = function(e){}; - - -/** - * @constructor - * @param {!RTCIceGatherOptions} options - * @see https://msdn.microsoft.com/en-us/library/mt433107(v=vs.85).aspx - */ -function RTCIceGatherer(options) {} +/** @const {number|undefined} */ +RTCError.prototype.sentAlert; /** + * @see https://www.w3.org/TR/webrtc/#rtcerrorevent-interface * @interface - * @param {RTCIceTransport} iceTransport - * @see https://www.w3.org/TR/webrtc/#idl-def-rtcdtlstransport - */ -function RTCDtlsTransport(iceTransport) {} - -/** - * @type {RTCIceTransport} - * @const */ -RTCDtlsTransport.prototype.transport; +function RTCErrorEvent() {} -/** - * @return {ArrayBuffer[]} - */ -RTCDtlsTransport.prototype.getRemoteCertificates = function() {}; +/** @const {!RTCError} */ +RTCErrorEvent.prototype.error; -/** - * @param {!Event} e - * @return {undefined} - */ -RTCDtlsTransport.prototype.onstatechange = function(e){}; +/** @const {string} */ +RTCErrorEvent.prototype.message; diff --git a/javascript/externs/web/w3c_serviceworker.js b/javascript/externs/web/w3c_serviceworker.js index f88ece161244..00dbf05cbce6 100644 --- a/javascript/externs/web/w3c_serviceworker.js +++ b/javascript/externs/web/w3c_serviceworker.js @@ -41,7 +41,55 @@ ServiceWorker.prototype.onstatechange; * 'activated', 'redundant'. * @typedef {string} */ -var ServiceWorkerState ; +var ServiceWorkerState; + +/** + * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager + * @constructor + */ +function NavigationPreloadManager() {} + +/** @return {!Promise} */ +NavigationPreloadManager.prototype.enable = function() {}; + +/** @return {!Promise} */ +NavigationPreloadManager.prototype.disable = function() {}; + +/** + * @param {string=} value + * @return {!Promise} + */ +NavigationPreloadManager.prototype.setHeaderValue = function(value) {}; + +/** @return {!Promise} */ +NavigationPreloadManager.prototype.getState = function() {}; + +/** + * @typedef {{ + * enabled: (boolean|undefined), + * headerValue: (string|undefined) + * }} + */ +var NavigationPreloadState; + +/** @record */ +function PushSubscriptionOptions() {} + +/** @type {ArrayBuffer|undefined} */ +PushSubscriptionOptions.prototype.applicationServerKey; + +/** @type {boolean|undefined} */ +PushSubscriptionOptions.prototype.userVisibleOnly; + +/** @record */ +function PushSubscriptionOptionsInit() {} + +/** @type {BufferSource|string|undefined} */ +PushSubscriptionOptionsInit.prototype.applicationServerKey; + +/** @type {boolean|undefined} */ +PushSubscriptionOptionsInit.prototype.userVisibleOnly; + /** * @see https://w3c.github.io/push-api/ @@ -59,6 +107,9 @@ PushSubscription.prototype.endpoint; */ PushSubscription.prototype.subscriptionId; +/** @type {!PushSubscriptionOptions} */ +PushSubscription.prototype.options; + /** @return {!Promise} */ PushSubscription.prototype.unsubscribe = function() {}; @@ -78,8 +129,8 @@ PushSubscription.prototype.unsubscribe = function() {}; function PushManager() {} /** - * @param {PushSubscriptionOptions=} opt_options - * @return {!Promise} + * @param {PushSubscriptionOptionsInit=} opt_options + * @return {!Promise} */ PushManager.prototype.subscribe = function(opt_options) {}; @@ -92,10 +143,34 @@ PushManager.prototype.getSubscription = function() {}; // PushManager.prototype.hasPermission = function() {}; /** - * @typedef {{userVisibleOnly: (boolean|undefined)}} - * @see https://w3c.github.io/push-api/#idl-def-PushSubscriptionOptions + * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface + * @constructor + */ +function SyncManager() {} + +/** + * @param {string} tag + * @return {!Promise} + */ +SyncManager.prototype.register = function(tag) {} + +/** + * @return {!Promise>} */ -var PushSubscriptionOptions; +SyncManager.prototype.getTags = function() {} + +/** + * @see https://wicg.github.io/BackgroundSync/spec/#sync-event + * @constructor + * @extends{ExtendableEvent} + */ +function SyncEvent() {} + +/** @type {string} */ +SyncEvent.prototype.tag; + +/** @type {boolean} */ +SyncEvent.prototype.lastChance; /** * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData @@ -145,6 +220,9 @@ ServiceWorkerRegistration.prototype.waiting; /** @type {ServiceWorker} */ ServiceWorkerRegistration.prototype.active; +/** @type {NavigationPreloadManager} */ +ServiceWorkerRegistration.prototype.navigationPreload; + /** @type {string} */ ServiceWorkerRegistration.prototype.scope; @@ -179,6 +257,12 @@ ServiceWorkerRegistration.prototype.showNotification = */ ServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {}; +/** + * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions + * @type {!SyncManager} + */ +ServiceWorkerRegistration.prototype.sync; + /** * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface * @interface @@ -193,7 +277,7 @@ ServiceWorkerContainer.prototype.controller; ServiceWorkerContainer.prototype.ready; /** - * @param {string} scriptURL + * @param {!TrustedScriptURL|string} scriptURL * @param {RegistrationOptions=} opt_options * @return {!Promise} */ @@ -210,14 +294,17 @@ ServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {}; */ ServiceWorkerContainer.prototype.getRegistrations = function() {}; -/** @type {?function(!Event)} */ +/** @type {?function(!Event): void} */ ServiceWorkerContainer.prototype.oncontrollerchange; -/** @type {?function(!ErrorEvent)} */ +/** @type {?function(!ExtendableMessageEvent): void} */ +ServiceWorkerContainer.prototype.onmessage; + +/** @type {?function(!ErrorEvent): void} */ ServiceWorkerContainer.prototype.onerror; /** - * @typedef {{scope: (string|undefined), useCache: (boolean|undefined)}} + * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}} */ var RegistrationOptions; @@ -276,8 +363,19 @@ ServiceWorkerGlobalScope.prototype.onevicted; /** @type {?function(!MessageEvent)} */ ServiceWorkerGlobalScope.prototype.onmessage; -/** @type {!IDBFactory|undefined} */ -ServiceWorkerGlobalScope.prototype.indexedDB; +/** + * While not strictly correct, this should be effectively correct. Notification + * is the Notification constructor but calling it from the Service Worker throws + * (https://notifications.spec.whatwg.org/#constructors) so its only use is as + * an object holding some static properties (note that requestPermission is only + * exposed to window context - https://notifications.spec.whatwg.org/#api). + * + * @type {{ + * permission: string, + * maxActions: number, + * }} + */ +ServiceWorkerGlobalScope.prototype.Notification; /** * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface @@ -300,6 +398,9 @@ ServiceWorkerClient.prototype.visibilityState; /** @type {string} */ ServiceWorkerClient.prototype.url; +/** @type {string} */ +ServiceWorkerClient.prototype.id; + /** * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once * the enum is defined. @@ -317,6 +418,12 @@ ServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {}; /** @return {!Promise} */ ServiceWorkerClient.prototype.focus = function() {}; +/** + * @param {string} url + * @return {!Promise} + */ +ServiceWorkerClient.prototype.navigate = function(url) {}; + /** * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface * @interface @@ -349,6 +456,12 @@ ServiceWorkerClients.prototype.claim = function() {}; */ ServiceWorkerClients.prototype.openWindow = function(url) {}; +/** + * @param {string} id + * @return {!Promise} + */ +ServiceWorkerClients.prototype.get = function(id) {}; + /** @typedef {{includeUncontrolled: (boolean|undefined)}} */ var ServiceWorkerClientQueryOptions; @@ -506,21 +619,35 @@ var InstallEventInit; * @constructor * @param {string} type * @param {FetchEventInit=} opt_eventInitDict - * @extends {Event} + * @extends {ExtendableEvent} */ function FetchEvent(type, opt_eventInitDict) {} /** @type {!Request} */ FetchEvent.prototype.request; -/** @type {!ServiceWorkerClient} */ +/** + * @type {!Promise} + */ +FetchEvent.prototype.preloadResponse; + +/** + * @type {!ServiceWorkerClient} + * @deprecated + */ FetchEvent.prototype.client; -/** @type {!boolean} */ +/** @type {?string} */ +FetchEvent.prototype.clientId; + +/** @type {boolean} */ FetchEvent.prototype.isReload; +/** @type {?string} */ +FetchEvent.prototype.resultingClientId; + /** - * @param {(Response|Promise)} r + * @param {(Response|IThenable)} r * @return {undefined} */ FetchEvent.prototype.respondWith = function(r) {}; @@ -541,8 +668,59 @@ FetchEvent.prototype.default = function() {}; * bubbles: (boolean|undefined), * cancelable: (boolean|undefined), * request: (!Request|undefined), + * preloadResponse: (!Promise), * client: (!ServiceWorkerClient|undefined), - * isReload: (!boolean|undefined) + * isReload: (boolean|undefined) * }} */ var FetchEventInit; + + +/** + * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface + * @param {string} type + * @param {!ExtendableMessageEventInit=} opt_eventInitDict + * @constructor + * @extends {ExtendableEvent} + * @template T + */ +function ExtendableMessageEvent(type, opt_eventInitDict) {}; + +/** @type {T} */ +ExtendableMessageEvent.prototype.data; + +/** @type {string} */ +ExtendableMessageEvent.prototype.origin; + +/** @type {string} */ +ExtendableMessageEvent.prototype.lastEventId; + +/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */ +ExtendableMessageEvent.prototype.source; + +/** @type {?Array} */ +ExtendableMessageEvent.prototype.ports; + + +/** + * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary + * @record + * @extends {ExtendableEventInit} + * @template T + */ +function ExtendableMessageEventInit() {}; + +/** @type {T} */ +ExtendableMessageEventInit.prototype.data; + +/** @type {string|undefined} */ +ExtendableMessageEventInit.prototype.origin; + +/** @type {string|undefined} */ +ExtendableMessageEventInit.prototype.lastEventId; + +/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */ +ExtendableMessageEventInit.prototype.source; + +/** @type {!Array|undefined} */ +ExtendableMessageEventInit.prototype.ports; diff --git a/javascript/externs/web/w3c_webcrypto.js b/javascript/externs/web/w3c_webcrypto.js index ddd16ab399f0..670aa408a218 100644 --- a/javascript/externs/web/w3c_webcrypto.js +++ b/javascript/externs/web/w3c_webcrypto.js @@ -47,6 +47,19 @@ webCrypto.Algorithm; */ webCrypto.AlgorithmIdentifier; +/** + * @typedef {webCrypto.AlgorithmIdentifier} + * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier + */ +webCrypto.HashAlgorithmIdentifier; + + +/** + * @typedef {Uint8Array} + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger + */ +webCrypto.BigInteger; + /** * @constructor @@ -85,6 +98,25 @@ webCrypto.CryptoKey.prototype.algorithm; webCrypto.CryptoKey.prototype.usages; +/** + * @constructor + * @see https://www.w3.org/TR/WebCryptoAPI/#keypair + */ +webCrypto.CryptoKeyPair = function() {}; + + +/** + * @type {!webCrypto.CryptoKey} + */ +webCrypto.CryptoKeyPair.prototype.publicKey; + + +/** + * @type {!webCrypto.CryptoKey} + */ +webCrypto.CryptoKeyPair.prototype.privateKey; + + /** * @typedef {?{ * name: string @@ -248,6 +280,337 @@ webCrypto.RsaOtherPrimesInfo.prototype.d; webCrypto.RsaOtherPrimesInfo.prototype.t; +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams + */ +webCrypto.RsaKeyGenParams; +/** + * @type {number} + */ +webCrypto.RsaKeyGenParams.prototype.modulusLength; +/** + * @type {webCrypto.BigInteger} + */ +webCrypto.RsaKeyGenParams.prototype.publicExponent; + + +/** + * @record + * @extends webCrypto.RsaKeyGenParams + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams + */ +webCrypto.RsaHashedKeyGenParams; +/** + * @type {webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.RsaHashedKeyGenParams.prototype.hash; + + +/** + * @record + * @extends webCrypto.KeyAlgorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm + */ +webCrypto.RsaKeyAlgorithm; +/** + * @type {number} + */ +webCrypto.RsaKeyAlgorithm.prototype.modulusLength; +/** + * @type {webCrypto.BigInteger} + */ +webCrypto.RsaKeyAlgorithm.prototype.publicExponent; + + +/** + * @record + * @extends webCrypto.RsaKeyAlgorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm + */ +webCrypto.RsaHashedKeyAlgorithm; +/** + * @type {webCrypto.KeyAlgorithm} + */ +webCrypto.RsaHashedKeyAlgorithm.prototype.hash; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams + */ +webCrypto.RsaHashedImportParams; +/** + * @type {webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.RsaHashedImportParams.prototype.hash; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaPssParams + */ +webCrypto.RsaPssParams; +/** + * @type {number} + */ +webCrypto.RsaPssParams.prototype.saltLength; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOaepParams + */ +webCrypto.RsaOaepParams; +/** + * @type {!BufferSource} + */ +webCrypto.RsaOaepParams.prototype.label; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-EcdsaParams + */ +webCrypto.EcdsaParams; +/** + * @type {!webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.EcdsaParams.prototype.hash; + + +/** + * @typedef {string} + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-NamedCurve + */ +webCrypto.NamedCurve; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-EcKeyGenParams + */ +webCrypto.EcKeyGenParams; +/** + * @type {!webCrypto.NamedCurve} + */ +webCrypto.EcKeyGenParams.prototype.namedCurve; + + +/** + * @record + * @extends webCrypto.KeyAlgorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-EcKeyAlgorithm + */ +webCrypto.EcKeyAlgorithm; +/** + * @type {!webCrypto.NamedCurve} + */ +webCrypto.EcKeyAlgorithm.prototype.namedCurve; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-EcKeyImportParams + */ +webCrypto.EcKeyImportParams; +/** + * @type {!webCrypto.NamedCurve} + */ +webCrypto.EcKeyImportParams.prototype.namedCurve; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-EcKeyDeriveParams + */ +webCrypto.EcKeyDeriveParams; +/** + * @type {!webCrypto.CryptoKey} + */ +webCrypto.EcKeyDeriveParams.prototype.public; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-AesCtrParams + */ +webCrypto.AesCtrParams; +/** + * @type {!BufferSource} + */ +webCrypto.AesCtrParams.prototype.counter; +/** + * @type {number} + */ +webCrypto.AesCtrParams.prototype.length; + + +/** + * @record + * @extends webCrypto.KeyAlgorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-AesKeyAlgorithm + */ +webCrypto.AesKeyAlgorithm; +/** + * @type {number} + */ +webCrypto.AesKeyAlgorithm.prototype.length; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-AesKeyGenParams + */ +webCrypto.AesKeyGenParams; +/** + * @type {number} + */ +webCrypto.AesKeyGenParams.prototype.length; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-AesDerivedKeyParams + */ +webCrypto.AesDerivedKeyParams; +/** + * @type {number} + */ +webCrypto.AesDerivedKeyParams.prototype.length; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-AesCbcParams + */ +webCrypto.AesCbcParams; +/** + * @type {!BufferSource} + */ +webCrypto.AesCbcParams.prototype.iv; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-AesGcmParams + */ +webCrypto.AesGcmParams; +/** + * @type {!BufferSource} + */ +webCrypto.AesGcmParams.prototype.iv; +/** + * @type {!BufferSource} + */ +webCrypto.AesGcmParams.prototype.additionalData; +/** + * @type {number} + */ +webCrypto.AesGcmParams.prototype.tagLength; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-HmacImportParams + */ +webCrypto.HmacImportParams; +/** + * @type {!webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.HmacImportParams.prototype.hash; +/** + * @type {number} + */ +webCrypto.HmacImportParams.prototype.length; + + +/** + * @record + * @extends webCrypto.KeyAlgorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-HmacKeyAlgorithm + */ +webCrypto.HmacKeyAlgorithm; +/** + * @type {!webCrypto.KeyAlgorithm} + */ +webCrypto.HmacKeyAlgorithm.prototype.hash; +/** + * @type {number} + */ +webCrypto.HmacKeyAlgorithm.prototype.length; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-HmacKeyGenParams + */ +webCrypto.HmacKeyGenParams; +/** + * @type {!webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.HmacKeyGenParams.prototype.hash; +/** + * @type {number} + */ +webCrypto.HmacKeyGenParams.prototype.length; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-HkdfParams + */ +webCrypto.HkdfParams; +/** + * @type {!webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.HkdfParams.prototype.hash; +/** + * @type {!BufferSource} + */ +webCrypto.HkdfParams.prototype.salt; +/** + * @type {!BufferSource} + */ +webCrypto.HkdfParams.prototype.info; + + +/** + * @record + * @extends webCrypto.Algorithm + * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-Pbkdf2Params + */ +webCrypto.Pbkdf2Params; +/** + * @type {!BufferSource} + */ +webCrypto.Pbkdf2Params.prototype.salt; +/** + * @type {number} + */ +webCrypto.Pbkdf2Params.prototype.iterations; +/** + * @type {!webCrypto.HashAlgorithmIdentifier} + */ +webCrypto.Pbkdf2Params.prototype.hash; + + /** * @constructor * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface @@ -260,8 +623,8 @@ webCrypto.SubtleCrypto = function() {}; * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP. * @param {!webCrypto.CryptoKey} key Key to be used for signing. * @param {!BufferSource} data Data to be encrypted (cleartext). - * @return {!Promise<*>} Ciphertext generated by the encryption of the - * cleartext. + * @return {!Promise} Ciphertext generated by the encryption of + * the cleartext. */ webCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key, data) {}; @@ -272,7 +635,7 @@ webCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key, * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP. * @param {!webCrypto.CryptoKey} key Key to be used for signing. * @param {!BufferSource} data Data to be decrypted (ciphertext). - * @return {!Promise<*>} Cleartext generated by the decryption of the + * @return {!Promise} Cleartext generated by the decryption of the * ciphertext. */ webCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key, @@ -284,7 +647,7 @@ webCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key, * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA. * @param {!webCrypto.CryptoKey} key Private key to be used for signing. * @param {!BufferSource} data Data to be signed. - * @return {!Promise<*>} Returns the signature on success. + * @return {!Promise} Returns the signature on success. */ webCrypto.SubtleCrypto.prototype.sign = function(algorithm, key, data) {}; @@ -296,8 +659,8 @@ webCrypto.SubtleCrypto.prototype.sign = function(algorithm, key, * @param {!webCrypto.CryptoKey} key Private key to be used for signing. * @param {!BufferSource} signature Signature to verify. * @param {!BufferSource} data Data whose signature needs to be verified. - * @return {!Promise<*>} Returns a boolean indicating if the signature operating - * has been successful. + * @return {!Promise} Returns if the signature operating has been + * successful. */ webCrypto.SubtleCrypto.prototype.verify = function(algorithm, key, signature, data) {}; @@ -307,21 +670,21 @@ webCrypto.SubtleCrypto.prototype.verify = function(algorithm, key, * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported * values are: SHA-1, SHA-256, SHA-384, and SHA-512. * @param {!BufferSource} data Data to be hashed using the hashing algorithm. - * @return {!Promise<*>} returns the hash on success. + * @return {!Promise} returns the hash on success. */ webCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {}; /** - * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported - * values are: SHA-1, SHA-256, SHA-384, and SHA-512. + * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams} + * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512. * @param {boolean} extractable If the key can be extracted from the CryptoKey * object at a later stage. * @param {!Array} keyUsages Indication of new key options i.e. * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey, * unwrapKey. - * @return {!Promise<*>} returns the generated key as a CryptoKey or a - * CryptoKeyPair. + * @return {!Promise} returns the + * generated key. */ webCrypto.SubtleCrypto.prototype.generateKey = function(algorithm, extractable, keyUsages) {}; @@ -338,8 +701,8 @@ webCrypto.SubtleCrypto.prototype.generateKey = function(algorithm, * CryptoKey object at a later stage. * @param {!Array} keyUsages Indicates what can be done with the * derivated key. - * @return {!Promise<*>} returns the generated key as a CryptoKey or a - * CryptoKeyPair. + * @return {!Promise} returns the + * generated key. */ webCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm, baseKey, derivedKeyAlgo, extractable, keyUsages) {}; @@ -351,8 +714,7 @@ webCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm, * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key * derivation algorithm. * @param {number} length - * @return {!Promise<*>} returns the generated key as a CryptoKey or a - * CryptoKeyPair. + * @return {!Promise} returns the generated bits. */ webCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm, baseKey, length) {}; @@ -363,15 +725,15 @@ webCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm, * format of the key to imported. * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key * in the given format. - * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported values - * are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP, AES-KW, HMAC, - * RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH. + * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams} + * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP, + * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH. * @param {boolean} extractable If the key can be extracted from the CryptoKey * object at a later stage. * @param {!Array} keyUsages Indication of new key options i.e. * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey, * unwrapKey. - * @return {!Promise<*>} returns the generated key as a CryptoKey. + * @return {!Promise} returns the generated key. */ webCrypto.SubtleCrypto.prototype.importKey = function(format, keyData, algorithm, extractable, keyUsages) {}; @@ -381,7 +743,8 @@ webCrypto.SubtleCrypto.prototype.importKey = function(format, keyData, * @param {string} format Enumerated value describing the data * format of the key to imported. * @param {!webCrypto.CryptoKey} key CryptoKey to export. - * @return {!Promise<*>} returns the key in the requested format. + * @return {!Promise} returns the key in the + * requested format. */ webCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {}; @@ -395,7 +758,8 @@ webCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {}; * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR, * AES-GCM, RSA-OAEP, and AES-KW. - * @return {!Promise<*>} returns the wrapped key in the requested format. + * @return {!Promise} returns the wrapped key in the requested + * format. */ webCrypto.SubtleCrypto.prototype.wrapKey = function(format, key, wrappingKey, wrapAlgorithm) {}; @@ -417,7 +781,7 @@ webCrypto.SubtleCrypto.prototype.wrapKey = function(format, * CryptoKey object at a later stage. * @param {!Array} keyUsages Indicates what can be done with the * derivated key. - * @return {!Promise<*>} returns the unwrapped key as a CryptoKey. + * @return {!Promise} returns the unwrapped key. */ webCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey, unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, @@ -425,13 +789,10 @@ webCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey, /** - * Web Cryptography API - * @see http://www.w3.org/TR/WebCryptoAPI/ + * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto + * @interface */ - -/** @see https://developer.mozilla.org/en/DOM/window.crypto */ -Window.prototype.crypto; - +webCrypto.Crypto = function() {}; /** * @see https://developer.mozilla.org/en/DOM/window.crypto.getRandomValues @@ -439,11 +800,16 @@ Window.prototype.crypto; * @return {!ArrayBufferView} * @throws {Error} */ -Window.prototype.crypto.getRandomValues = function(typedArray) {}; - +webCrypto.Crypto.prototype.getRandomValues = function(typedArray) {}; /** - * @type {webCrypto.SubtleCrypto} + * @type {?webCrypto.SubtleCrypto} * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle */ -Window.prototype.crypto.subtle; +webCrypto.Crypto.prototype.subtle; + +/** + * @see https://developer.mozilla.org/en/DOM/window.crypto + * @type {!webCrypto.Crypto|undefined} + */ +var crypto; diff --git a/javascript/externs/web/w3c_xml.js b/javascript/externs/web/w3c_xml.js index e1a57dcae99d..0cd0effc23f1 100644 --- a/javascript/externs/web/w3c_xml.js +++ b/javascript/externs/web/w3c_xml.js @@ -25,8 +25,7 @@ * XMLHttpRequest - Fully type annotated * * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html - * @see http://www.w3.org/TR/XMLHttpRequest/ - * @see http://www.w3.org/TR/XMLHttpRequest2/ + * @see https://xhr.spec.whatwg.org/ * * @externs * @author stevey@google.com (Steve Yegge) @@ -40,16 +39,16 @@ function XPathException() {} /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR */ -XPathException.INVALID_EXPRESSION_ERR = 52; +XPathException.INVALID_EXPRESSION_ERR; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR */ -XPathException.TYPE_ERR = 52; +XPathException.TYPE_ERR; /** * @type {number} @@ -133,7 +132,6 @@ XPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {}; * XPath is a language for addressing parts of an XML document, designed to be * used by both XSLT and XPointer. * - * @noalias * @constructor * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult */ @@ -203,64 +201,64 @@ XPathResult.prototype.iterateNext = function() {}; XPathResult.prototype.snapshotItem = function(index) {}; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE */ -XPathResult.ANY_TYPE = 0; +XPathResult.ANY_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE */ -XPathResult.NUMBER_TYPE = 1; +XPathResult.NUMBER_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE */ -XPathResult.STRING_TYPE = 2; +XPathResult.STRING_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE */ -XPathResult.BOOLEAN_TYPE = 3; +XPathResult.BOOLEAN_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE */ -XPathResult.UNORDERED_NODE_ITERATOR_TYPE = 4; +XPathResult.UNORDERED_NODE_ITERATOR_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE */ -XPathResult.ORDERED_NODE_ITERATOR_TYPE = 5; +XPathResult.ORDERED_NODE_ITERATOR_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE */ -XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE = 6; +XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE */ -XPathResult.ORDERED_NODE_SNAPSHOT_TYPE = 7; +XPathResult.ORDERED_NODE_SNAPSHOT_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE */ -XPathResult.ANY_UNORDERED_NODE_TYPE = 8; +XPathResult.ANY_UNORDERED_NODE_TYPE; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE */ -XPathResult.FIRST_ORDERED_NODE_TYPE = 9; +XPathResult.FIRST_ORDERED_NODE_TYPE; /** * @constructor @@ -276,13 +274,13 @@ function XPathNamespace() {} XPathNamespace.prototype.ownerElement; /** - * @type {number} + * @const {number} * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE */ -XPathNamespace.XPATH_NAMESPACE_NODE = 13; +XPathNamespace.XPATH_NAMESPACE_NODE; /** - * From http://www.w3.org/TR/XMLHttpRequest/ + * From https://xhr.spec.whatwg.org/#xmlhttprequest * * (Draft) * @@ -292,30 +290,19 @@ XPathNamespace.XPATH_NAMESPACE_NODE = 13; * * @constructor * @implements {EventTarget} - * @see http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest-object + * @see https://xhr.spec.whatwg.org/#xmlhttprequest */ function XMLHttpRequest() {} -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -XMLHttpRequest.prototype.addEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +XMLHttpRequest.prototype.addEventListener = function( + type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -XMLHttpRequest.prototype.removeEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +XMLHttpRequest.prototype.removeEventListener = function( + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ XMLHttpRequest.prototype.dispatchEvent = function(evt) {}; /** @@ -325,7 +312,7 @@ XMLHttpRequest.prototype.dispatchEvent = function(evt) {}; * @param {?string=} opt_user * @param {?string=} opt_password * @return {undefined} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-open()-method + * @see https://xhr.spec.whatwg.org/#the-open()-method */ XMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user, opt_password) {}; @@ -334,130 +321,213 @@ XMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user, * @param {string} header * @param {string} value * @return {undefined} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method + * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method */ XMLHttpRequest.prototype.setRequestHeader = function(header, value) {}; /** * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data * @return {undefined} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-send()-method + * @see https://xhr.spec.whatwg.org/#the-send()-method */ XMLHttpRequest.prototype.send = function(opt_data) {}; /** * @return {undefined} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-abort()-method + * @see https://xhr.spec.whatwg.org/#the-abort()-method */ XMLHttpRequest.prototype.abort = function() {}; /** * @return {string} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method + * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method */ XMLHttpRequest.prototype.getAllResponseHeaders = function() {}; /** * @param {string} header - * @return {string} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method + * @return {?string} + * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method */ XMLHttpRequest.prototype.getResponseHeader = function(header) {}; /** * @type {string} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-responsetext-attribute + * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute */ XMLHttpRequest.prototype.responseText; /** * This is not supported in any IE browser (as of August 2016). * @type {string} - * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseURL + * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute */ XMLHttpRequest.prototype.responseURL; /** * @type {Document} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-responsexml-attribute + * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute */ XMLHttpRequest.prototype.responseXML; /** * @type {number} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-readystate-attribute + * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate */ XMLHttpRequest.prototype.readyState; /** * @type {number} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute + * @see https://xhr.spec.whatwg.org/#the-status-attribute */ XMLHttpRequest.prototype.status; /** * @type {string} - * @see http://www.w3.org/TR/XMLHttpRequest/#the-statustext-attribute + * @see https://xhr.spec.whatwg.org/#the-statustext-attribute */ XMLHttpRequest.prototype.statusText; /** - * @type {Function} - * @see http://www.w3.org/TR/XMLHttpRequest/#handler-xhr-onreadystatechange + * @type {number} + * @see https://xhr.spec.whatwg.org/#the-timeout-attribute + */ +XMLHttpRequest.prototype.timeout; + +/** + * @type {?function(!Event)} + * @see https://xhr.spec.whatwg.org/#event-handlers */ XMLHttpRequest.prototype.onreadystatechange; /** - * @type {Function} - * @see http://www.w3.org/TR/XMLHttpRequest/#handler-xhr-onerror + * @type {?function(!Event)} + * @see https://xhr.spec.whatwg.org/#event-handlers */ XMLHttpRequest.prototype.onerror; /** - * @type {number} - * @see https://www.w3.org/TR/XMLHttpRequest/#states + * @const {number} + * @see https://xhr.spec.whatwg.org/#states */ XMLHttpRequest.UNSENT; /** - * @type {number} - * @see https://www.w3.org/TR/XMLHttpRequest/#states + * @const {number} + * @see https://xhr.spec.whatwg.org/#states + */ +XMLHttpRequest.prototype.UNSENT; + +/** + * @const {number} + * @see https://xhr.spec.whatwg.org/#states */ XMLHttpRequest.OPENED; /** - * @type {number} - * @see https://www.w3.org/TR/XMLHttpRequest/#states + * @const {number} + * @see https://xhr.spec.whatwg.org/#states + */ +XMLHttpRequest.prototype.OPENED; + +/** + * @const {number} + * @see https://xhr.spec.whatwg.org/#states */ XMLHttpRequest.HEADERS_RECEIVED; /** - * @type {number} - * @see https://www.w3.org/TR/XMLHttpRequest/#states + * @const {number} + * @see https://xhr.spec.whatwg.org/#states + */ +XMLHttpRequest.prototype.HEADERS_RECEIVED; + +/** + * @const {number} + * @see https://xhr.spec.whatwg.org/#states */ XMLHttpRequest.LOADING; /** - * @type {number} - * @see https://www.w3.org/TR/XMLHttpRequest/#states + * @const {number} + * @see https://xhr.spec.whatwg.org/#states + */ +XMLHttpRequest.prototype.LOADING; + +/** + * @const {number} + * @see https://xhr.spec.whatwg.org/#states */ XMLHttpRequest.DONE; +/** + * @const {number} + * @see https://xhr.spec.whatwg.org/#states + */ +XMLHttpRequest.prototype.DONE; + + +/** + * @see https://xhr.spec.whatwg.org/#formdataentryvalue + * @typedef {!File|string} + */ +var FormDataEntryValue; + /** * The FormData object represents an ordered collection of entries. Each entry * has a name and value. * - * @param {?Element=} opt_form An optional form to use for constructing the form + * @param {?Element=} form An optional form to use for constructing the form * data set. * @constructor - * @see http://www.w3.org/TR/XMLHttpRequest2/#the-formdata-interface + * @implements {Iterable>} + * @see https://xhr.spec.whatwg.org/#interface-formdata + */ +function FormData(form) {} + +/** + * @param {string} name + * @param {?Blob|string} value + * @param {string=} filename + * @return {undefined} + * @see https://xhr.spec.whatwg.org/#dom-formdata-append */ -function FormData(opt_form) {} +FormData.prototype.append = function(name, value, filename) {}; /** * @param {string} name - * @param {Blob|string} value - * @param {string=} opt_filename * @return {undefined} + * @see https://xhr.spec.whatwg.org/#dom-formdata-delete */ -FormData.prototype.append = function(name, value, opt_filename) {}; +FormData.prototype.delete = function(name) {}; + +/** + * @param {string} name + * @return {?FormDataEntryValue} + * @see https://xhr.spec.whatwg.org/#dom-formdata-get + */ +FormData.prototype.get = function(name) {}; + +/** + * @param {string} name + * @return {!Array} + * @see https://xhr.spec.whatwg.org/#dom-formdata-getall + */ +FormData.prototype.getAll = function(name) {}; + +/** + * @param {string} name + * @return {boolean} + * @see https://xhr.spec.whatwg.org/#dom-formdata-has + */ +FormData.prototype.has = function(name) {}; + +/** + * @param {string} name + * @param {!Blob|string} value + * @param {string=} filename + * @return {undefined} + * @see https://xhr.spec.whatwg.org/#dom-formdata-set + */ +FormData.prototype.set = function(name, value, filename) {}; + diff --git a/javascript/externs/web/webgl.js b/javascript/externs/web/webgl.js index df0b2557e618..fc3d9f5b7066 100644 --- a/javascript/externs/web/webgl.js +++ b/javascript/externs/web/webgl.js @@ -29,1788 +29,1793 @@ */ +/** + * @typedef {ImageBitmap|ImageData|HTMLImageElement|HTMLCanvasElement| + * HTMLVideoElement|OffscreenCanvas} + */ +var TexImageSource; + /** * @constructor - * @noalias */ function WebGLRenderingContext() {} -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_BUFFER_BIT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BUFFER_BIT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.COLOR_BUFFER_BIT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.POINTS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINE_LOOP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINE_STRIP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TRIANGLES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TRIANGLE_STRIP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TRIANGLE_FAN; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ZERO; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SRC_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE_MINUS_SRC_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SRC_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE_MINUS_SRC_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DST_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE_MINUS_DST_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DST_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE_MINUS_DST_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SRC_ALPHA_SATURATE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FUNC_ADD; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_EQUATION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_EQUATION_RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_EQUATION_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FUNC_SUBTRACT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FUNC_REVERSE_SUBTRACT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_DST_RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_SRC_RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_DST_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_SRC_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CONSTANT_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE_MINUS_CONSTANT_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CONSTANT_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ONE_MINUS_CONSTANT_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ARRAY_BUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ELEMENT_ARRAY_BUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ARRAY_BUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ELEMENT_ARRAY_BUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STREAM_DRAW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STATIC_DRAW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DYNAMIC_DRAW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BUFFER_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BUFFER_USAGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CURRENT_VERTEX_ATTRIB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRONT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BACK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRONT_AND_BACK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CULL_FACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLEND; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DITHER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_TEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_TEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SCISSOR_TEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.POLYGON_OFFSET_FILL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLE_ALPHA_TO_COVERAGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLE_COVERAGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NO_ERROR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INVALID_ENUM; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INVALID_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INVALID_OPERATION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.OUT_OF_MEMORY; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CCW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINE_WIDTH; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ALIASED_POINT_SIZE_RANGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ALIASED_LINE_WIDTH_RANGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CULL_FACE_MODE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRONT_FACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_RANGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_CLEAR_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_FUNC; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_CLEAR_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_FUNC; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_PASS_DEPTH_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_PASS_DEPTH_PASS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_REF; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_VALUE_MASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_FUNC; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_PASS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_REF; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_VALUE_MASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BACK_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VIEWPORT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SCISSOR_BOX; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.COLOR_CLEAR_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.COLOR_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNPACK_ALIGNMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.PACK_ALIGNMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_TEXTURE_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_VIEWPORT_DIMS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SUBPIXEL_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RED_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.GREEN_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BLUE_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ALPHA_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.POLYGON_OFFSET_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.POLYGON_OFFSET_FACTOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_BINDING_2D; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLE_BUFFERS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLE_COVERAGE_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLE_COVERAGE_INVERT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.COMPRESSED_TEXTURE_FORMATS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DONT_CARE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FASTEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NICEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.GENERATE_MIPMAP_HINT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BYTE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNSIGNED_BYTE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SHORT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNSIGNED_SHORT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNSIGNED_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_COMPONENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RGBA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LUMINANCE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LUMINANCE_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNSIGNED_SHORT_4_4_4_4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNSIGNED_SHORT_5_5_5_1; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNSIGNED_SHORT_5_6_5; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAGMENT_SHADER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_SHADER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_VERTEX_ATTRIBS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_VERTEX_UNIFORM_VECTORS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_VARYING_VECTORS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_TEXTURE_IMAGE_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SHADER_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DELETE_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINK_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VALIDATE_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ATTACHED_SHADERS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ACTIVE_UNIFORMS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ACTIVE_ATTRIBUTES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SHADING_LANGUAGE_VERSION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CURRENT_PROGRAM; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NEVER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LESS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.EQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LEQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.GREATER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NOTEQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.GEQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ALWAYS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.KEEP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.REPLACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INCR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DECR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INVERT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INCR_WRAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DECR_WRAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VENDOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERSION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NEAREST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINEAR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NEAREST_MIPMAP_NEAREST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINEAR_MIPMAP_NEAREST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NEAREST_MIPMAP_LINEAR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LINEAR_MIPMAP_LINEAR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_MAG_FILTER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_MIN_FILTER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_WRAP_S; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_WRAP_T; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_2D; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_BINDING_CUBE_MAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE0; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE1; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE5; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE6; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE7; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE8; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE9; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE10; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE11; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE12; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE13; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE14; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE15; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE16; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE17; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE18; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE19; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE20; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE21; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE22; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE23; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE24; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE25; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE26; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE27; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE28; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE29; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE30; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.TEXTURE31; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.ACTIVE_TEXTURE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.REPEAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CLAMP_TO_EDGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MIRRORED_REPEAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT_VEC2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT_VEC3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT_VEC4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INT_VEC2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INT_VEC3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INT_VEC4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BOOL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BOOL_VEC2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BOOL_VEC3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BOOL_VEC4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT_MAT2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT_MAT3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FLOAT_MAT4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLER_2D; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.SAMPLER_CUBE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_POINTER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.IMPLEMENTATION_COLOR_READ_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.COMPILE_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LOW_FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MEDIUM_FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.HIGH_FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.LOW_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MEDIUM_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.HIGH_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RGBA4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RGB5_A1; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RGB565; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_COMPONENT16; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_INDEX; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_INDEX8; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_STENCIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_WIDTH; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_HEIGHT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_INTERNAL_FORMAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_RED_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_GREEN_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_BLUE_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_ALPHA_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_DEPTH_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_STENCIL_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.COLOR_ATTACHMENT0; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.STENCIL_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.DEPTH_STENCIL_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.NONE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_COMPLETE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_UNSUPPORTED; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.FRAMEBUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.RENDERBUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.MAX_RENDERBUFFER_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNPACK_FLIP_Y_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.CONTEXT_LOST_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.BROWSER_DEFAULT_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_BUFFER_BIT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BUFFER_BIT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.COLOR_BUFFER_BIT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.POINTS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINE_LOOP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINE_STRIP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TRIANGLES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TRIANGLE_STRIP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TRIANGLE_FAN; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ZERO; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SRC_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE_MINUS_SRC_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SRC_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE_MINUS_SRC_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DST_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE_MINUS_DST_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DST_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE_MINUS_DST_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SRC_ALPHA_SATURATE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FUNC_ADD; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_EQUATION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_EQUATION_RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_EQUATION_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FUNC_SUBTRACT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FUNC_REVERSE_SUBTRACT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_DST_RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_SRC_RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_DST_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_SRC_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CONSTANT_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CONSTANT_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND_COLOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ARRAY_BUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ARRAY_BUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STREAM_DRAW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STATIC_DRAW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DYNAMIC_DRAW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BUFFER_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BUFFER_USAGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CURRENT_VERTEX_ATTRIB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRONT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BACK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRONT_AND_BACK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CULL_FACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLEND; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DITHER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_TEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_TEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SCISSOR_TEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.POLYGON_OFFSET_FILL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLE_ALPHA_TO_COVERAGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLE_COVERAGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NO_ERROR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INVALID_ENUM; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INVALID_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INVALID_OPERATION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.OUT_OF_MEMORY; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CCW; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINE_WIDTH; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ALIASED_POINT_SIZE_RANGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ALIASED_LINE_WIDTH_RANGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CULL_FACE_MODE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRONT_FACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_RANGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_CLEAR_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_FUNC; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_CLEAR_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_FUNC; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_PASS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_REF; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_VALUE_MASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_FUNC; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_FAIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_PASS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_REF; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_VALUE_MASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BACK_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VIEWPORT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SCISSOR_BOX; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.COLOR_CLEAR_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.COLOR_WRITEMASK; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNPACK_ALIGNMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.PACK_ALIGNMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_TEXTURE_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_VIEWPORT_DIMS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SUBPIXEL_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RED_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.GREEN_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BLUE_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ALPHA_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_BITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.POLYGON_OFFSET_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.POLYGON_OFFSET_FACTOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_BINDING_2D; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLE_BUFFERS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLE_COVERAGE_VALUE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLE_COVERAGE_INVERT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.COMPRESSED_TEXTURE_FORMATS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DONT_CARE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FASTEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NICEST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.GENERATE_MIPMAP_HINT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BYTE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNSIGNED_BYTE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SHORT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNSIGNED_SHORT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNSIGNED_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_COMPONENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RGB; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RGBA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LUMINANCE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LUMINANCE_ALPHA; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNSIGNED_SHORT_4_4_4_4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNSIGNED_SHORT_5_5_5_1; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNSIGNED_SHORT_5_6_5; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAGMENT_SHADER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_SHADER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_VERTEX_ATTRIBS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_VERTEX_UNIFORM_VECTORS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_VARYING_VECTORS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_COMBINED_TEXTURE_IMAGE_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_VERTEX_TEXTURE_IMAGE_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_TEXTURE_IMAGE_UNITS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_FRAGMENT_UNIFORM_VECTORS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SHADER_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DELETE_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINK_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VALIDATE_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ATTACHED_SHADERS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ACTIVE_UNIFORMS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ACTIVE_ATTRIBUTES; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SHADING_LANGUAGE_VERSION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CURRENT_PROGRAM; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NEVER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LESS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.EQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LEQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.GREATER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NOTEQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.GEQUAL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ALWAYS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.KEEP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.REPLACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INCR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DECR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INVERT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INCR_WRAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DECR_WRAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VENDOR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERSION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NEAREST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINEAR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NEAREST_MIPMAP_NEAREST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINEAR_MIPMAP_NEAREST; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NEAREST_MIPMAP_LINEAR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LINEAR_MIPMAP_LINEAR; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_MAG_FILTER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_MIN_FILTER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_WRAP_S; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_WRAP_T; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_2D; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_BINDING_CUBE_MAP; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_X; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_X; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Y; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Y; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Z; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Z; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_CUBE_MAP_TEXTURE_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE0; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE1; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE5; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE6; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE7; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE8; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE9; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE10; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE11; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE12; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE13; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE14; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE15; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE16; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE17; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE18; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE19; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE20; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE21; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE22; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE23; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE24; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE25; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE26; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE27; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE28; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE29; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE30; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.TEXTURE31; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.ACTIVE_TEXTURE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.REPEAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CLAMP_TO_EDGE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MIRRORED_REPEAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT_VEC2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT_VEC3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT_VEC4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INT_VEC2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INT_VEC3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INT_VEC4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BOOL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BOOL_VEC2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BOOL_VEC3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BOOL_VEC4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT_MAT2; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT_MAT3; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FLOAT_MAT4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLER_2D; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.SAMPLER_CUBE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_ENABLED; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_STRIDE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_NORMALIZED; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_POINTER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.COMPILE_STATUS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LOW_FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MEDIUM_FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.HIGH_FLOAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.LOW_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MEDIUM_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.HIGH_INT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RGBA4; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RGB5_A1; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RGB565; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_COMPONENT16; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_INDEX; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_INDEX8; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_STENCIL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_WIDTH; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_HEIGHT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_INTERNAL_FORMAT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_RED_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_GREEN_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_BLUE_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_ALPHA_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_DEPTH_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_STENCIL_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.COLOR_ATTACHMENT0; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.STENCIL_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.NONE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_COMPLETE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_DIMENSIONS; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_UNSUPPORTED; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.FRAMEBUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.RENDERBUFFER_BINDING; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.MAX_RENDERBUFFER_SIZE; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.INVALID_FRAMEBUFFER_OPERATION; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNPACK_FLIP_Y_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNPACK_PREMULTIPLY_ALPHA_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.CONTEXT_LOST_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.UNPACK_COLORSPACE_CONVERSION_WEBGL; -/** @type {number} */ +/** @const {number} */ WebGLRenderingContext.prototype.BROWSER_DEFAULT_WEBGL; @@ -2483,7 +2488,7 @@ WebGLRenderingContext.prototype.linkProgram = function(program) {}; /** * @param {number} pname - * @param {number} param + * @param {number|boolean} param * @return {undefined} */ WebGLRenderingContext.prototype.pixelStorei = function(pname, param) {}; @@ -2596,8 +2601,7 @@ WebGLRenderingContext.prototype.stencilOpSeparate = function( * @param {number} internalformat * @param {number} format or width * @param {number} type or height - * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement| - * number} img or border + * @param {?TexImageSource|number} img or border * @param {number=} opt_format * @param {number=} opt_type * @param {ArrayBufferView=} opt_pixels @@ -2632,8 +2636,7 @@ WebGLRenderingContext.prototype.texParameteri = function( * @param {number} yoffset * @param {number} format or width * @param {number} type or height - * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement| - * number} data or format + * @param {?TexImageSource|number} data or format * @param {number=} opt_type * @param {ArrayBufferView=} opt_pixels * @return {undefined} @@ -2901,7 +2904,6 @@ WebGLRenderingContext.prototype.viewport = function(x, y, width, height) {}; /** * @constructor - * @noalias */ function WebGLContextAttributes() {} @@ -2938,17 +2940,22 @@ WebGLContextAttributes.prototype.preserveDrawingBuffer; /** * @type {boolean} */ -WebGLContextAttributes.prototype.preferLowPowerToHighPerformance; +WebGLContextAttributes.prototype.desynchronized; /** * @type {boolean} */ WebGLContextAttributes.prototype.failIfMajorPerformanceCaveat; +/** + * Possible values: 'default', 'low-power', 'high-performance' + * @type {string} + */ +WebGLContextAttributes.prototype.powerPreference; + /** * @param {string} eventType * @constructor - * @noalias * @extends {Event} */ function WebGLContextEvent(eventType) {} @@ -2961,7 +2968,6 @@ WebGLContextEvent.prototype.statusMessage; /** * @constructor - * @noalias */ function WebGLShaderPrecisionFormat() {} @@ -2983,14 +2989,12 @@ WebGLShaderPrecisionFormat.prototype.precision; /** * @constructor - * @noalias */ function WebGLObject() {} /** * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLBuffer() {} @@ -2998,7 +3002,6 @@ function WebGLBuffer() {} /** * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLFramebuffer() {} @@ -3006,7 +3009,6 @@ function WebGLFramebuffer() {} /** * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLProgram() {} @@ -3014,7 +3016,6 @@ function WebGLProgram() {} /** * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLRenderbuffer() {} @@ -3022,7 +3023,6 @@ function WebGLRenderbuffer() {} /** * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLShader() {} @@ -3030,7 +3030,6 @@ function WebGLShader() {} /** * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLTexture() {} @@ -3038,7 +3037,6 @@ function WebGLTexture() {} /** * @constructor - * @noalias */ function WebGLActiveInfo() {} @@ -3054,7 +3052,6 @@ WebGLActiveInfo.prototype.name; /** * @constructor - * @noalias */ function WebGLUniformLocation() {} @@ -3062,7 +3059,6 @@ function WebGLUniformLocation() {} /** * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_float/ * @constructor - * @noalias */ function OES_texture_float() {} @@ -3070,7 +3066,6 @@ function OES_texture_float() {} /** * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/ * @constructor - * @noalias */ function OES_texture_half_float() {} @@ -3081,7 +3076,6 @@ OES_texture_half_float.prototype.HALF_FLOAT_OES; /** * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/ * @constructor - * @noalias */ function WEBGL_lose_context() {} @@ -3093,7 +3087,6 @@ WEBGL_lose_context.prototype.restoreContext = function() {}; /** * @see http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/ * @constructor - * @noalias */ function OES_standard_derivatives() {} @@ -3104,7 +3097,6 @@ OES_standard_derivatives.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT_OES; /** * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/ * @constructor - * @noalias * @extends {WebGLObject} */ function WebGLVertexArrayObjectOES() {} @@ -3113,7 +3105,6 @@ function WebGLVertexArrayObjectOES() {} /** * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/ * @constructor - * @noalias */ function OES_vertex_array_object() {} @@ -3150,21 +3141,19 @@ OES_vertex_array_object.prototype.bindVertexArrayOES = function(arrayObject) {}; /** * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/ * @constructor - * @noalias */ function WEBGL_debug_renderer_info() {} -/** @type {number} */ +/** @const {number} */ WEBGL_debug_renderer_info.prototype.UNMASKED_VENDOR_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_debug_renderer_info.prototype.UNMASKED_RENDERER_WEBGL; /** * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/ * @constructor - * @noalias */ function WEBGL_debug_shaders() {} @@ -3179,27 +3168,25 @@ WEBGL_debug_shaders.prototype.getTranslatedShaderSource = function(shader) {}; /** * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/ * @constructor - * @noalias */ function WEBGL_compressed_texture_s3tc() {} -/** @type {number} */ +/** @const {number} */ WEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGB_S3TC_DXT1_EXT; -/** @type {number} */ +/** @const {number} */ WEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT1_EXT; -/** @type {number} */ +/** @const {number} */ WEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT3_EXT; -/** @type {number} */ +/** @const {number} */ WEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT5_EXT; /** * @see http://www.khronos.org/registry/webgl/extensions/OES_depth_texture/ * @constructor - * @noalias */ function OES_depth_texture() {} @@ -3207,7 +3194,6 @@ function OES_depth_texture() {} /** * @see http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/ * @constructor - * @noalias */ function OES_element_index_uint() {} @@ -3215,124 +3201,122 @@ function OES_element_index_uint() {} /** * @see http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/ * @constructor - * @noalias */ function EXT_texture_filter_anisotropic() {} -/** @type {number} */ +/** @const {number} */ EXT_texture_filter_anisotropic.prototype.TEXTURE_MAX_ANISOTROPY_EXT; -/** @type {number} */ +/** @const {number} */ EXT_texture_filter_anisotropic.prototype.MAX_TEXTURE_MAX_ANISOTROPY_EXT; /** * @see https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/ * @constructor - * @noalias */ function WEBGL_draw_buffers() {} -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT0_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT1_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT2_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT3_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT4_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT5_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT6_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT7_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT8_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT9_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT10_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT11_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT12_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT13_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT14_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.COLOR_ATTACHMENT15_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER0_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER1_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER2_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER3_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER4_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER5_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER6_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER7_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER8_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER9_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER10_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER11_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER12_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER13_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER14_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.DRAW_BUFFER15_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.MAX_COLOR_ATTACHMENTS_WEBGL; -/** @type {number} */ +/** @const {number} */ WEBGL_draw_buffers.prototype.MAX_DRAW_BUFFERS_WEBGL; /** @@ -3345,12 +3329,11 @@ WEBGL_draw_buffers.prototype.drawBuffersWEBGL = function(buffers) {}; /** * @see http://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/ * @constructor - * @noalias */ function ANGLE_instanced_arrays() {} -/** @type {number} */ +/** @const {number} */ ANGLE_instanced_arrays.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE; diff --git a/javascript/externs/web/webkit_dom.js b/javascript/externs/web/webkit_dom.js index 7e4717ecfcd5..2ac3f9d2f96c 100644 --- a/javascript/externs/web/webkit_dom.js +++ b/javascript/externs/web/webkit_dom.js @@ -22,7 +22,6 @@ * @externs */ - /** * @param {boolean=} opt_center * @see https://bugzilla.mozilla.org/show_bug.cgi?id=403510 @@ -30,22 +29,6 @@ */ Element.prototype.scrollIntoViewIfNeeded = function(opt_center) {}; -/** - * @constructor - * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/MemoryInfo.idl - * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/MemoryInfo.cpp - */ -function MemoryInfo() {}; - -/** @type {number} */ -MemoryInfo.prototype.totalJSHeapSize; - -/** @type {number} */ -MemoryInfo.prototype.usedJSHeapSize; - -/** @type {number} */ -MemoryInfo.prototype.jsHeapSizeLimit; - /** * @constructor * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl @@ -94,202 +77,12 @@ ScriptProfile.prototype.uid; /** @type {ScriptProfileNode} */ ScriptProfile.prototype.head; -/** - * @constructor - * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/Console.idl - * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/Console.cpp - */ -function Console() {}; - -/** - * @param {*} condition - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.assert = function(condition, var_args) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.error = function(var_args) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.info = function(var_args) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.log = function(var_args) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.warn = function(var_args) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.debug = function(var_args) {}; - -/** - * @param {*} value - * @return {undefined} - */ -Console.prototype.dir = function(value) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.dirxml = function(var_args) {}; - -/** - * @param {!Object} data - * @param {*=} opt_columns - * @return {undefined} - */ -Console.prototype.table = function(data, opt_columns) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.trace = function(var_args) {}; - -/** - * @param {*} value - * @return {undefined} - */ -Console.prototype.count = function(value) {}; - -/** - * @param {*} value - * @return {undefined} - */ -Console.prototype.markTimeline = function(value) {}; - -/** - * @param {string=} opt_title - * @return {undefined} - */ -Console.prototype.profile = function(opt_title) {}; - -/** @type {Array} */ -Console.prototype.profiles; - -/** - * @param {string=} opt_title - * @return {undefined} - */ -Console.prototype.profileEnd = function(opt_title) {}; - -/** - * @param {string} name - * @return {undefined} - */ -Console.prototype.time = function(name) {}; - -/** - * @param {string} name - * @return {undefined} - */ -Console.prototype.timeEnd = function(name) {}; - -/** - * @param {*} value - * @return {undefined} - */ -Console.prototype.timeStamp = function(value) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.group = function(var_args) {}; - -/** - * @param {...*} var_args - * @return {undefined} - */ -Console.prototype.groupCollapsed = function(var_args) {}; - -Console.prototype.groupEnd = function() {}; - -Console.prototype.clear = function() {}; - -/** @type {MemoryInfo} */ -Console.prototype.memory; - -/** @type {!Console} */ -Window.prototype.console; - -/** - * @type {!Console} - * @suppress {duplicate} - */ -var console; - /** * @type {number} * @see http://developer.android.com/reference/android/webkit/WebView.html */ Window.prototype.devicePixelRatio; -/** @type {Node} */ -Selection.prototype.baseNode; - -/** @type {number} */ -Selection.prototype.baseOffset; - -/** @type {Node} */ -Selection.prototype.extentNode; - -/** @type {number} */ -Selection.prototype.extentOffset; - -/** @type {string} */ -Selection.prototype.type; - -/** - * @return {undefined} - */ -Selection.prototype.empty = function() {}; - -/** - * @param {Node} baseNode - * @param {number} baseOffset - * @param {Node} extentNode - * @param {number} extentOffset - * @return {undefined} - */ -Selection.prototype.setBaseAndExtent = - function(baseNode, baseOffset, extentNode, extentOffset) {}; - -/** - * @param {string} alter - * @param {string} direction - * @param {string} granularity - * @return {undefined} - */ -Selection.prototype.modify = function(alter, direction, granularity) {}; - -/** - * @param {Element} element - * @param {string} pseudoElement - * @param {boolean=} opt_authorOnly - * @return {CSSRuleList} - * @nosideeffects - */ -ViewCSS.prototype.getMatchedCSSRules = - function(element, pseudoElement, opt_authorOnly) {}; - /** * @param {string} contextId * @param {string} name @@ -309,3 +102,17 @@ Document.prototype.getCSSCanvasContext = * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint */ Document.prototype.caretRangeFromPoint = function(x, y) {}; + +/** + * @return {!Promise} + * @nosideeffects + * @see https://webkit.org/blog/8124/introducing-storage-access-api + */ +Document.prototype.hasStorageAccess = function() {}; + +/** + * @return {!Promise} + * @see https://webkit.org/blog/8124/introducing-storage-access-api + * @see https://developer.mozilla.org/docs/Web/API/Document/requestStorageAccess#Syntax + */ +Document.prototype.requestStorageAccess = function() {}; diff --git a/javascript/externs/web/webkit_event.js b/javascript/externs/web/webkit_event.js index 9fad616f3b73..ff27f52d3e20 100644 --- a/javascript/externs/web/webkit_event.js +++ b/javascript/externs/web/webkit_event.js @@ -36,13 +36,11 @@ Event.prototype.wheelDeltaY; function WebKitAnimationEvent() {} /** - * @type {string} - * @const + * @const {string} */ WebKitAnimationEvent.prototype.animationName; /** - * @type {number} - * @const + * @const {number} */ -WebKitAnimationEvent.prototype.elapsedTime; \ No newline at end of file +WebKitAnimationEvent.prototype.elapsedTime; diff --git a/javascript/externs/web/webkit_notifications.js b/javascript/externs/web/webkit_notifications.js index 37a01069b1fa..988101910189 100644 --- a/javascript/externs/web/webkit_notifications.js +++ b/javascript/externs/web/webkit_notifications.js @@ -19,12 +19,26 @@ */ /** - * @typedef {{dir: (string|undefined), lang: (string|undefined), - * body: (string|undefined), tag: (string|undefined), - * icon: (string|undefined), - * requireInteraction: (boolean|undefined), - * actions: (!Array|undefined)}} - * @see http://notifications.spec.whatwg.org/#notificationoptions + * @typedef {{ + * dir: (string|undefined), + * lang: (string|undefined), + * body: (string|undefined), + * tag: (string|undefined), + * image: (string|undefined), + * icon: (string|undefined), + * badge: (string|undefined), + * vibrate: (!Array|undefined), + * timestamp: (number|undefined), + * renotify: (boolean|undefined), + * silent: (boolean|undefined), + * requireInteraction: (boolean|undefined), + * data: (*|undefined), + * actions: (!Array|undefined), + * }} + * TODO(user): change the type of data to a serializable object + * (https://html.spec.whatwg.org/multipage/structured-data.html). + * + * @see http://notifications.spec.whatwg.org/#notification */ var NotificationOptions; @@ -70,26 +84,15 @@ Notification.permission; */ Notification.requestPermission = function(opt_callback) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Notification.prototype.addEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +Notification.prototype.addEventListener = function( + type, listener, opt_options) {}; -/** - * @param {boolean=} opt_useCapture - * @override - * @return {undefined} - */ -Notification.prototype.removeEventListener = - function(type, listener, opt_useCapture) {}; +/** @override */ +Notification.prototype.removeEventListener = function( + type, listener, opt_options) {}; -/** - * @override - * @return {boolean} - */ +/** @override */ Notification.prototype.dispatchEvent = function(evt) {}; /** @@ -121,6 +124,11 @@ Notification.prototype.tag; */ Notification.prototype.replaceId; +/** + * @type {*} + */ +Notification.prototype.data; + /** * The string used by clients to specify the directionality (rtl/ltr) of the * notification. @@ -243,5 +251,8 @@ Window.prototype.webkitNotifications; */ function NotificationEvent(type, opt_eventInitDict) {} -/** @type {?Notification} */ +/** @type {!Notification} */ NotificationEvent.prototype.notification; + +/** @type {string} */ +NotificationEvent.prototype.action; diff --git a/javascript/externs/web/webkit_usercontent.js b/javascript/externs/web/webkit_usercontent.js index 4b28bf69c662..3decf2899d33 100644 --- a/javascript/externs/web/webkit_usercontent.js +++ b/javascript/externs/web/webkit_usercontent.js @@ -50,7 +50,6 @@ UserMessageHandler.prototype.postMessage = function(message) {}; /** - * @type {!WebKitNamespace} - * @const + * @const {!WebKitNamespace} */ var webkit; diff --git a/javascript/externs/web/webstorage.js b/javascript/externs/web/webstorage.js index eee69d258145..796ff61989f4 100644 --- a/javascript/externs/web/webstorage.js +++ b/javascript/externs/web/webstorage.js @@ -15,19 +15,18 @@ */ /** * @fileoverview Definitions for W3C's WebStorage specification. - * This file depends on html5.js. + * This file depends on w3c_dom1.js and w3c_event.js. * @externs */ /** * @interface - * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface + * @see https://www.w3.org/TR/webstorage/#the-storage-interface */ function Storage() {} /** - * @type {number} - * @const + * @const {number} */ Storage.prototype.length; @@ -63,47 +62,71 @@ Storage.prototype.clear = function() {}; /** * @interface - * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute + * @see https://www.w3.org/TR/webstorage/#the-sessionstorage-attribute */ function WindowSessionStorage() {} /** - * @type {Storage} + * @type {!Storage} */ WindowSessionStorage.prototype.sessionStorage; /** * Window implements WindowSessionStorage * - * @type {Storage} + * @type {!Storage} */ Window.prototype.sessionStorage; /** * @interface - * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute + * @see https://www.w3.org/TR/webstorage/#the-localstorage-attribute */ function WindowLocalStorage() {} /** - * @type {Storage} + * @type {!Storage} */ WindowLocalStorage.prototype.localStorage; /** * Window implements WindowLocalStorage * - * @type {Storage} + * @type {!Storage} */ Window.prototype.localStorage; +/** + * @record + * @extends {EventInit} + * @see https://www.w3.org/TR/webstorage/#the-storageevent-interface + */ +function StorageEventInit() {} + +/** @type {undefined|string} */ +StorageEventInit.prototype.key; + +/** @type {undefined|string} */ +StorageEventInit.prototype.oldValue; + +/** @type {undefined|string} */ +StorageEventInit.prototype.newValue; + +/** @type {string} */ +StorageEventInit.prototype.url; + +/** @type {undefined|!Storage} */ +StorageEventInit.prototype.storageArea; + /** * This is the storage event interface. - * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event + * @see https://www.w3.org/TR/webstorage/#the-storage-event * @extends {Event} + * @param {string} type + * @param {!StorageEventInit=} eventInitDict * @constructor */ -function StorageEvent() {} +function StorageEvent(type, eventInitDict) {} /** * @type {string} diff --git a/javascript/externs/web/whatwg_encoding.js b/javascript/externs/web/whatwg_encoding.js index a5d8eca19675..7d55bdd9fdfb 100644 --- a/javascript/externs/web/whatwg_encoding.js +++ b/javascript/externs/web/whatwg_encoding.js @@ -34,7 +34,7 @@ function TextDecoder(encoding, options) {} /** * @param {!BufferSource=} input * @param {?Object=} options - * @return {!string} + * @return {string} * @see https://encoding.spec.whatwg.org/#textdecoder */ TextDecoder.prototype.decode = function decode(input, options) {}; @@ -52,3 +52,10 @@ function TextEncoder(utfLabel) {} * @return {!Uint8Array} */ TextEncoder.prototype.encode = function(input) {}; + +/** + * @param {string} input + * @param {!Uint8Array} uint8Array + * @return {{read: number, written: number}} + */ +TextEncoder.prototype.encodeInto = function(input, uint8Array) {}; diff --git a/javascript/externs/web/window.js b/javascript/externs/web/window.js index 83b860866da6..f6b73546840a 100644 --- a/javascript/externs/web/window.js +++ b/javascript/externs/web/window.js @@ -30,92 +30,61 @@ * @see https://developer.mozilla.org/en/DOM/window.top * @const */ -var top; - -/** - * @type {!Navigator} - * @see https://developer.mozilla.org/en/DOM/window.navigator - * @const - */ -var navigator; - -/** - * @type {!HTMLDocument} - * @see https://developer.mozilla.org/en/DOM/window.document - * @const - */ -var document; - -/** - * @type {!Location} - * @see https://developer.mozilla.org/en/DOM/window.location - * @const - * @suppress {duplicate} - * @implicitCast - */ -var location; - -/** - * @type {!Screen} - * @see https://developer.mozilla.org/En/DOM/window.screen - * @const - */ -var screen; - + var top; + + /** + * @type {!Navigator} + * @see https://developer.mozilla.org/en/DOM/window.navigator + * @const + */ + var navigator; + + /** + * @type {!HTMLDocument} + * @see https://developer.mozilla.org/en/DOM/window.document + * @const + */ + var document; + + /** + * @type {!Location} + * @see https://developer.mozilla.org/en/DOM/window.location + * @const + * @suppress {duplicate} + * @implicitCast + */ + var location; + + /** + * @type {!Screen} + * @see https://developer.mozilla.org/En/DOM/window.screen + * @const + */ + var screen; + + /** + * @type {!Window} + * @see https://developer.mozilla.org/En/DOM/Window.self + * @const + */ + var self; /** * @type {!Window} - * @see https://developer.mozilla.org/En/DOM/Window.self - * @const - */ -var self; - -// Magic functions for Firefox's LiveConnect. -// We'll probably never use these in practice. But redefining them -// will fire up the JVM, so we want to reserve the symbol names. - -/** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaArray - */ -var JavaArray; - -/** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaClass - */ -var JavaClass; - -// We just ripped this from the FF source; it doesn't appear to be -// publicly documented. -var JavaMember; - -/** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaObject - */ -var JavaObject; - -/** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaPackage + * @see https://developer.mozilla.org/en/DOM/window */ -var JavaPackage; +var window; /** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Packages + * @const {boolean} + * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/isSecureContext */ -var Packages; +var isSecureContext; /** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/java + * @const {!VisualViewport} + * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/visualViewport */ -var java; - -/** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/netscape - */ -var netscape; - -/** - * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/sun - */ -var sun; +var visualViewport; /** * @param {*} message @@ -125,7 +94,7 @@ var sun; function alert(message) {} /** - * @param {number|undefined|null} immediateID + * @param {number=} immediateID * @see https://developer.mozilla.org/en-US/docs/DOM/window.clearImmediate * @see http://msdn.microsoft.com/en-us/library/ie/hh924825(v=vs.85).aspx * @return {undefined} @@ -133,7 +102,7 @@ function alert(message) {} function clearImmediate(immediateID) {} /** - * @param {number|undefined?} intervalID + * @param {?number|undefined} intervalID * @see https://developer.mozilla.org/en/DOM/window.clearInterval * @suppress {duplicate} * @return {undefined} @@ -141,7 +110,7 @@ function clearImmediate(immediateID) {} function clearInterval(intervalID) {} /** - * @param {number|undefined?} timeoutID + * @param {?number|undefined} timeoutID * @see https://developer.mozilla.org/en/DOM/window.clearTimeout * @suppress {duplicate} * @return {undefined} @@ -172,30 +141,32 @@ function prompt(message, opt_value) {} /** * @param {function()} callback + * @param {...?} callbackParams * @return {number} * @see https://developer.mozilla.org/en-US/docs/DOM/window.setImmediate * @see http://msdn.microsoft.com/en-us/library/ie/hh773176(v=vs.85).aspx */ -function setImmediate(callback) {} +function setImmediate(callback, callbackParams) {} /** - * @param {Function|string} callback + * @param {Function|!TrustedScript|string} callback * @param {number=} opt_delay + * @param {...?} callbackParams * @return {number} * @see https://developer.mozilla.org/en/DOM/window.setInterval * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers */ -function setInterval(callback, opt_delay) {} +function setInterval(callback, opt_delay, callbackParams) {} /** - * @param {Function|string} callback + * @param {Function|!TrustedScript|string} callback * @param {number=} opt_delay - * @param {...*} var_args + * @param {...*} callbackParams * @return {number} * @see https://developer.mozilla.org/en/DOM/window.setTimeout * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers */ -function setTimeout(callback, opt_delay, var_args) {} +function setTimeout(callback, opt_delay, callbackParams) {} /** * Returns whether the object has a property with the specified name. @@ -206,3 +177,11 @@ function setTimeout(callback, opt_delay, var_args) {} * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty */ function hasOwnProperty (propertyName) {} + +/** + * @param {function()} callback + * @return {undefined} + * @see https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask + * @see https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing + */ +function queueMicrotask(callback) {}