diff options
Diffstat (limited to 'dom/manifest/ValueExtractor.jsm')
-rw-r--r-- | dom/manifest/ValueExtractor.jsm | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/dom/manifest/ValueExtractor.jsm b/dom/manifest/ValueExtractor.jsm new file mode 100644 index 000000000..f3dd25905 --- /dev/null +++ b/dom/manifest/ValueExtractor.jsm @@ -0,0 +1,65 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +/* + * Helper functions extract values from manifest members + * and reports conformance violations. + */ +/*globals Components*/ +'use strict'; +const { + classes: Cc, + interfaces: Ci +} = Components; + +function ValueExtractor(aConsole, aBundle) { + this.console = aConsole; + this.domBundle = aBundle; +} + +ValueExtractor.prototype = { + // This function takes a 'spec' object and destructures + // it to extract a value. If the value is of th wrong type, it + // warns the developer and returns undefined. + // expectType: is the type of a JS primitive (string, number, etc.) + // object: is the object from which to extract the value. + // objectName: string used to construct the developer warning. + // property: the name of the property being extracted. + // trim: boolean, if the value should be trimmed (used by string type). + extractValue({expectedType, object, objectName, property, trim}) { + const value = object[property]; + const isArray = Array.isArray(value); + // We need to special-case "array", as it's not a JS primitive. + const type = (isArray) ? 'array' : typeof value; + if (type !== expectedType) { + if (type !== 'undefined') { + this.console.warn(this.domBundle.formatStringFromName("ManifestInvalidType", + [objectName, property, expectedType], + 3)); + } + return undefined; + } + // Trim string and returned undefined if the empty string. + const shouldTrim = expectedType === 'string' && value && trim; + if (shouldTrim) { + return value.trim() || undefined; + } + return value; + }, + extractColorValue(spec) { + const value = this.extractValue(spec); + const DOMUtils = Cc['@mozilla.org/inspector/dom-utils;1'] + .getService(Ci.inIDOMUtils); + let color; + if (DOMUtils.isValidCSSColor(value)) { + color = value; + } else if (value) { + this.console.warn(this.domBundle.formatStringFromName("ManifestInvalidCSSColor", + [spec.property, value], + 2)); + } + return color; + } +}; +this.ValueExtractor = ValueExtractor; // jshint ignore:line +this.EXPORTED_SYMBOLS = ['ValueExtractor']; // jshint ignore:line |