Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1477)

Unified Diff: third_party/WebKit/Source/devtools/front_end/Runtime.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/Runtime.js
diff --git a/third_party/WebKit/Source/devtools/front_end/Runtime.js b/third_party/WebKit/Source/devtools/front_end/Runtime.js
index ccf619dbd8e2a7b278fea231a373046e0b4ad00f..c3185964f528aa003750b1b68fc12a9cf7395ebe 100644
--- a/third_party/WebKit/Source/devtools/front_end/Runtime.js
+++ b/third_party/WebKit/Source/devtools/front_end/Runtime.js
@@ -27,7 +27,6 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
// This gets all concatenated module descriptors in the release mode.
var allDescriptors = [];
var applicationDescriptor;
@@ -36,19 +35,22 @@ var _loadedScripts = {};
// FIXME: This is a workaround to force Closure compiler provide
// the standard ES6 runtime for all modules. This should be removed
// once Closure provides standard externs for Map et al.
-for (var k of []) {}
+for (var k of []) {
+}
(function() {
- var baseUrl = self.location ? self.location.origin + self.location.pathname : "";
- self._importScriptPathPrefix = baseUrl.substring(0, baseUrl.lastIndexOf("/") + 1);
+ var baseUrl = self.location ? self.location.origin + self.location.pathname : '';
+ self._importScriptPathPrefix = baseUrl.substring(0, baseUrl.lastIndexOf('/') + 1);
})();
/**
- * @constructor
- * @param {!Array.<!Runtime.ModuleDescriptor>} descriptors
+ * @unrestricted
*/
-function Runtime(descriptors)
-{
+var Runtime = class {
+ /**
+ * @param {!Array.<!Runtime.ModuleDescriptor>} descriptors
+ */
+ constructor(descriptors) {
/** @type {!Array<!Runtime.Module>} */
this._modules = [];
/** @type {!Object<string, !Runtime.Module>} */
@@ -61,83 +63,79 @@ function Runtime(descriptors)
this._descriptorsMap = {};
for (var i = 0; i < descriptors.length; ++i)
- this._registerModule(descriptors[i]);
-}
-
-/**
- * @param {string} url
- * @return {!Promise.<string>}
- */
-Runtime.loadResourcePromise = function(url)
-{
+ this._registerModule(descriptors[i]);
+ }
+
+ /**
+ * @param {string} url
+ * @return {!Promise.<string>}
+ */
+ static loadResourcePromise(url) {
return new Promise(load);
/**
* @param {function(?)} fulfill
* @param {function(*)} reject
*/
- function load(fulfill, reject)
- {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", url, true);
- xhr.onreadystatechange = onreadystatechange;
-
- /**
- * @param {Event} e
- */
- function onreadystatechange(e)
- {
- if (xhr.readyState !== XMLHttpRequest.DONE)
- return;
-
- if ([0, 200, 304].indexOf(xhr.status) === -1) // Testing harness file:/// results in 0.
- reject(new Error("While loading from url " + url + " server responded with a status of " + xhr.status));
- else
- fulfill(e.target.response);
- }
- xhr.send(null);
+ function load(fulfill, reject) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, true);
+ xhr.onreadystatechange = onreadystatechange;
+
+ /**
+ * @param {Event} e
+ */
+ function onreadystatechange(e) {
+ if (xhr.readyState !== XMLHttpRequest.DONE)
+ return;
+
+ if ([0, 200, 304].indexOf(xhr.status) === -1) // Testing harness file:/// results in 0.
+ reject(new Error('While loading from url ' + url + ' server responded with a status of ' + xhr.status));
+ else
+ fulfill(e.target.response);
+ }
+ xhr.send(null);
}
-};
+ }
-/**
- * http://tools.ietf.org/html/rfc3986#section-5.2.4
- * @param {string} path
- * @return {string}
- */
-Runtime.normalizePath = function(path)
-{
- if (path.indexOf("..") === -1 && path.indexOf(".") === -1)
- return path;
+ /**
+ * http://tools.ietf.org/html/rfc3986#section-5.2.4
+ * @param {string} path
+ * @return {string}
+ */
+ static normalizePath(path) {
+ if (path.indexOf('..') === -1 && path.indexOf('.') === -1)
+ return path;
var normalizedSegments = [];
- var segments = path.split("/");
+ var segments = path.split('/');
for (var i = 0; i < segments.length; i++) {
- var segment = segments[i];
- if (segment === ".")
- continue;
- else if (segment === "..")
- normalizedSegments.pop();
- else if (segment)
- normalizedSegments.push(segment);
+ var segment = segments[i];
+ if (segment === '.')
+ continue;
+ else if (segment === '..')
+ normalizedSegments.pop();
+ else if (segment)
+ normalizedSegments.push(segment);
}
- var normalizedPath = normalizedSegments.join("/");
- if (normalizedPath[normalizedPath.length - 1] === "/")
- return normalizedPath;
- if (path[0] === "/" && normalizedPath)
- normalizedPath = "/" + normalizedPath;
- if ((path[path.length - 1] === "/") || (segments[segments.length - 1] === ".") || (segments[segments.length - 1] === ".."))
- normalizedPath = normalizedPath + "/";
+ var normalizedPath = normalizedSegments.join('/');
+ if (normalizedPath[normalizedPath.length - 1] === '/')
+ return normalizedPath;
+ if (path[0] === '/' && normalizedPath)
+ normalizedPath = '/' + normalizedPath;
+ if ((path[path.length - 1] === '/') || (segments[segments.length - 1] === '.') ||
+ (segments[segments.length - 1] === '..'))
+ normalizedPath = normalizedPath + '/';
return normalizedPath;
-};
-
-/**
- * @param {!Array.<string>} scriptNames
- * @param {string=} base
- * @return {!Promise.<undefined>}
- */
-Runtime._loadScriptsPromise = function(scriptNames, base)
-{
+ }
+
+ /**
+ * @param {!Array.<string>} scriptNames
+ * @param {string=} base
+ * @return {!Promise.<undefined>}
+ */
+ static _loadScriptsPromise(scriptNames, base) {
/** @type {!Array<!Promise<undefined>>} */
var promises = [];
/** @type {!Array<string>} */
@@ -145,19 +143,20 @@ Runtime._loadScriptsPromise = function(scriptNames, base)
var sources = new Array(scriptNames.length);
var scriptToEval = 0;
for (var i = 0; i < scriptNames.length; ++i) {
- var scriptName = scriptNames[i];
- var sourceURL = (base || self._importScriptPathPrefix) + scriptName;
-
- var schemaIndex = sourceURL.indexOf("://") + 3;
- var pathIndex = sourceURL.indexOf("/", schemaIndex);
- if (pathIndex === -1)
- pathIndex = sourceURL.length;
- sourceURL = sourceURL.substring(0, pathIndex) + Runtime.normalizePath(sourceURL.substring(pathIndex));
-
- if (_loadedScripts[sourceURL])
- continue;
- urls.push(sourceURL);
- promises.push(Runtime.loadResourcePromise(sourceURL).then(scriptSourceLoaded.bind(null, i), scriptSourceLoaded.bind(null, i, undefined)));
+ var scriptName = scriptNames[i];
+ var sourceURL = (base || self._importScriptPathPrefix) + scriptName;
+
+ var schemaIndex = sourceURL.indexOf('://') + 3;
+ var pathIndex = sourceURL.indexOf('/', schemaIndex);
+ if (pathIndex === -1)
+ pathIndex = sourceURL.length;
+ sourceURL = sourceURL.substring(0, pathIndex) + Runtime.normalizePath(sourceURL.substring(pathIndex));
+
+ if (_loadedScripts[sourceURL])
+ continue;
+ urls.push(sourceURL);
+ promises.push(Runtime.loadResourcePromise(sourceURL).then(
+ scriptSourceLoaded.bind(null, i), scriptSourceLoaded.bind(null, i, undefined)));
}
return Promise.all(promises).then(undefined);
@@ -165,88 +164,71 @@ Runtime._loadScriptsPromise = function(scriptNames, base)
* @param {number} scriptNumber
* @param {string=} scriptSource
*/
- function scriptSourceLoaded(scriptNumber, scriptSource)
- {
- sources[scriptNumber] = scriptSource || "";
- // Eval scripts as fast as possible.
- while (typeof sources[scriptToEval] !== "undefined") {
- evaluateScript(urls[scriptToEval], sources[scriptToEval]);
- ++scriptToEval;
- }
+ function scriptSourceLoaded(scriptNumber, scriptSource) {
+ sources[scriptNumber] = scriptSource || '';
+ // Eval scripts as fast as possible.
+ while (typeof sources[scriptToEval] !== 'undefined') {
+ evaluateScript(urls[scriptToEval], sources[scriptToEval]);
+ ++scriptToEval;
+ }
}
/**
* @param {string} sourceURL
* @param {string=} scriptSource
*/
- function evaluateScript(sourceURL, scriptSource)
- {
- _loadedScripts[sourceURL] = true;
- if (!scriptSource) {
- // Do not reject, as this is normal in the hosted mode.
- console.error("Empty response arrived for script '" + sourceURL + "'");
- return;
- }
- self.eval(scriptSource + "\n//# sourceURL=" + sourceURL);
+ function evaluateScript(sourceURL, scriptSource) {
+ _loadedScripts[sourceURL] = true;
+ if (!scriptSource) {
+ // Do not reject, as this is normal in the hosted mode.
+ console.error('Empty response arrived for script \'' + sourceURL + '\'');
+ return;
+ }
+ self.eval(scriptSource + '\n//# sourceURL=' + sourceURL);
}
-};
-
-/**
- * @type {!Object.<string, string>}
- */
-Runtime._queryParamsObject = { __proto__: null };
+ }
-Runtime._instanceSymbol = Symbol("instance");
-Runtime._extensionSymbol = Symbol("extension");
-
-/**
- * @type {!Object.<string, string>}
- */
-Runtime.cachedResources = { __proto__: null };
-
-/**
- * @param {string} url
- * @param {boolean} appendSourceURL
- * @return {!Promise<undefined>}
- */
-Runtime.loadResourceIntoCache = function(url, appendSourceURL)
-{
- return Runtime.loadResourcePromise(url).then(cacheResource.bind(this, url), cacheResource.bind(this, url, undefined));
+ /**
+ * @param {string} url
+ * @param {boolean} appendSourceURL
+ * @return {!Promise<undefined>}
+ */
+ static loadResourceIntoCache(url, appendSourceURL) {
+ return Runtime.loadResourcePromise(url).then(
+ cacheResource.bind(this, url), cacheResource.bind(this, url, undefined));
/**
* @param {string} path
* @param {string=} content
*/
- function cacheResource(path, content)
- {
- if (!content) {
- console.error("Failed to load resource: " + path);
- return;
- }
- var sourceURL = appendSourceURL ? Runtime.resolveSourceURL(path) : "";
- Runtime.cachedResources[path] = content + sourceURL;
+ function cacheResource(path, content) {
+ if (!content) {
+ console.error('Failed to load resource: ' + path);
+ return;
+ }
+ var sourceURL = appendSourceURL ? Runtime.resolveSourceURL(path) : '';
+ Runtime.cachedResources[path] = content + sourceURL;
}
-};
+ }
-/**
- * @param {string} appName
- * @return {!Promise.<undefined>}
- */
-Runtime.startApplication = function(appName)
-{
- console.timeStamp("Runtime.startApplication");
+ /**
+ * @param {string} appName
+ * @return {!Promise.<undefined>}
+ */
+ static startApplication(appName) {
+ console.timeStamp('Runtime.startApplication');
var allDescriptorsByName = {};
for (var i = 0; i < allDescriptors.length; ++i) {
- var d = allDescriptors[i];
- allDescriptorsByName[d["name"]] = d;
+ var d = allDescriptors[i];
+ allDescriptorsByName[d['name']] = d;
}
var applicationPromise;
if (applicationDescriptor)
- applicationPromise = Promise.resolve(applicationDescriptor);
+ applicationPromise = Promise.resolve(applicationDescriptor);
else
- applicationPromise = Runtime.loadResourcePromise(appName + ".json").then(JSON.parse.bind(JSON));
+ applicationPromise = Runtime.loadResourcePromise(appName + '.json').then(JSON.parse.bind(JSON));
return applicationPromise.then(parseModuleDescriptors);
@@ -254,348 +236,378 @@ Runtime.startApplication = function(appName)
* @param {!{modules: !Array.<!Object>, has_html: boolean}} appDescriptor
* @return {!Promise.<undefined>}
*/
- function parseModuleDescriptors(appDescriptor)
- {
- var configuration = appDescriptor.modules;
- var moduleJSONPromises = [];
- var coreModuleNames = [];
- for (var i = 0; i < configuration.length; ++i) {
- var descriptor = configuration[i];
- var name = descriptor["name"];
- var moduleJSON = allDescriptorsByName[name];
- if (moduleJSON)
- moduleJSONPromises.push(Promise.resolve(moduleJSON));
- else
- moduleJSONPromises.push(Runtime.loadResourcePromise(name + "/module.json").then(JSON.parse.bind(JSON)));
- if (descriptor["type"] === "autostart")
- coreModuleNames.push(name);
- }
-
- return Promise.all(moduleJSONPromises).then(instantiateRuntime);
-
- /**
- * @param {!Array.<!Object>} moduleDescriptors
- * @return {!Promise.<undefined>}
- */
- function instantiateRuntime(moduleDescriptors)
- {
- for (var i = 0; i < moduleDescriptors.length; ++i) {
- moduleDescriptors[i].name = configuration[i]["name"];
- moduleDescriptors[i].condition = configuration[i]["condition"];
- moduleDescriptors[i].remote = configuration[i]["type"] === "remote";
- }
- self.runtime = new Runtime(moduleDescriptors);
- if (coreModuleNames)
- return /** @type {!Promise<undefined>} */ (self.runtime._loadAutoStartModules(coreModuleNames));
- return Promise.resolve();
+ function parseModuleDescriptors(appDescriptor) {
+ var configuration = appDescriptor.modules;
+ var moduleJSONPromises = [];
+ var coreModuleNames = [];
+ for (var i = 0; i < configuration.length; ++i) {
+ var descriptor = configuration[i];
+ var name = descriptor['name'];
+ var moduleJSON = allDescriptorsByName[name];
+ if (moduleJSON)
+ moduleJSONPromises.push(Promise.resolve(moduleJSON));
+ else
+ moduleJSONPromises.push(Runtime.loadResourcePromise(name + '/module.json').then(JSON.parse.bind(JSON)));
+ if (descriptor['type'] === 'autostart')
+ coreModuleNames.push(name);
+ }
+
+ return Promise.all(moduleJSONPromises).then(instantiateRuntime);
+
+ /**
+ * @param {!Array.<!Object>} moduleDescriptors
+ * @return {!Promise.<undefined>}
+ */
+ function instantiateRuntime(moduleDescriptors) {
+ for (var i = 0; i < moduleDescriptors.length; ++i) {
+ moduleDescriptors[i].name = configuration[i]['name'];
+ moduleDescriptors[i].condition = configuration[i]['condition'];
+ moduleDescriptors[i].remote = configuration[i]['type'] === 'remote';
}
+ self.runtime = new Runtime(moduleDescriptors);
+ if (coreModuleNames)
+ return /** @type {!Promise<undefined>} */ (self.runtime._loadAutoStartModules(coreModuleNames));
+ return Promise.resolve();
+ }
}
-};
+ }
-/**
- * @param {string} appName
- * @return {!Promise.<undefined>}
- */
-Runtime.startWorker = function(appName)
-{
+ /**
+ * @param {string} appName
+ * @return {!Promise.<undefined>}
+ */
+ static startWorker(appName) {
return Runtime.startApplication(appName).then(sendWorkerReady);
- function sendWorkerReady()
- {
- self.postMessage("workerReady");
+ function sendWorkerReady() {
+ self.postMessage('workerReady');
}
-};
+ }
-/** @type {?function(!MessagePort)} */
-Runtime._sharedWorkerNewPortCallback = null;
-/** @type {!Array<!MessagePort>} */
-Runtime._sharedWorkerConnectedPorts = [];
-
-/**
- * @param {string} appName
- */
-Runtime.startSharedWorker = function(appName)
-{
+ /**
+ * @param {string} appName
+ */
+ static startSharedWorker(appName) {
var startPromise = Runtime.startApplication(appName);
/**
* @param {!MessageEvent} event
*/
- self.onconnect = function(event)
- {
- var newPort = /** @type {!MessagePort} */ (event.ports[0]);
- startPromise.then(sendWorkerReadyAndContinue);
-
- function sendWorkerReadyAndContinue()
- {
- newPort.postMessage("workerReady");
- if (Runtime._sharedWorkerNewPortCallback)
- Runtime._sharedWorkerNewPortCallback.call(null, newPort);
- else
- Runtime._sharedWorkerConnectedPorts.push(newPort);
- }
+ self.onconnect = function(event) {
+ var newPort = /** @type {!MessagePort} */ (event.ports[0]);
+ startPromise.then(sendWorkerReadyAndContinue);
+
+ function sendWorkerReadyAndContinue() {
+ newPort.postMessage('workerReady');
+ if (Runtime._sharedWorkerNewPortCallback)
+ Runtime._sharedWorkerNewPortCallback.call(null, newPort);
+ else
+ Runtime._sharedWorkerConnectedPorts.push(newPort);
+ }
};
-};
+ }
-/**
- * @param {function(!MessagePort)} callback
- */
-Runtime.setSharedWorkerNewPortCallback = function(callback)
-{
+ /**
+ * @param {function(!MessagePort)} callback
+ */
+ static setSharedWorkerNewPortCallback(callback) {
Runtime._sharedWorkerNewPortCallback = callback;
while (Runtime._sharedWorkerConnectedPorts.length) {
- var port = Runtime._sharedWorkerConnectedPorts.shift();
- callback.call(null, port);
+ var port = Runtime._sharedWorkerConnectedPorts.shift();
+ callback.call(null, port);
}
-};
+ }
-/**
- * @param {string} name
- * @return {?string}
- */
-Runtime.queryParam = function(name)
-{
+ /**
+ * @param {string} name
+ * @return {?string}
+ */
+ static queryParam(name) {
return Runtime._queryParamsObject[name] || null;
-};
+ }
-/**
- * @return {!Object}
- */
-Runtime._experimentsSetting = function()
-{
+ /**
+ * @return {!Object}
+ */
+ static _experimentsSetting() {
try {
- return /** @type {!Object} */ (JSON.parse(self.localStorage && self.localStorage["experiments"] ? self.localStorage["experiments"] : "{}"));
+ return /** @type {!Object} */ (
+ JSON.parse(self.localStorage && self.localStorage['experiments'] ? self.localStorage['experiments'] : '{}'));
} catch (e) {
- console.error("Failed to parse localStorage['experiments']");
- return {};
+ console.error('Failed to parse localStorage[\'experiments\']');
+ return {};
}
-};
+ }
-Runtime._console = console;
-Runtime._originalAssert = console.assert;
-Runtime._assert = function(value, message)
-{
+ static _assert(value, message) {
if (value)
- return;
- Runtime._originalAssert.call(Runtime._console, value, message + " " + new Error().stack);
-};
-
-Runtime._platform = "";
-
-/**
- * @param {string} platform
- */
-Runtime.setPlatform = function(platform)
-{
+ return;
+ Runtime._originalAssert.call(Runtime._console, value, message + ' ' + new Error().stack);
+ }
+
+ /**
+ * @param {string} platform
+ */
+ static setPlatform(platform) {
Runtime._platform = platform;
-};
+ }
+
+ /**
+ * @param {!Object} descriptor
+ * @return {boolean}
+ */
+ static _isDescriptorEnabled(descriptor) {
+ var activatorExperiment = descriptor['experiment'];
+ if (activatorExperiment === '*')
+ return Runtime.experiments.supportEnabled();
+ if (activatorExperiment && activatorExperiment.startsWith('!') &&
+ Runtime.experiments.isEnabled(activatorExperiment.substring(1)))
+ return false;
+ if (activatorExperiment && !activatorExperiment.startsWith('!') &&
+ !Runtime.experiments.isEnabled(activatorExperiment))
+ return false;
+ var condition = descriptor['condition'];
+ if (condition && !condition.startsWith('!') && !Runtime.queryParam(condition))
+ return false;
+ if (condition && condition.startsWith('!') && Runtime.queryParam(condition.substring(1)))
+ return false;
+ return true;
+ }
-Runtime.prototype = {
- useTestBase: function()
- {
- Runtime._remoteBase = "http://localhost:8000/inspector-sources/";
- if (Runtime.queryParam("debugFrontend"))
- Runtime._remoteBase += "debug/";
- },
+ /**
+ * @param {string} path
+ * @return {string}
+ */
+ static resolveSourceURL(path) {
+ var sourceURL = self.location.href;
+ if (self.location.search)
+ sourceURL = sourceURL.replace(self.location.search, '');
+ sourceURL = sourceURL.substring(0, sourceURL.lastIndexOf('/') + 1) + path;
+ return '\n/*# sourceURL=' + sourceURL + ' */';
+ }
+
+ useTestBase() {
+ Runtime._remoteBase = 'http://localhost:8000/inspector-sources/';
+ if (Runtime.queryParam('debugFrontend'))
+ Runtime._remoteBase += 'debug/';
+ }
+
+ /**
+ * @param {!Runtime.ModuleDescriptor} descriptor
+ */
+ _registerModule(descriptor) {
+ var module = new Runtime.Module(this, descriptor);
+ this._modules.push(module);
+ this._modulesMap[descriptor['name']] = module;
+ }
+
+ /**
+ * @param {string} moduleName
+ * @return {!Promise.<undefined>}
+ */
+ loadModulePromise(moduleName) {
+ return this._modulesMap[moduleName]._loadPromise();
+ }
+
+ /**
+ * @param {!Array.<string>} moduleNames
+ * @return {!Promise.<!Array.<*>>}
+ */
+ _loadAutoStartModules(moduleNames) {
+ var promises = [];
+ for (var i = 0; i < moduleNames.length; ++i)
+ promises.push(this.loadModulePromise(moduleNames[i]));
+ return Promise.all(promises);
+ }
+
+ /**
+ * @param {!Runtime.Extension} extension
+ * @param {?function(function(new:Object)):boolean} predicate
+ * @return {boolean}
+ */
+ _checkExtensionApplicability(extension, predicate) {
+ if (!predicate)
+ return false;
+ var contextTypes = extension.descriptor().contextTypes;
+ if (!contextTypes)
+ return true;
+ for (var i = 0; i < contextTypes.length; ++i) {
+ var contextType = this._resolve(contextTypes[i]);
+ var isMatching = !!contextType && predicate(contextType);
+ if (isMatching)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param {!Runtime.Extension} extension
+ * @param {?Object} context
+ * @return {boolean}
+ */
+ isExtensionApplicableToContext(extension, context) {
+ if (!context)
+ return true;
+ return this._checkExtensionApplicability(extension, isInstanceOf);
/**
- * @param {!Runtime.ModuleDescriptor} descriptor
+ * @param {!Function} targetType
+ * @return {boolean}
*/
- _registerModule: function(descriptor)
- {
- var module = new Runtime.Module(this, descriptor);
- this._modules.push(module);
- this._modulesMap[descriptor["name"]] = module;
- },
+ function isInstanceOf(targetType) {
+ return context instanceof targetType;
+ }
+ }
- /**
- * @param {string} moduleName
- * @return {!Promise.<undefined>}
- */
- loadModulePromise: function(moduleName)
- {
- return this._modulesMap[moduleName]._loadPromise();
- },
+ /**
+ * @param {!Runtime.Extension} extension
+ * @param {!Set.<!Function>=} currentContextTypes
+ * @return {boolean}
+ */
+ isExtensionApplicableToContextTypes(extension, currentContextTypes) {
+ if (!extension.descriptor().contextTypes)
+ return true;
- /**
- * @param {!Array.<string>} moduleNames
- * @return {!Promise.<!Array.<*>>}
- */
- _loadAutoStartModules: function(moduleNames)
- {
- var promises = [];
- for (var i = 0; i < moduleNames.length; ++i)
- promises.push(this.loadModulePromise(moduleNames[i]));
- return Promise.all(promises);
- },
+ return this._checkExtensionApplicability(extension, currentContextTypes ? isContextTypeKnown : null);
/**
- * @param {!Runtime.Extension} extension
- * @param {?function(function(new:Object)):boolean} predicate
+ * @param {!Function} targetType
* @return {boolean}
*/
- _checkExtensionApplicability: function(extension, predicate)
- {
- if (!predicate)
- return false;
- var contextTypes = extension.descriptor().contextTypes;
- if (!contextTypes)
- return true;
- for (var i = 0; i < contextTypes.length; ++i) {
- var contextType = this._resolve(contextTypes[i]);
- var isMatching = !!contextType && predicate(contextType);
- if (isMatching)
- return true;
- }
- return false;
- },
+ function isContextTypeKnown(targetType) {
+ return currentContextTypes.has(targetType);
+ }
+ }
+
+ /**
+ * @param {*} type
+ * @param {?Object=} context
+ * @param {boolean=} sortByTitle
+ * @return {!Array.<!Runtime.Extension>}
+ */
+ extensions(type, context, sortByTitle) {
+ return this._extensions.filter(filter).sort(sortByTitle ? titleComparator : orderComparator);
/**
* @param {!Runtime.Extension} extension
- * @param {?Object} context
* @return {boolean}
*/
- isExtensionApplicableToContext: function(extension, context)
- {
- if (!context)
- return true;
- return this._checkExtensionApplicability(extension, isInstanceOf);
-
- /**
- * @param {!Function} targetType
- * @return {boolean}
- */
- function isInstanceOf(targetType)
- {
- return context instanceof targetType;
- }
- },
+ function filter(extension) {
+ if (extension._type !== type && extension._typeClass() !== type)
+ return false;
+ if (!extension.enabled())
+ return false;
+ return !context || extension.isApplicable(context);
+ }
/**
- * @param {!Runtime.Extension} extension
- * @param {!Set.<!Function>=} currentContextTypes
- * @return {boolean}
+ * @param {!Runtime.Extension} extension1
+ * @param {!Runtime.Extension} extension2
+ * @return {number}
*/
- isExtensionApplicableToContextTypes: function(extension, currentContextTypes)
- {
- if (!extension.descriptor().contextTypes)
- return true;
-
- return this._checkExtensionApplicability(extension, currentContextTypes ? isContextTypeKnown : null);
-
- /**
- * @param {!Function} targetType
- * @return {boolean}
- */
- function isContextTypeKnown(targetType)
- {
- return currentContextTypes.has(targetType);
- }
- },
+ function orderComparator(extension1, extension2) {
+ var order1 = extension1.descriptor()['order'] || 0;
+ var order2 = extension2.descriptor()['order'] || 0;
+ return order1 - order2;
+ }
/**
- * @param {*} type
- * @param {?Object=} context
- * @param {boolean=} sortByTitle
- * @return {!Array.<!Runtime.Extension>}
+ * @param {!Runtime.Extension} extension1
+ * @param {!Runtime.Extension} extension2
+ * @return {number}
*/
- extensions: function(type, context, sortByTitle)
- {
- return this._extensions.filter(filter).sort(sortByTitle ? titleComparator : orderComparator);
-
- /**
- * @param {!Runtime.Extension} extension
- * @return {boolean}
- */
- function filter(extension)
- {
- if (extension._type !== type && extension._typeClass() !== type)
- return false;
- if (!extension.enabled())
- return false;
- return !context || extension.isApplicable(context);
- }
-
- /**
- * @param {!Runtime.Extension} extension1
- * @param {!Runtime.Extension} extension2
- * @return {number}
- */
- function orderComparator(extension1, extension2)
- {
- var order1 = extension1.descriptor()["order"] || 0;
- var order2 = extension2.descriptor()["order"] || 0;
- return order1 - order2;
- }
+ function titleComparator(extension1, extension2) {
+ var title1 = extension1.title() || '';
+ var title2 = extension2.title() || '';
+ return title1.localeCompare(title2);
+ }
+ }
+
+ /**
+ * @param {*} type
+ * @param {?Object=} context
+ * @return {?Runtime.Extension}
+ */
+ extension(type, context) {
+ return this.extensions(type, context)[0] || null;
+ }
+
+ /**
+ * @param {*} type
+ * @param {?Object=} context
+ * @return {!Promise.<!Array.<!Object>>}
+ */
+ allInstances(type, context) {
+ return Promise.all(this.extensions(type, context).map(extension => extension.instance()));
+ }
+
+ /**
+ * @return {?function(new:Object)}
+ */
+ _resolve(typeName) {
+ if (!this._cachedTypeClasses[typeName]) {
+ var path = typeName.split('.');
+ var object = self;
+ for (var i = 0; object && (i < path.length); ++i)
+ object = object[path[i]];
+ if (object)
+ this._cachedTypeClasses[typeName] = /** @type function(new:Object) */ (object);
+ }
+ return this._cachedTypeClasses[typeName] || null;
+ }
+
+ /**
+ * @param {!Function} constructorFunction
+ * @return {!Object}
+ */
+ sharedInstance(constructorFunction) {
+ if (Runtime._instanceSymbol in constructorFunction)
+ return constructorFunction[Runtime._instanceSymbol];
+ var instance = new constructorFunction();
+ constructorFunction[Runtime._instanceSymbol] = instance;
+ return instance;
+ }
+}
- /**
- * @param {!Runtime.Extension} extension1
- * @param {!Runtime.Extension} extension2
- * @return {number}
- */
- function titleComparator(extension1, extension2)
- {
- var title1 = extension1.title() || "";
- var title2 = extension2.title() || "";
- return title1.localeCompare(title2);
- }
- },
+;
- /**
- * @param {*} type
- * @param {?Object=} context
- * @return {?Runtime.Extension}
- */
- extension: function(type, context)
- {
- return this.extensions(type, context)[0] || null;
- },
- /**
- * @param {*} type
- * @param {?Object=} context
- * @return {!Promise.<!Array.<!Object>>}
- */
- allInstances: function(type, context)
- {
- return Promise.all(this.extensions(type, context).map(extension => extension.instance()));
- },
+/**
+ * @type {!Object.<string, string>}
+ */
+Runtime._queryParamsObject = {
+ __proto__: null
+};
- /**
- * @return {?function(new:Object)}
- */
- _resolve: function(typeName)
- {
- if (!this._cachedTypeClasses[typeName]) {
- var path = typeName.split(".");
- var object = self;
- for (var i = 0; object && (i < path.length); ++i)
- object = object[path[i]];
- if (object)
- this._cachedTypeClasses[typeName] = /** @type function(new:Object) */(object);
- }
- return this._cachedTypeClasses[typeName] || null;
- },
+Runtime._instanceSymbol = Symbol('instance');
+Runtime._extensionSymbol = Symbol('extension');
- /**
- * @param {!Function} constructorFunction
- * @return {!Object}
- */
- sharedInstance: function(constructorFunction)
- {
- if (Runtime._instanceSymbol in constructorFunction)
- return constructorFunction[Runtime._instanceSymbol];
- var instance = new constructorFunction();
- constructorFunction[Runtime._instanceSymbol] = instance;
- return instance;
- }
+/**
+ * @type {!Object.<string, string>}
+ */
+Runtime.cachedResources = {
+ __proto__: null
};
+
+/** @type {?function(!MessagePort)} */
+Runtime._sharedWorkerNewPortCallback = null;
+/** @type {!Array<!MessagePort>} */
+Runtime._sharedWorkerConnectedPorts = [];
+
+
+Runtime._console = console;
+Runtime._originalAssert = console.assert;
+
+
+Runtime._platform = '';
+
+
/**
- * @constructor
+ * @unrestricted
*/
-Runtime.ModuleDescriptor = function()
-{
+Runtime.ModuleDescriptor = class {
+ constructor() {
/**
* @type {string}
*/
@@ -625,13 +637,14 @@ Runtime.ModuleDescriptor = function()
* @type {boolean|undefined}
*/
this.remote;
+ }
};
/**
- * @constructor
+ * @unrestricted
*/
-Runtime.ExtensionDescriptor = function()
-{
+Runtime.ExtensionDescriptor = class {
+ constructor() {
/**
* @type {string}
*/
@@ -651,15 +664,18 @@ Runtime.ExtensionDescriptor = function()
* @type {!Array.<string>|undefined}
*/
this.contextTypes;
+ }
};
/**
- * @constructor
- * @param {!Runtime} manager
- * @param {!Runtime.ModuleDescriptor} descriptor
+ * @unrestricted
*/
-Runtime.Module = function(manager, descriptor)
-{
+Runtime.Module = class {
+ /**
+ * @param {!Runtime} manager
+ * @param {!Runtime.ModuleDescriptor} descriptor
+ */
+ constructor(manager, descriptor) {
this._manager = manager;
this._descriptor = descriptor;
this._name = descriptor.name;
@@ -670,439 +686,387 @@ Runtime.Module = function(manager, descriptor)
this._extensionsByClassName = new Map();
var extensions = /** @type {?Array.<!Runtime.ExtensionDescriptor>} */ (descriptor.extensions);
for (var i = 0; extensions && i < extensions.length; ++i) {
- var extension = new Runtime.Extension(this, extensions[i]);
- this._manager._extensions.push(extension);
- this._extensions.push(extension);
+ var extension = new Runtime.Extension(this, extensions[i]);
+ this._manager._extensions.push(extension);
+ this._extensions.push(extension);
}
this._loadedForTest = false;
-};
-
-Runtime.Module.prototype = {
- /**
- * @return {string}
- */
- name: function()
- {
- return this._name;
- },
-
- /**
- * @return {boolean}
- */
- enabled: function()
- {
- return Runtime._isDescriptorEnabled(this._descriptor);
- },
-
- /**
- * @param {string} name
- * @return {string}
- */
- resource: function(name)
- {
- var fullName = this._name + "/" + name;
- var content = Runtime.cachedResources[fullName];
- if (!content)
- throw new Error(fullName + " not preloaded. Check module.json");
- return content;
- },
-
- /**
- * @return {!Promise.<undefined>}
- */
- _loadPromise: function()
- {
- if (!this.enabled())
- return Promise.reject(new Error("Module " + this._name + " is not enabled"));
-
- if (this._pendingLoadPromise)
- return this._pendingLoadPromise;
-
- var dependencies = this._descriptor.dependencies;
- var dependencyPromises = [];
- for (var i = 0; dependencies && i < dependencies.length; ++i)
- dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());
-
- this._pendingLoadPromise = Promise.all(dependencyPromises)
- .then(this._loadResources.bind(this))
- .then(this._loadScripts.bind(this))
- .then(() => this._loadedForTest = true);
-
- return this._pendingLoadPromise;
- },
-
- /**
- * @return {!Promise.<undefined>}
- * @this {Runtime.Module}
- */
- _loadResources: function()
- {
- var resources = this._descriptor["resources"];
- if (!resources || !resources.length)
- return Promise.resolve();
- var promises = [];
- for (var i = 0; i < resources.length; ++i) {
- var url = this._modularizeURL(resources[i]);
- promises.push(Runtime.loadResourceIntoCache(url, true));
- }
- return Promise.all(promises).then(undefined);
- },
-
- /**
- * @return {!Promise.<undefined>}
- */
- _loadScripts: function()
- {
- if (!this._descriptor.scripts || !this._descriptor.scripts.length)
- return Promise.resolve();
- return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL, this), this._remoteBase());
- },
-
- /**
- * @param {string} resourceName
- */
- _modularizeURL: function(resourceName)
- {
- return Runtime.normalizePath(this._name + "/" + resourceName);
- },
-
- /**
- * @return {string|undefined}
- */
- _remoteBase: function()
- {
- return !Runtime.queryParam("debugFrontend") && this._descriptor.remote && Runtime._remoteBase || undefined;
- },
-
- /**
- * @param {string} value
- * @return {string}
- */
- substituteURL: function(value)
- {
- var base = this._remoteBase() || "";
- return value.replace(/@url\(([^\)]*?)\)/g, convertURL.bind(this));
-
- function convertURL(match, url)
- {
- return base + this._modularizeURL(url);
- }
+ }
+
+ /**
+ * @return {string}
+ */
+ name() {
+ return this._name;
+ }
+
+ /**
+ * @return {boolean}
+ */
+ enabled() {
+ return Runtime._isDescriptorEnabled(this._descriptor);
+ }
+
+ /**
+ * @param {string} name
+ * @return {string}
+ */
+ resource(name) {
+ var fullName = this._name + '/' + name;
+ var content = Runtime.cachedResources[fullName];
+ if (!content)
+ throw new Error(fullName + ' not preloaded. Check module.json');
+ return content;
+ }
+
+ /**
+ * @return {!Promise.<undefined>}
+ */
+ _loadPromise() {
+ if (!this.enabled())
+ return Promise.reject(new Error('Module ' + this._name + ' is not enabled'));
+
+ if (this._pendingLoadPromise)
+ return this._pendingLoadPromise;
+
+ var dependencies = this._descriptor.dependencies;
+ var dependencyPromises = [];
+ for (var i = 0; dependencies && i < dependencies.length; ++i)
+ dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());
+
+ this._pendingLoadPromise = Promise.all(dependencyPromises)
+ .then(this._loadResources.bind(this))
+ .then(this._loadScripts.bind(this))
+ .then(() => this._loadedForTest = true);
+
+ return this._pendingLoadPromise;
+ }
+
+ /**
+ * @return {!Promise.<undefined>}
+ * @this {Runtime.Module}
+ */
+ _loadResources() {
+ var resources = this._descriptor['resources'];
+ if (!resources || !resources.length)
+ return Promise.resolve();
+ var promises = [];
+ for (var i = 0; i < resources.length; ++i) {
+ var url = this._modularizeURL(resources[i]);
+ promises.push(Runtime.loadResourceIntoCache(url, true));
+ }
+ return Promise.all(promises).then(undefined);
+ }
+
+ /**
+ * @return {!Promise.<undefined>}
+ */
+ _loadScripts() {
+ if (!this._descriptor.scripts || !this._descriptor.scripts.length)
+ return Promise.resolve();
+ return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL, this), this._remoteBase());
+ }
+
+ /**
+ * @param {string} resourceName
+ */
+ _modularizeURL(resourceName) {
+ return Runtime.normalizePath(this._name + '/' + resourceName);
+ }
+
+ /**
+ * @return {string|undefined}
+ */
+ _remoteBase() {
+ return !Runtime.queryParam('debugFrontend') && this._descriptor.remote && Runtime._remoteBase || undefined;
+ }
+
+ /**
+ * @param {string} value
+ * @return {string}
+ */
+ substituteURL(value) {
+ var base = this._remoteBase() || '';
+ return value.replace(/@url\(([^\)]*?)\)/g, convertURL.bind(this));
+
+ function convertURL(match, url) {
+ return base + this._modularizeURL(url);
}
+ }
};
-/**
- * @param {!Object} descriptor
- * @return {boolean}
- */
-Runtime._isDescriptorEnabled = function(descriptor)
-{
- var activatorExperiment = descriptor["experiment"];
- if (activatorExperiment === "*")
- return Runtime.experiments.supportEnabled();
- if (activatorExperiment && activatorExperiment.startsWith("!") && Runtime.experiments.isEnabled(activatorExperiment.substring(1)))
- return false;
- if (activatorExperiment && !activatorExperiment.startsWith("!") && !Runtime.experiments.isEnabled(activatorExperiment))
- return false;
- var condition = descriptor["condition"];
- if (condition && !condition.startsWith("!") && !Runtime.queryParam(condition))
- return false;
- if (condition && condition.startsWith("!") && Runtime.queryParam(condition.substring(1)))
- return false;
- return true;
-};
/**
- * @constructor
- * @param {!Runtime.Module} module
- * @param {!Runtime.ExtensionDescriptor} descriptor
+ * @unrestricted
*/
-Runtime.Extension = function(module, descriptor)
-{
+Runtime.Extension = class {
+ /**
+ * @param {!Runtime.Module} module
+ * @param {!Runtime.ExtensionDescriptor} descriptor
+ */
+ constructor(module, descriptor) {
this._module = module;
this._descriptor = descriptor;
this._type = descriptor.type;
- this._hasTypeClass = this._type.charAt(0) === "@";
+ this._hasTypeClass = this._type.charAt(0) === '@';
/**
* @type {?string}
*/
this._className = descriptor.className || null;
this._factoryName = descriptor.factoryName || null;
-};
-
-Runtime.Extension.prototype = {
- /**
- * @return {!Object}
- */
- descriptor: function()
- {
- return this._descriptor;
- },
-
- /**
- * @return {!Runtime.Module}
- */
- module: function()
- {
- return this._module;
- },
-
- /**
- * @return {boolean}
- */
- enabled: function()
- {
- return this._module.enabled() && Runtime._isDescriptorEnabled(this.descriptor());
- },
-
- /**
- * @return {?function(new:Object)}
- */
- _typeClass: function()
- {
- if (!this._hasTypeClass)
- return null;
- return this._module._manager._resolve(this._type.substring(1));
- },
-
- /**
- * @param {?Object} context
- * @return {boolean}
- */
- isApplicable: function(context)
- {
- return this._module._manager.isExtensionApplicableToContext(this, context);
- },
-
- /**
- * @return {!Promise.<!Object>}
- */
- instance: function()
- {
- return this._module._loadPromise().then(this._createInstance.bind(this));
- },
-
- /**
- * @return {!Object}
- */
- _createInstance: function()
- {
- var className = this._className || this._factoryName;
- if (!className)
- throw new Error("Could not instantiate extension with no class");
- var constructorFunction = self.eval(/** @type {string} */(className));
- if (!(constructorFunction instanceof Function))
- throw new Error("Could not instantiate: " + className);
- if (this._className)
- return this._module._manager.sharedInstance(constructorFunction);
- return new constructorFunction(this);
- },
-
- /**
- * @return {string}
- */
- title: function()
- {
- // FIXME: should be WebInspector.UIString() but runtime is not l10n aware yet.
- return this._descriptor["title-" + Runtime._platform] || this._descriptor["title"];
- },
-
- /**
- * @param {function(new:Object)} contextType
- * @return {boolean}
- */
- hasContextType: function(contextType)
- {
- var contextTypes = this.descriptor().contextTypes;
- if (!contextTypes)
- return false;
- for (var i = 0; i < contextTypes.length; ++i) {
- if (contextType === this._module._manager._resolve(contextTypes[i]))
- return true;
- }
- return false;
+ }
+
+ /**
+ * @return {!Object}
+ */
+ descriptor() {
+ return this._descriptor;
+ }
+
+ /**
+ * @return {!Runtime.Module}
+ */
+ module() {
+ return this._module;
+ }
+
+ /**
+ * @return {boolean}
+ */
+ enabled() {
+ return this._module.enabled() && Runtime._isDescriptorEnabled(this.descriptor());
+ }
+
+ /**
+ * @return {?function(new:Object)}
+ */
+ _typeClass() {
+ if (!this._hasTypeClass)
+ return null;
+ return this._module._manager._resolve(this._type.substring(1));
+ }
+
+ /**
+ * @param {?Object} context
+ * @return {boolean}
+ */
+ isApplicable(context) {
+ return this._module._manager.isExtensionApplicableToContext(this, context);
+ }
+
+ /**
+ * @return {!Promise.<!Object>}
+ */
+ instance() {
+ return this._module._loadPromise().then(this._createInstance.bind(this));
+ }
+
+ /**
+ * @return {!Object}
+ */
+ _createInstance() {
+ var className = this._className || this._factoryName;
+ if (!className)
+ throw new Error('Could not instantiate extension with no class');
+ var constructorFunction = self.eval(/** @type {string} */ (className));
+ if (!(constructorFunction instanceof Function))
+ throw new Error('Could not instantiate: ' + className);
+ if (this._className)
+ return this._module._manager.sharedInstance(constructorFunction);
+ return new constructorFunction(this);
+ }
+
+ /**
+ * @return {string}
+ */
+ title() {
+ // FIXME: should be WebInspector.UIString() but runtime is not l10n aware yet.
+ return this._descriptor['title-' + Runtime._platform] || this._descriptor['title'];
+ }
+
+ /**
+ * @param {function(new:Object)} contextType
+ * @return {boolean}
+ */
+ hasContextType(contextType) {
+ var contextTypes = this.descriptor().contextTypes;
+ if (!contextTypes)
+ return false;
+ for (var i = 0; i < contextTypes.length; ++i) {
+ if (contextType === this._module._manager._resolve(contextTypes[i]))
+ return true;
}
+ return false;
+ }
};
/**
- * @constructor
+ * @unrestricted
*/
-Runtime.ExperimentsSupport = function()
-{
- this._supportEnabled = Runtime.queryParam("experiments") !== null;
+Runtime.ExperimentsSupport = class {
+ constructor() {
+ this._supportEnabled = Runtime.queryParam('experiments') !== null;
this._experiments = [];
this._experimentNames = {};
this._enabledTransiently = {};
-};
-
-Runtime.ExperimentsSupport.prototype = {
- /**
- * @return {!Array.<!Runtime.Experiment>}
- */
- allConfigurableExperiments: function()
- {
- var result = [];
- for (var i = 0; i < this._experiments.length; i++) {
- var experiment = this._experiments[i];
- if (!this._enabledTransiently[experiment.name])
- result.push(experiment);
- }
- return result;
- },
-
- /**
- * @return {boolean}
- */
- supportEnabled: function()
- {
- return this._supportEnabled;
- },
-
- /**
- * @param {!Object} value
- */
- _setExperimentsSetting: function(value)
- {
- if (!self.localStorage)
- return;
- self.localStorage["experiments"] = JSON.stringify(value);
- },
-
- /**
- * @param {string} experimentName
- * @param {string} experimentTitle
- * @param {boolean=} hidden
- */
- register: function(experimentName, experimentTitle, hidden)
- {
- Runtime._assert(!this._experimentNames[experimentName], "Duplicate registration of experiment " + experimentName);
- this._experimentNames[experimentName] = true;
- this._experiments.push(new Runtime.Experiment(this, experimentName, experimentTitle, !!hidden));
- },
-
- /**
- * @param {string} experimentName
- * @return {boolean}
- */
- isEnabled: function(experimentName)
- {
- this._checkExperiment(experimentName);
-
- if (this._enabledTransiently[experimentName])
- return true;
- if (!this.supportEnabled())
- return false;
-
- return !!Runtime._experimentsSetting()[experimentName];
- },
-
- /**
- * @param {string} experimentName
- * @param {boolean} enabled
- */
- setEnabled: function(experimentName, enabled)
- {
- this._checkExperiment(experimentName);
- var experimentsSetting = Runtime._experimentsSetting();
- experimentsSetting[experimentName] = enabled;
- this._setExperimentsSetting(experimentsSetting);
- },
-
- /**
- * @param {!Array.<string>} experimentNames
- */
- setDefaultExperiments: function(experimentNames)
- {
- for (var i = 0; i < experimentNames.length; ++i) {
- this._checkExperiment(experimentNames[i]);
- this._enabledTransiently[experimentNames[i]] = true;
- }
- },
+ }
+
+ /**
+ * @return {!Array.<!Runtime.Experiment>}
+ */
+ allConfigurableExperiments() {
+ var result = [];
+ for (var i = 0; i < this._experiments.length; i++) {
+ var experiment = this._experiments[i];
+ if (!this._enabledTransiently[experiment.name])
+ result.push(experiment);
+ }
+ return result;
+ }
+
+ /**
+ * @return {boolean}
+ */
+ supportEnabled() {
+ return this._supportEnabled;
+ }
+
+ /**
+ * @param {!Object} value
+ */
+ _setExperimentsSetting(value) {
+ if (!self.localStorage)
+ return;
+ self.localStorage['experiments'] = JSON.stringify(value);
+ }
+
+ /**
+ * @param {string} experimentName
+ * @param {string} experimentTitle
+ * @param {boolean=} hidden
+ */
+ register(experimentName, experimentTitle, hidden) {
+ Runtime._assert(!this._experimentNames[experimentName], 'Duplicate registration of experiment ' + experimentName);
+ this._experimentNames[experimentName] = true;
+ this._experiments.push(new Runtime.Experiment(this, experimentName, experimentTitle, !!hidden));
+ }
+
+ /**
+ * @param {string} experimentName
+ * @return {boolean}
+ */
+ isEnabled(experimentName) {
+ this._checkExperiment(experimentName);
+
+ if (this._enabledTransiently[experimentName])
+ return true;
+ if (!this.supportEnabled())
+ return false;
+
+ return !!Runtime._experimentsSetting()[experimentName];
+ }
+
+ /**
+ * @param {string} experimentName
+ * @param {boolean} enabled
+ */
+ setEnabled(experimentName, enabled) {
+ this._checkExperiment(experimentName);
+ var experimentsSetting = Runtime._experimentsSetting();
+ experimentsSetting[experimentName] = enabled;
+ this._setExperimentsSetting(experimentsSetting);
+ }
+
+ /**
+ * @param {!Array.<string>} experimentNames
+ */
+ setDefaultExperiments(experimentNames) {
+ for (var i = 0; i < experimentNames.length; ++i) {
+ this._checkExperiment(experimentNames[i]);
+ this._enabledTransiently[experimentNames[i]] = true;
+ }
+ }
- /**
- * @param {string} experimentName
- */
- enableForTest: function(experimentName)
- {
- this._checkExperiment(experimentName);
- this._enabledTransiently[experimentName] = true;
- },
-
- clearForTest: function()
- {
- this._experiments = [];
- this._experimentNames = {};
- this._enabledTransiently = {};
- },
-
- cleanUpStaleExperiments: function()
- {
- var experimentsSetting = Runtime._experimentsSetting();
- var cleanedUpExperimentSetting = {};
- for (var i = 0; i < this._experiments.length; ++i) {
- var experimentName = this._experiments[i].name;
- if (experimentsSetting[experimentName])
- cleanedUpExperimentSetting[experimentName] = true;
- }
- this._setExperimentsSetting(cleanedUpExperimentSetting);
- },
+ /**
+ * @param {string} experimentName
+ */
+ enableForTest(experimentName) {
+ this._checkExperiment(experimentName);
+ this._enabledTransiently[experimentName] = true;
+ }
- /**
- * @param {string} experimentName
- */
- _checkExperiment: function(experimentName)
- {
- Runtime._assert(this._experimentNames[experimentName], "Unknown experiment " + experimentName);
+ clearForTest() {
+ this._experiments = [];
+ this._experimentNames = {};
+ this._enabledTransiently = {};
+ }
+
+ cleanUpStaleExperiments() {
+ var experimentsSetting = Runtime._experimentsSetting();
+ var cleanedUpExperimentSetting = {};
+ for (var i = 0; i < this._experiments.length; ++i) {
+ var experimentName = this._experiments[i].name;
+ if (experimentsSetting[experimentName])
+ cleanedUpExperimentSetting[experimentName] = true;
}
+ this._setExperimentsSetting(cleanedUpExperimentSetting);
+ }
+
+ /**
+ * @param {string} experimentName
+ */
+ _checkExperiment(experimentName) {
+ Runtime._assert(this._experimentNames[experimentName], 'Unknown experiment ' + experimentName);
+ }
};
/**
- * @constructor
- * @param {!Runtime.ExperimentsSupport} experiments
- * @param {string} name
- * @param {string} title
- * @param {boolean} hidden
+ * @unrestricted
*/
-Runtime.Experiment = function(experiments, name, title, hidden)
-{
+Runtime.Experiment = class {
+ /**
+ * @param {!Runtime.ExperimentsSupport} experiments
+ * @param {string} name
+ * @param {string} title
+ * @param {boolean} hidden
+ */
+ constructor(experiments, name, title, hidden) {
this.name = name;
this.title = title;
this.hidden = hidden;
this._experiments = experiments;
+ }
+
+ /**
+ * @return {boolean}
+ */
+ isEnabled() {
+ return this._experiments.isEnabled(this.name);
+ }
+
+ /**
+ * @param {boolean} enabled
+ */
+ setEnabled(enabled) {
+ this._experiments.setEnabled(this.name, enabled);
+ }
};
-Runtime.Experiment.prototype = {
- /**
- * @return {boolean}
- */
- isEnabled: function()
- {
- return this._experiments.isEnabled(this.name);
- },
-
- /**
- * @param {boolean} enabled
- */
- setEnabled: function(enabled)
- {
- this._experiments.setEnabled(this.name, enabled);
- }
-};
-
-{(function parseQueryParameters()
{
+ (function parseQueryParameters() {
var queryParams = location.search;
if (!queryParams)
- return;
- var params = queryParams.substring(1).split("&");
+ return;
+ var params = queryParams.substring(1).split('&');
for (var i = 0; i < params.length; ++i) {
- var pair = params[i].split("=");
- var name = pair.shift();
- Runtime._queryParamsObject[name] = pair.join("=");
+ var pair = params[i].split('=');
+ var name = pair.shift();
+ Runtime._queryParamsObject[name] = pair.join('=');
}
-})();}
-
+ })();
+}
// This must be constructed after the query parameters have been parsed.
Runtime.experiments = new Runtime.ExperimentsSupport();
@@ -1110,49 +1074,39 @@ Runtime.experiments = new Runtime.ExperimentsSupport();
/**
* @type {?string}
*/
-Runtime._remoteBase = Runtime.queryParam("remoteBase");
-{(function validateRemoteBase()
+Runtime._remoteBase = Runtime.queryParam('remoteBase');
{
+ (function validateRemoteBase() {
var remoteBaseRegexp = /^https:\/\/chrome-devtools-frontend\.appspot\.com\/serve_file\/@[0-9a-zA-Z]+\/?$/;
if (Runtime._remoteBase && !remoteBaseRegexp.test(Runtime._remoteBase))
- Runtime._remoteBase = null;
-})();}
+ Runtime._remoteBase = null;
+ })();
+}
-/**
- * @param {string} path
- * @return {string}
- */
-Runtime.resolveSourceURL = function(path)
-{
- var sourceURL = self.location.href;
- if (self.location.search)
- sourceURL = sourceURL.replace(self.location.search, "");
- sourceURL = sourceURL.substring(0, sourceURL.lastIndexOf("/") + 1) + path;
- return "\n/*# sourceURL=" + sourceURL + " */";
-};
/**
* @interface
*/
-function ServicePort() { }
+function ServicePort() {
+}
ServicePort.prototype = {
- /**
- * @param {function(string)} messageHandler
- * @param {function(string)} closeHandler
- */
- setHandlers: function(messageHandler, closeHandler) { },
-
- /**
- * @param {string} message
- * @return {!Promise<boolean>}
- */
- send: function(message) { },
-
- /**
- * @return {!Promise<boolean>}
- */
- close: function() { }
+ /**
+ * @param {function(string)} messageHandler
+ * @param {function(string)} closeHandler
+ */
+ setHandlers: function(messageHandler, closeHandler) {},
+
+ /**
+ * @param {string} message
+ * @return {!Promise<boolean>}
+ */
+ send: function(message) {},
+
+ /**
+ * @return {!Promise<boolean>}
+ */
+ close: function() {}
};
/** @type {!Runtime} */

Powered by Google App Engine
This is Rietveld 408576698