Files
shaka-player/build/conformance.textproto
T
Joey Parrish aeec1efdb6 chore: reformat conformance proto
In an internal Google build environment, the closure conformance proto
needed to be reformatted.  Rather than do that each time the code is
synced to that environment, do it here in the upstream repo.

Change-Id: I3160a9a13df1c9b60ec1fed38aabe571b8431b42
2022-01-10 15:05:51 -08:00

323 lines
9.5 KiB
Protocol Buffer Text Format

# Copyright 2016 Google LLC
#
# 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.
# Conformance requirements:
# See: https://github.com/google/closure-compiler/wiki/JS-Conformance-Framework
# Disallow throwing non-Error types.
requirement: {
type: CUSTOM
java_class: "com.google.javascript.jscomp.ConformanceRules$BanThrowOfNonErrorTypes"
error_message:
"Throwing non-Error types or Error itself is not allowed; "
"throw shaka.util.Error instead."
whitelist_regexp: "test/"
whitelist_regexp: "node_modules/"
}
requirement: {
type: BANNED_CODE_PATTERN
value: "function template() { throw new Error(); }"
error_message:
"Throwing non-Error types or Error itself is not allowed; "
"throw shaka.util.Error instead."
whitelist_regexp: "test/"
whitelist_regexp: "node_modules/"
}
# Ban accessing members of unknown types.
requirement: {
type: CUSTOM
java_class:
"com.google.javascript.jscomp.ConformanceRules$"
"BanUnknownTypedClassPropsReferences"
error_message:
"Using properties of unknown types is not allowed; add an "
"explicit type to the variable."
whitelist_regexp: "demo/"
}
requirement {
type: CUSTOM
java_class: "com.google.javascript.jscomp.ConformanceRules$BanUnknownThis"
error_message:
"Failed to infer type of \"this\"; "
"please be explicit or use bind!"
# Until we can get this rule updated for ES6 static methods
# (https://github.com/google/closure-compiler/issues/2880):
whitelist_regexp: "test/test/util/canned_idb.js"
whitelist_regexp: "test/assets/assets_integration.js"
}
# Reject unresolved types.
requirement {
type: CUSTOM
java_class: "com.google.javascript.jscomp.ConformanceRules$BanUnresolvedType"
error_message: "Failed to resolve type!"
}
# Reject global variables.
requirement {
type: CUSTOM
java_class: "com.google.javascript.jscomp.ConformanceRules$BanGlobalVars"
error_message: "Global variables are not allowed!"
whitelist_regexp: "demo/"
whitelist_regexp: "test/"
whitelist_regexp: "node_modules/"
}
# Disallow using "!" on nullable numbers in boolean assignment.
# Note: we can't use the pattern "var b = !n" because it causes too many
# false positives.
requirement: {
type: BANNED_CODE_PATTERN
value:
"/** @param {boolean} b @param {?number} n */ "
"function template(b, n) { b = !n; }"
error_message:
"Using \"!\" on nullable numbers in boolean assignment "
"is not allowed; use an explicit comparison instead."
whitelist_regexp: "node_modules/"
}
requirement: {
type: BANNED_CODE_PATTERN
value:
"/** @param {*} a"
" @param {(number|string|boolean|null|undefined)} x */"
"function template(a, x) { expect(a).toEqual(x); }"
value:
"/** @param {*} a"
" @param {(number|string|boolean|null|undefined)} x */"
"function template(a, x) { expect(a).not.toEqual(x); }"
error_message: "Use expect.toBe for primitives"
}
requirement: {
type: BANNED_CODE_PATTERN
value:
"/** @param {BufferSource} a */"
"function template(a) { new Uint8Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Int8Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Uint8ClampedArray(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Unt16Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Int16Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Uint32Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Int32Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Float32Array(a) }"
value:
"/** @param {BufferSource} a */"
"function template(a) { new Float64Array(a) }"
error_message: "Use shaka.util.BufferUtils.view* instead."
whitelist_regexp: "lib/util/buffer_utils.js"
}
requirement: {
type: BANNED_CODE_PATTERN
value: "function template () { new Date().getTime() }"
error_message: "Use Date.now() instead."
}
# Disallow console logging.
requirement: {
type: BANNED_PROPERTY_CALL
value: "Console.prototype.debug"
value: "Console.prototype.log"
value: "Console.prototype.info"
value: "Console.prototype.warn"
value: "Console.prototype.error"
error_message:
"Using \"console\" is not allowed; "
"use shaka.log instead"
whitelist_regexp: "demo/"
whitelist_regexp: "lib/debug/log.js"
whitelist_regexp: "test/test/boot.js"
whitelist_regexp: "node_modules/"
whitelist_regexp: "[synthetic:es6/promise/promise]"
}
# Disallow querySelector and querySelectorAll since they aren't supported on
# Shaka Player Embedded.
requirement: {
type: BANNED_PROPERTY_CALL
value: "Element.prototype.querySelector"
value: "Document.prototype.querySelector"
value: "Element.prototype.querySelectorAll"
value: "Document.prototype.querySelectorAll"
error_message: "Use getElementsByTagName"
whitelist_regexp: "demo/"
whitelist_regexp: "ui/"
whitelist_regexp: "test/"
whitelist_regexp: "node_modules/"
}
# Disallow Element.children.
requirement: {
type: BANNED_PROPERTY
value: "Element.prototype.children"
error_message:
"Using \"Element.children\" is not allowed; "
"use Node.childNodes instead"
}
requirement: {
type: BANNED_PROPERTY
value: "DataView.prototype.buffer"
value: "TypedArray.prototype.buffer"
error_message:
"Using \"TypedArray.buffer\" is not safe since it doesn\'t "
"handle sub-arrays"
whitelist_regexp: "lib/util/buffer_utils.js"
whitelist_regexp: "lib/util/object_utils.js"
whitelist_regexp: "test/util/buffer_utils_unit.js"
}
# Disallow Element.innerHTML and outerHTML.
requirement: {
type: BANNED_PROPERTY
value: "Element.prototype.innerHTML"
value: "Element.prototype.outerHTML"
error_message:
"Using \"Element.innerHTML\" or \"Element.outerHTML\" is not "
"allowed due to security concerns; use textContent, "
"appendChild, or removeChild instead"
whitelist_regexp: "test/test/util/util.js"
}
# Disallow DOMRect.x and y.
requirement: {
type: BANNED_PROPERTY
value: "DOMRect.prototype.x"
value: "DOMRect.prototype.y"
error_message:
"DOMRect \"x\" and \"y\" are not supported on legacy Edge; "
"use \"left\" and \"top\" instead."
# The built-in set and map polyfills trigger this ban somehow.
whitelist_regexp: "synthetic:es6/"
}
# Disallow fdescribe.
requirement: {
type: BANNED_NAME
value: "fdescribe"
error_message: "Using \"fdescribe\" is not allowed"
}
# Disallow fit.
requirement: {
type: BANNED_NAME
value: "fit"
error_message: "Using \"fit\" is not allowed"
whitelist_regexp: "test/player_external.js"
}
# Disallow setInterval.
requirement: {
type: BANNED_NAME
value: "window.setInterval"
error_message:
"setInterval has several drawbacks, most of "
"all difficulty canceling and surprising behavior "
"when the device goes to sleep. Please use "
"shaka.util.Timer instead."
whitelist_regexp: "demo/"
whitelist_regexp: "test/"
}
requirement: {
type: BANNED_NAME
value: "setInterval"
error_message:
"setInterval has several drawbacks, most of "
"all difficulty canceling and surprising behavior "
"when the device goes to sleep. Please use "
"shaka.util.Timer instead."
whitelist_regexp: "demo/"
whitelist_regexp: "test/"
}
# Disallow setTimeout.
requirement: {
type: BANNED_NAME
value: "window.setTimeout"
error_message:
"setTimeout has several drawbacks, most of "
"all difficulty canceling it. Please use "
"shaka.util.Timer instead."
whitelist_regexp: "demo/"
whitelist_regexp: "test/"
whitelist_regexp: "lib/util/delayed_tick.js"
}
requirement: {
type: BANNED_NAME
value: "setTimeout"
error_message:
"setTimeout has several drawbacks, most of "
"all difficulty canceling it. Please use "
"shaka.util.Timer instead."
whitelist_regexp: "demo/"
whitelist_regexp: "test/"
}
# Disallow eval, except when testing for modern JS syntax in demo
requirement: {
type: BANNED_NAME
value: "window.eval"
error_message: "Using \"eval\" is not allowed"
whitelist_regexp: "demo/demo_utils.js"
whitelist_regexp: "node_modules/google-closure-library/closure/goog/base.js"
whitelist_regexp: "test/util/functional_unit.js"
}
requirement: {
type: BANNED_NAME
value: "eval"
error_message: "Using \"eval\" is not allowed"
whitelist_regexp: "demo/demo_utils.js"
whitelist_regexp: "node_modules/google-closure-library/closure/goog/base.js"
whitelist_regexp: "test/util/functional_unit.js"
}
# Disallow ES6 methods.
requirement: {
type: BANNED_PROPERTY
value: "ArrayBuffer.prototype.slice"
error_message:
"ArrayBuffer.slice is not allowed because it "
"is not supported on Tizen 2016"
}
# Disallow the general use of fetch, which is not available on all supported
# platforms.
requirement: {
type: BANNED_NAME_CALL
value: "fetch"
value: "window.fetch"
error_message:
"Using \"fetch\" directly is not allowed; "
"use shaka.test.Util.fetch or NetworkingEngine.request "
"instead."
whitelist_regexp: "lib/net/http_fetch_plugin.js"
}