From 7f2002c598a90ca35dd8f2290cde010d9dfd0d7f Mon Sep 17 00:00:00 2001 From: Tim van der Lippe Date: Mon, 28 Sep 2020 15:54:01 +0100 Subject: [PATCH] [globals] self.runtime Migrate all usages of self.runtime to Root.Runtime.Runtime.instance(). This also requires various type updates, as now Closure/TypeScript can better understand the code and discover issues. R=jacktfranklin@chromium.org Bug: 1011811 Change-Id: Ice07aa0ca959e61a6acdf4618b9a272d8c1096b8 Fixed: 1081614 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2434339 Commit-Queue: Tim van der Lippe Reviewed-by: Jack Franklin --- front_end/RuntimeInstantiator.js | 6 +- front_end/changes/ChangesView.js | 4 +- front_end/common/Console.js | 2 +- front_end/common/Linkifier.js | 7 +- front_end/common/Revealer.js | 12 ++-- front_end/common/Settings.js | 3 +- front_end/components/Linkifier.js | 5 +- front_end/console/ConsolePinPane.js | 72 ++++++++++--------- front_end/console/ConsolePrompt.js | 5 +- front_end/elements/ElementsTreeElement.js | 6 +- front_end/emulation/EmulatedDevices.js | 3 +- .../lighthouse_worker/LighthouseService.js | 7 +- front_end/main/MainImpl.js | 40 +++++------ front_end/object_ui/JavaScriptAutocomplete.js | 4 +- front_end/perf_ui/LiveHeapProfile.js | 5 +- front_end/profiler/CPUProfileView.js | 3 +- front_end/quick_open/CommandMenu.js | 7 +- front_end/quick_open/HelpQuickOpen.js | 4 +- front_end/quick_open/QuickOpen.js | 3 +- front_end/resources/ResourcesPanel.js | 3 +- front_end/root/Runtime.js | 3 + front_end/sdk/CPUProfilerModel.js | 5 +- front_end/sdk/CSSProperty.js | 9 ++- front_end/security/SecurityPanel.js | 3 +- front_end/settings/SettingsScreen.js | 13 ++-- front_end/sources/BreakpointEditDialog.js | 3 +- front_end/sources/CallStackSidebarPane.js | 3 +- front_end/sources/DebuggerPlugin.js | 3 +- front_end/sources/SourcesPanel.js | 5 +- front_end/sources/SourcesView.js | 3 +- front_end/sources/UISourceCodeFrame.js | 6 +- front_end/text_editor/CodeMirrorTextEditor.js | 3 +- front_end/timeline/TimelinePanel.js | 5 +- front_end/ui/ActionRegistry.js | 4 +- front_end/ui/Context.js | 10 +-- front_end/ui/ContextMenu.js | 5 +- front_end/ui/ShortcutRegistry.js | 3 +- front_end/ui/SyntaxHighlighter.js | 5 +- front_end/ui/Toolbar.js | 3 +- front_end/ui/UIUtils.js | 3 +- front_end/ui/ViewManager.js | 8 ++- front_end/worker_service/BUILD.gn | 2 +- front_end/worker_service/ServiceDispatcher.js | 6 +- .../front_end/common/SettingsHelper.ts | 6 +- 44 files changed, 177 insertions(+), 143 deletions(-) diff --git a/front_end/RuntimeInstantiator.js b/front_end/RuntimeInstantiator.js index 94d677d216..aa6b93df4c 100644 --- a/front_end/RuntimeInstantiator.js +++ b/front_end/RuntimeInstantiator.js @@ -80,9 +80,11 @@ export async function startApplication(appName) { moduleDescriptors[i].name = configuration[i]['name']; moduleDescriptors[i].condition = configuration[i]['condition']; } - self.runtime = RootModule.Runtime.Runtime.instance({forceNew: true, moduleDescriptors}); + const runtimeInstance = RootModule.Runtime.Runtime.instance({forceNew: true, moduleDescriptors}); + // Exposed for legacy layout tests + self.runtime = runtimeInstance; if (coreModuleNames) { - await self.runtime.loadAutoStartModules(coreModuleNames); + await runtimeInstance.loadAutoStartModules(coreModuleNames); } appStartedPromiseCallback(); } diff --git a/front_end/changes/ChangesView.js b/front_end/changes/ChangesView.js index 53ec1b8b55..5b6edd5b0a 100644 --- a/front_end/changes/ChangesView.js +++ b/front_end/changes/ChangesView.js @@ -4,6 +4,7 @@ import * as Common from '../common/common.js'; import * as Diff from '../diff/diff.js'; +import * as Root from '../root/root.js'; import * as UI from '../ui/ui.js'; import * as Workspace from '../workspace/workspace.js'; // eslint-disable-line no-unused-vars import * as WorkspaceDiff from '../workspace_diff/workspace_diff.js'; @@ -377,8 +378,7 @@ export class DiffUILocationRevealer { throw new Error('Internal error: not a diff ui location'); } /** @type {!ChangesView} */ - // @ts-ignore self.runtime needs to be moved to ESModules so we can import this. - const changesView = self.runtime.sharedInstance(ChangesView); + const changesView = Root.Runtime.Runtime.instance().sharedInstance(ChangesView); await UI.ViewManager.ViewManager.instance().showView('changes.changes'); changesView._changesSidebar.selectUISourceCode(diffUILocation.uiSourceCode, omitFocus); } diff --git a/front_end/common/Console.js b/front_end/common/Console.js index 4097807073..79079589fd 100644 --- a/front_end/common/Console.js +++ b/front_end/common/Console.js @@ -80,7 +80,7 @@ export class Console extends ObjectWrapper { } /** - * @return {!Promise.} + * @return {!Promise.} */ showPromise() { return reveal(this); diff --git a/front_end/common/Linkifier.js b/front_end/common/Linkifier.js index f5aaadede4..a7b22d08b5 100644 --- a/front_end/common/Linkifier.js +++ b/front_end/common/Linkifier.js @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import * as Root from '../root/root.js'; + /** * @interface */ @@ -24,8 +26,9 @@ export class Linkifier { if (!object) { return Promise.reject(new Error('Can\'t linkify ' + object)); } - // @ts-ignore self.runtime needs to be moved to ESModules so we can import this. - return self.runtime.extension(Linkifier, object).instance().then(linkifier => linkifier.linkify(object, options)); + return /** @type {!Root.Runtime.Extension} */ (Root.Runtime.Runtime.instance().extension(Linkifier, object)) + .instance() + .then(linkifier => /** @type {!Linkifier} */ (linkifier).linkify(/** @type {!Object} */ (object), options)); } } diff --git a/front_end/common/Revealer.js b/front_end/common/Revealer.js index f8c2417448..40f673c991 100644 --- a/front_end/common/Revealer.js +++ b/front_end/common/Revealer.js @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import * as Root from '../root/root.js'; + /** * @interface */ @@ -19,14 +21,15 @@ export class Revealer { /** * @param {?Object} revealable * @param {boolean=} omitFocus - * @return {!Promise.} + * @return {!Promise.} */ export let reveal = function(revealable, omitFocus) { if (!revealable) { return Promise.reject(new Error('Can\'t reveal ' + revealable)); } - // @ts-ignore self.runtime needs to be moved to ESModules so we can import this - return self.runtime.allInstances(Revealer, revealable).then(reveal); + return Root.Runtime.Runtime.instance() + .allInstances(Revealer, revealable) + .then(revealers => reveal(/** @type {!Array} */ (revealers))); /** * @param {!Array.} revealers @@ -53,8 +56,7 @@ export function setRevealForTest(newReveal) { * @return {?string} */ export const revealDestination = function(revealable) { - // @ts-ignore self.runtime needs to be moved to ESModules so we can import this - const extension = self.runtime.extension(Revealer, revealable); + const extension = Root.Runtime.Runtime.instance().extension(Revealer, revealable); if (!extension) { return null; } diff --git a/front_end/common/Settings.js b/front_end/common/Settings.js index cd707a54e7..1adb744534 100644 --- a/front_end/common/Settings.js +++ b/front_end/common/Settings.js @@ -59,8 +59,7 @@ export class Settings { this._registry = new Map(); /** @type {!Map>} */ this._moduleSettings = new Map(); - // @ts-ignore Needs runtime exported - self.runtime.extensions('setting').forEach(this._registerModuleSetting.bind(this)); + Root.Runtime.Runtime.instance().extensions('setting').forEach(this._registerModuleSetting.bind(this)); } static hasInstance() { diff --git a/front_end/components/Linkifier.js b/front_end/components/Linkifier.js index efe9f51e06..808bea9c39 100644 --- a/front_end/components/Linkifier.js +++ b/front_end/components/Linkifier.js @@ -34,6 +34,7 @@ import * as Bindings from '../bindings/bindings.js'; import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as TextUtils from '../text_utils/text_utils.js'; import * as UI from '../ui/ui.js'; @@ -629,7 +630,7 @@ export class Linkifier { */ static registerLinkHandler(title, handler) { _linkHandlers.set(title, handler); - self.runtime.sharedInstance(LinkHandlerSettingUI)._update(); + Root.Runtime.Runtime.instance().sharedInstance(LinkHandlerSettingUI)._update(); } /** @@ -637,7 +638,7 @@ export class Linkifier { */ static unregisterLinkHandler(title) { _linkHandlers.delete(title); - self.runtime.sharedInstance(LinkHandlerSettingUI)._update(); + Root.Runtime.Runtime.instance().sharedInstance(LinkHandlerSettingUI)._update(); } /** diff --git a/front_end/console/ConsolePinPane.js b/front_end/console/ConsolePinPane.js index 05c1f7ca39..786137bcff 100644 --- a/front_end/console/ConsolePinPane.js +++ b/front_end/console/ConsolePinPane.js @@ -7,6 +7,7 @@ import * as Common from '../common/common.js'; import * as ObjectUI from '../object_ui/object_ui.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as TextUtils from '../text_utils/text_utils.js'; import * as UI from '../ui/ui.js'; @@ -166,41 +167,42 @@ export class ConsolePin extends Common.ObjectWrapper.ObjectWrapper { } }, false); - this._editorPromise = self.runtime.extension(UI.TextEditor.TextEditorFactory).instance().then(factory => { - this._editor = factory.createEditor({ - devtoolsAccessibleName: ls`Live expression editor`, - lineNumbers: false, - lineWrapping: true, - mimeType: 'javascript', - autoHeight: true, - placeholder: ls`Expression` - }); - this._editor.configureAutocomplete( - ObjectUI.JavaScriptAutocomplete.JavaScriptAutocompleteConfig.createConfigForEditor(this._editor)); - this._editor.widget().show(nameElement); - this._editor.widget().element.classList.add('console-pin-editor'); - this._editor.widget().element.tabIndex = -1; - this._editor.setText(expression); - this._editor.widget().element.addEventListener('keydown', event => { - if (event.key === 'Tab' && !this._editor.text()) { - event.consume(); - return; - } - if (event.keyCode === UI.KeyboardShortcut.Keys.Esc.code) { - this._editor.setText(this._committedExpression); - } - }, true); - this._editor.widget().element.addEventListener('focusout', event => { - const text = this._editor.text(); - const trimmedText = text.trim(); - if (text.length !== trimmedText.length) { - this._editor.setText(trimmedText); - } - this._committedExpression = trimmedText; - pinPane._savePins(); - this._editor.setSelection(TextUtils.TextRange.TextRange.createFromLocation(Infinity, Infinity)); - }); - }); + this._editorPromise = + Root.Runtime.Runtime.instance().extension(UI.TextEditor.TextEditorFactory).instance().then(factory => { + this._editor = factory.createEditor({ + devtoolsAccessibleName: ls`Live expression editor`, + lineNumbers: false, + lineWrapping: true, + mimeType: 'javascript', + autoHeight: true, + placeholder: ls`Expression` + }); + this._editor.configureAutocomplete( + ObjectUI.JavaScriptAutocomplete.JavaScriptAutocompleteConfig.createConfigForEditor(this._editor)); + this._editor.widget().show(nameElement); + this._editor.widget().element.classList.add('console-pin-editor'); + this._editor.widget().element.tabIndex = -1; + this._editor.setText(expression); + this._editor.widget().element.addEventListener('keydown', event => { + if (event.key === 'Tab' && !this._editor.text()) { + event.consume(); + return; + } + if (event.keyCode === UI.KeyboardShortcut.Keys.Esc.code) { + this._editor.setText(this._committedExpression); + } + }, true); + this._editor.widget().element.addEventListener('focusout', event => { + const text = this._editor.text(); + const trimmedText = text.trim(); + if (text.length !== trimmedText.length) { + this._editor.setText(trimmedText); + } + this._committedExpression = trimmedText; + pinPane._savePins(); + this._editor.setSelection(TextUtils.TextRange.TextRange.createFromLocation(Infinity, Infinity)); + }); + }); } /** diff --git a/front_end/console/ConsolePrompt.js b/front_end/console/ConsolePrompt.js index 78abeed9f7..14da8e84d7 100644 --- a/front_end/console/ConsolePrompt.js +++ b/front_end/console/ConsolePrompt.js @@ -8,6 +8,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as ObjectUI from '../object_ui/object_ui.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as TextUtils from '../text_utils/text_utils.js'; import * as UI from '../ui/ui.js'; @@ -52,7 +53,9 @@ export class ConsolePrompt extends UI.Widget.Widget { this._highlightingNode = false; - self.runtime.extension(UI.TextEditor.TextEditorFactory).instance().then(gotFactory.bind(this)); + Root.Runtime.Runtime.instance().extension(UI.TextEditor.TextEditorFactory).instance().then(factory => { + gotFactory.call(this, /** @type {!UI.TextEditor.TextEditorFactory} */ (factory)); + }); /** * @param {!UI.TextEditor.TextEditorFactory} factory diff --git a/front_end/elements/ElementsTreeElement.js b/front_end/elements/ElementsTreeElement.js index 8faf100f77..6db13398e7 100644 --- a/front_end/elements/ElementsTreeElement.js +++ b/front_end/elements/ElementsTreeElement.js @@ -894,7 +894,9 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement { // Append editor. this.listItemElement.appendChild(this._htmlEditElement); - self.runtime.extension(UI.TextEditor.TextEditorFactory).instance().then(gotFactory.bind(this)); + Root.Runtime.Runtime.instance().extension(UI.TextEditor.TextEditorFactory).instance().then(factory => { + gotFactory.call(this, /** @type {!UI.TextEditor.TextEditorFactory} */ (factory)); + }); /** * @param {!UI.TextEditor.TextEditorFactory} factory @@ -1261,7 +1263,7 @@ export class ElementsTreeElement extends UI.TreeOutline.TreeElement { const node = this._node; if (!this.treeOutline._decoratorExtensions) { - this.treeOutline._decoratorExtensions = self.runtime.extensions(MarkerDecorator); + this.treeOutline._decoratorExtensions = Root.Runtime.Runtime.instance().extensions(MarkerDecorator); } const markerToExtension = new Map(); diff --git a/front_end/emulation/EmulatedDevices.js b/front_end/emulation/EmulatedDevices.js index 7547e0fb7c..baa53c86a6 100644 --- a/front_end/emulation/EmulatedDevices.js +++ b/front_end/emulation/EmulatedDevices.js @@ -6,6 +6,7 @@ // TODO(crbug.com/1011811): Enable TypeScript compiler checks import * as Common from '../common/common.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as UI from '../ui/ui.js'; @@ -586,7 +587,7 @@ export class EmulatedDevicesList extends Common.ObjectWrapper.ObjectWrapper { _updateStandardDevices() { const devices = new Set(); - const extensions = self.runtime.extensions('emulated-device'); + const extensions = Root.Runtime.Runtime.instance().extensions('emulated-device'); for (const extension of extensions) { const device = EmulatedDevice.fromJSONV1(extension.descriptor()['device']); device.setExtension(extension); diff --git a/front_end/lighthouse_worker/LighthouseService.js b/front_end/lighthouse_worker/LighthouseService.js index 4ed29710e4..3fd8623d27 100644 --- a/front_end/lighthouse_worker/LighthouseService.js +++ b/front_end/lighthouse_worker/LighthouseService.js @@ -5,6 +5,8 @@ // @ts-nocheck // TODO(crbug.com/1011811): Enable TypeScript compiler checks +import * as Root from '../root/root.js'; + /** * @interface */ @@ -45,7 +47,7 @@ class LighthouseService { // eslint-disable-line * @return {!Promise} */ start(params) { - if (Root.Runtime.queryParam('isUnderTest')) { + if (Root.Runtime.Runtime.queryParam('isUnderTest')) { this._disableLoggingForTest(); params.flags.maxWaitForLoad = 2 * 1000; } @@ -93,8 +95,7 @@ class LighthouseService { // eslint-disable-line // Try to load the locale data. const localeResource = `../third_party/lighthouse/locales/${locale}.json`; try { - // @ts-ignore self.runtime needs to be moved to ESModules so we can import this - const module = self.runtime.module('lighthouse_worker'); + const module = Root.Runtime.Runtime.instance().module('lighthouse_worker'); const localeDataText = await module.fetchResource(localeResource); const localeData = JSON.parse(localeDataText); self.registerLocaleData(locale, localeData); diff --git a/front_end/main/MainImpl.js b/front_end/main/MainImpl.js index 5f82bcea85..16ccc801aa 100644 --- a/front_end/main/MainImpl.js +++ b/front_end/main/MainImpl.js @@ -43,6 +43,7 @@ import * as Host from '../host/host.js'; import * as Persistence from '../persistence/persistence.js'; import * as Platform from '../platform/platform.js'; import * as ProtocolClient from '../protocol_client/protocol_client.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as ThemeSupport from '../theme_support/theme_support.js'; import * as UI from '../ui/ui.js'; @@ -85,8 +86,8 @@ export class MainImpl { async _loaded() { console.timeStamp('Main._loaded'); await Runtime.appStarted; - Root.Runtime.setPlatform(Host.Platform.platform()); - Root.Runtime.setL10nCallback(ls); + Root.Runtime.Runtime.setPlatform(Host.Platform.platform()); + Root.Runtime.Runtime.setL10nCallback(ls); Host.InspectorFrontendHost.InspectorFrontendHostInstance.getPreferences(this._gotPreferences.bind(this)); } @@ -109,7 +110,7 @@ export class MainImpl { if (Host.Platform.isCustomDevtoolsFrontend()) { storagePrefix = '__custom__'; } else if ( - !Root.Runtime.queryParam('can_dock') && !!Root.Runtime.queryParam('debugFrontend') && + !Root.Runtime.Runtime.queryParam('can_dock') && !!Root.Runtime.Runtime.queryParam('debugFrontend') && !Host.InspectorFrontendHost.isUnderTest()) { storagePrefix = '__bundled__'; } @@ -190,7 +191,7 @@ export class MainImpl { 'cssGridFeatures', ]); Root.Runtime.experiments.cleanUpStaleExperiments(); - const enabledExperiments = Root.Runtime.queryParam('enabledExperiments'); + const enabledExperiments = Root.Runtime.Runtime.queryParam('enabledExperiments'); if (enabledExperiments) { Root.Runtime.experiments.setServerEnabledExperiments(enabledExperiments.split(';')); } @@ -204,7 +205,7 @@ export class MainImpl { ]); if (Host.InspectorFrontendHost.isUnderTest() && - Root.Runtime.queryParam('test').includes('live-line-level-heap-profile.js')) { + Root.Runtime.Runtime.queryParam('test').includes('live-line-level-heap-profile.js')) { Root.Runtime.experiments.enableForTest('liveHeapProfile'); } @@ -240,7 +241,7 @@ export class MainImpl { this._addMainEventListeners(document); - const canDock = !!Root.Runtime.queryParam('can_dock'); + const canDock = !!Root.Runtime.Runtime.queryParam('can_dock'); self.UI.zoomManager = UI.ZoomManager.ZoomManager.instance( {forceNew: true, win: window, frontendHost: Host.InspectorFrontendHost.InspectorFrontendHostInstance}); self.UI.inspectorView = UI.InspectorView.InspectorView.instance(); @@ -318,7 +319,7 @@ export class MainImpl { this._registerMessageSinkListener(); MainImpl.timeEnd('Main._createAppUI'); - this._showAppUI(await self.runtime.extension(Common.AppProvider.AppProvider).instance()); + this._showAppUI(await Root.Runtime.Runtime.instance().extension(Common.AppProvider.AppProvider).instance()); } /** @@ -347,22 +348,17 @@ export class MainImpl { UI.InspectorView.InspectorView.instance().createToolbars(); Host.InspectorFrontendHost.InspectorFrontendHostInstance.loadCompleted(); - const extensions = self.runtime.extensions(Common.QueryParamHandler.QueryParamHandler); + const extensions = Root.Runtime.Runtime.instance().extensions(Common.QueryParamHandler.QueryParamHandler); for (const extension of extensions) { - const value = Root.Runtime.queryParam(extension.descriptor()['name']); + const value = Root.Runtime.Runtime.queryParam(extension.descriptor()['name']); if (value !== null) { - extension.instance().then(handleQueryParam.bind(null, value)); + extension.instance().then(handler => { + /** @type {!Common.QueryParamHandler.QueryParamHandler} */ (handler).handleQueryParam( + /** @type {string} */ (value)); + }); } } - /** - * @param {string} value - * @param {!Common.QueryParamHandler.QueryParamHandler} handler - */ - function handleQueryParam(value, handler) { - handler.handleQueryParam(value); - } - // Allow UI cycles to repaint prior to creating connection. setTimeout(this._initializeTarget.bind(this), 0); MainImpl.timeEnd('Main._showAppUI'); @@ -370,8 +366,8 @@ export class MainImpl { async _initializeTarget() { MainImpl.time('Main._initializeTarget'); - const instances = - await Promise.all(self.runtime.extensions('early-initialization').map(extension => extension.instance())); + const instances = await Promise.all( + Root.Runtime.Runtime.instance().extensions('early-initialization').map(extension => extension.instance())); for (const instance of instances) { await /** @type {!Common.Runnable.Runnable} */ (instance).run(); } @@ -386,7 +382,7 @@ export class MainImpl { MainImpl.time('Main._lateInitialization'); this._registerShortcuts(); Extensions.ExtensionServer.ExtensionServer.instance().initializeExtensions(); - const extensions = self.runtime.extensions('late-initialization'); + const extensions = Root.Runtime.Runtime.instance().extensions('late-initialization'); const promises = []; for (const extension of extensions) { const setting = extension.descriptor()['setting']; @@ -740,7 +736,7 @@ export class MainMenuItem { Common.UIString.UIString('Show console drawer')); contextMenu.appendItemsAtLocation('mainMenu'); const moreTools = contextMenu.defaultSection().appendSubMenuItem(Common.UIString.UIString('More tools')); - const extensions = self.runtime.extensions('view', undefined, true); + const extensions = Root.Runtime.Runtime.instance().extensions('view', undefined, true); for (const extension of extensions) { const descriptor = extension.descriptor(); diff --git a/front_end/object_ui/JavaScriptAutocomplete.js b/front_end/object_ui/JavaScriptAutocomplete.js index 4f0ffd7eaf..8e709a3b57 100644 --- a/front_end/object_ui/JavaScriptAutocomplete.js +++ b/front_end/object_ui/JavaScriptAutocomplete.js @@ -8,6 +8,7 @@ import * as Common from '../common/common.js'; import * as Formatter from '../formatter/formatter.js'; import * as Platform from '../platform/platform.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as TextUtils from '../text_utils/text_utils.js'; import * as UI from '../ui/ui.js'; @@ -132,7 +133,8 @@ export class JavaScriptAutocomplete { return clippedArgs; } } - const javaScriptMetadata = await self.runtime.extension(Common.JavaScriptMetaData.JavaScriptMetaData).instance(); + const javaScriptMetadata = + await Root.Runtime.Runtime.instance().extension(Common.JavaScriptMetaData.JavaScriptMetaData).instance(); const name = /^function ([^(]*)\(/.exec(description)[1] || parsedFunctionName; if (!name) { diff --git a/front_end/perf_ui/LiveHeapProfile.js b/front_end/perf_ui/LiveHeapProfile.js index f45aacbc1e..1321855658 100644 --- a/front_end/perf_ui/LiveHeapProfile.js +++ b/front_end/perf_ui/LiveHeapProfile.js @@ -7,6 +7,7 @@ import * as Common from '../common/common.js'; // eslint-disable-line no-unused-vars import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import {Memory} from './LineLevelProfile.js'; @@ -65,7 +66,7 @@ export class LiveHeapProfile { if (sessionId !== this._sessionId) { break; } - const lineLevelProfile = self.runtime.sharedInstance(Memory); + const lineLevelProfile = Root.Runtime.Runtime.instance().sharedInstance(Memory); lineLevelProfile.reset(); for (let i = 0; i < profiles.length; ++i) { if (profiles[i]) { @@ -85,7 +86,7 @@ export class LiveHeapProfile { for (const model of SDK.SDKModel.TargetManager.instance().models(SDK.HeapProfilerModel.HeapProfilerModel)) { model.stopSampling(); } - self.runtime.sharedInstance(Memory).reset(); + Root.Runtime.Runtime.instance().sharedInstance(Memory).reset(); } _stopProfiling() { diff --git a/front_end/profiler/CPUProfileView.js b/front_end/profiler/CPUProfileView.js index 4f92fd4511..e677576707 100644 --- a/front_end/profiler/CPUProfileView.js +++ b/front_end/profiler/CPUProfileView.js @@ -30,6 +30,7 @@ import * as Common from '../common/common.js'; import * as Components from '../components/components.js'; import * as Host from '../host/host.js'; import * as PerfUI from '../perf_ui/perf_ui.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as UI from '../ui/ui.js'; @@ -61,7 +62,7 @@ export class CPUProfileView extends ProfileView { */ wasShown() { super.wasShown(); - const lineLevelProfile = self.runtime.sharedInstance(PerfUI.LineLevelProfile.Performance); + const lineLevelProfile = Root.Runtime.Runtime.instance().sharedInstance(PerfUI.LineLevelProfile.Performance); lineLevelProfile.reset(); lineLevelProfile.appendCPUProfile(this._profileHeader.profileModel()); } diff --git a/front_end/quick_open/CommandMenu.js b/front_end/quick_open/CommandMenu.js index d0ef74677a..57dab7c1b6 100644 --- a/front_end/quick_open/CommandMenu.js +++ b/front_end/quick_open/CommandMenu.js @@ -8,6 +8,7 @@ import * as Common from '../common/common.js'; import * as Diff from '../diff/diff.js'; import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import * as UI from '../ui/ui.js'; import {FilteredListWidget, Provider} from './FilteredListWidget.js'; @@ -122,14 +123,14 @@ export class CommandMenu { _loadCommands() { const locations = new Map(); - self.runtime.extensions(UI.View.ViewLocationResolver).forEach(extension => { + Root.Runtime.Runtime.instance().extensions(UI.View.ViewLocationResolver).forEach(extension => { const category = extension.descriptor()['category']; const name = extension.descriptor()['name']; if (category && name) { locations.set(name, category); } }); - const viewExtensions = self.runtime.extensions('view'); + const viewExtensions = Root.Runtime.Runtime.instance().extensions('view'); for (const extension of viewExtensions) { const category = locations.get(extension.descriptor()['location']); if (!category) { @@ -142,7 +143,7 @@ export class CommandMenu { } // Populate allowlisted settings. - const settingExtensions = self.runtime.extensions('setting'); + const settingExtensions = Root.Runtime.Runtime.instance().extensions('setting'); for (const extension of settingExtensions) { const options = extension.descriptor()['options']; if (!options || !extension.descriptor()['category']) { diff --git a/front_end/quick_open/HelpQuickOpen.js b/front_end/quick_open/HelpQuickOpen.js index cc6c4b1a02..87f14206d9 100644 --- a/front_end/quick_open/HelpQuickOpen.js +++ b/front_end/quick_open/HelpQuickOpen.js @@ -5,6 +5,8 @@ // @ts-nocheck // TODO(crbug.com/1011811): Enable TypeScript compiler checks +import * as Root from '../root/root.js'; + import {Provider} from './FilteredListWidget.js'; import {QuickOpenImpl} from './QuickOpen.js'; @@ -13,7 +15,7 @@ export class HelpQuickOpen extends Provider { super(); /** @type {!Array<{prefix: string, title: string}>} */ this._providers = []; - self.runtime.extensions(Provider).forEach(this._addProvider.bind(this)); + Root.Runtime.Runtime.instance().extensions(Provider).forEach(this._addProvider.bind(this)); } /** diff --git a/front_end/quick_open/QuickOpen.js b/front_end/quick_open/QuickOpen.js index fdc857f2fb..beb52d5494 100644 --- a/front_end/quick_open/QuickOpen.js +++ b/front_end/quick_open/QuickOpen.js @@ -5,6 +5,7 @@ // @ts-nocheck // TODO(crbug.com/1011811): Enable TypeScript compiler checks +import * as Root from '../root/root.js'; import * as UI from '../ui/ui.js'; // eslint-disable-line no-unused-vars import {FilteredListWidget, Provider} from './FilteredListWidget.js'; @@ -23,7 +24,7 @@ export class QuickOpenImpl { /** @type {!Array} */ this._prefixes = []; this._filteredListWidget = null; - self.runtime.extensions(Provider).forEach(this._addProvider.bind(this)); + Root.Runtime.Runtime.instance().extensions(Provider).forEach(this._addProvider.bind(this)); this._prefixes.sort((a, b) => b.length - a.length); } diff --git a/front_end/resources/ResourcesPanel.js b/front_end/resources/ResourcesPanel.js index 29721bedce..ebd90e11ac 100644 --- a/front_end/resources/ResourcesPanel.js +++ b/front_end/resources/ResourcesPanel.js @@ -6,6 +6,7 @@ // TODO(crbug.com/1011811): Enable TypeScript compiler checks import * as Common from '../common/common.js'; // eslint-disable-line no-unused-vars +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as SourceFrame from '../source_frame/source_frame.js'; import * as UI from '../ui/ui.js'; @@ -57,7 +58,7 @@ export class ResourcesPanel extends UI.Panel.PanelWithSidebar { * @return {!ResourcesPanel} */ static _instance() { - return /** @type {!ResourcesPanel} */ (self.runtime.sharedInstance(ResourcesPanel)); + return /** @type {!ResourcesPanel} */ (Root.Runtime.Runtime.instance().sharedInstance(ResourcesPanel)); } /** diff --git a/front_end/root/Runtime.js b/front_end/root/Runtime.js index 8fb74ce674..3955158657 100644 --- a/front_end/root/Runtime.js +++ b/front_end/root/Runtime.js @@ -547,6 +547,9 @@ export class RuntimeExtensionDescriptor { /** @type {string|null} */ this.name; + + /** @type {string|null} */ + this.destination; } } diff --git a/front_end/sdk/CPUProfilerModel.js b/front_end/sdk/CPUProfilerModel.js index e1b12c393f..b99731a598 100644 --- a/front_end/sdk/CPUProfilerModel.js +++ b/front_end/sdk/CPUProfilerModel.js @@ -29,6 +29,7 @@ */ import * as Common from '../common/common.js'; +import * as Root from '../root/root.js'; import {DebuggerModel, Location} from './DebuggerModel.js'; import {RuntimeModel} from './RuntimeModel.js'; // eslint-disable-line no-unused-vars @@ -90,9 +91,7 @@ export class CPUProfilerModel extends SDKModel { this._anonymousConsoleProfileIdToTitle.delete(id); } // Make sure ProfilesPanel is initialized and CPUProfileType is created. - // @ts-ignore - // TODO(crbug.com/1058320): Using Root.Runtime.Runtime.instance() here causes layout tests to fail. - self.runtime.loadModulePromise('profiler').then(() => { + Root.Runtime.Runtime.instance().loadModulePromise('profiler').then(() => { this._dispatchProfileEvent(Events.ConsoleProfileFinished, id, location, title, profile); }); } diff --git a/front_end/sdk/CSSProperty.js b/front_end/sdk/CSSProperty.js index 4c8ac0fb6c..6f9ba062fd 100644 --- a/front_end/sdk/CSSProperty.js +++ b/front_end/sdk/CSSProperty.js @@ -5,6 +5,7 @@ import * as Common from '../common/common.js'; import * as HostModule from '../host/host.js'; import * as Platform from '../platform/platform.js'; +import * as Root from '../root/root.js'; import * as TextUtils from '../text_utils/text_utils.js'; import {cssMetadata, GridAreaRowRegex} from './CSSMetadata.js'; @@ -187,9 +188,11 @@ export class CSSProperty { const endIndentation = this.ownerStyle.cssText ? indentation.substring(0, this.ownerStyle.range.endColumn) : ''; const text = new TextUtils.Text.Text(this.ownerStyle.cssText || ''); const newStyleText = text.replaceRange(range, Platform.StringUtilities.sprintf(';%s;', propertyText)); - // TODO(crbug.com/1081614) replace self.runtime with Root.Runtime.Runtime.instance() - // @ts-ignore: undefined `self.runtime` - const tokenizerFactory = await self.runtime.extension(TextUtils.TextUtils.TokenizerFactory).instance(); + const tokenizerFactory = + /** @type {!TextUtils.TextUtils.TokenizerFactory} */ ( + await /** @type {!Root.Runtime.Extension} */ ( + Root.Runtime.Runtime.instance().extension(TextUtils.TextUtils.TokenizerFactory)) + .instance()); const styleText = CSSProperty._formatStyle(newStyleText, indentation, endIndentation, tokenizerFactory); return this.ownerStyle.setText(styleText, majorChange); } diff --git a/front_end/security/SecurityPanel.js b/front_end/security/SecurityPanel.js index a045bcad61..d34d8302c1 100644 --- a/front_end/security/SecurityPanel.js +++ b/front_end/security/SecurityPanel.js @@ -8,6 +8,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as Network from '../network/network.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as UI from '../ui/ui.js'; @@ -49,7 +50,7 @@ export class SecurityPanel extends UI.Panel.PanelWithSidebar { */ static _instance() { return ( - /** @type {!SecurityPanel} */ (self.runtime.sharedInstance(SecurityPanel))); + /** @type {!SecurityPanel} */ (Root.Runtime.Runtime.instance().sharedInstance(SecurityPanel))); } /** diff --git a/front_end/settings/SettingsScreen.js b/front_end/settings/SettingsScreen.js index 1b56a51b99..dc1dc1ac17 100644 --- a/front_end/settings/SettingsScreen.js +++ b/front_end/settings/SettingsScreen.js @@ -34,6 +34,7 @@ import * as Common from '../common/common.js'; import * as Components from '../components/components.js'; import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import * as UI from '../ui/ui.js'; /** @@ -79,7 +80,7 @@ export class SettingsScreen extends UI.Widget.VBox { */ static _revealSettingsScreen() { /** @type {!SettingsScreen} */ - const settingsScreen = self.runtime.sharedInstance(SettingsScreen); + const settingsScreen = Root.Runtime.Runtime.instance().sharedInstance(SettingsScreen); if (settingsScreen.isShowing()) { return settingsScreen; } @@ -217,8 +218,8 @@ export class GenericSettingsTab extends SettingsTab { for (const sectionName of explicitSectionOrder) { this._createSectionElement(sectionName); } - self.runtime.extensions('setting').forEach(this._addSetting.bind(this)); - self.runtime.extensions(UI.SettingsUI.SettingUI).forEach(this._addSettingUI.bind(this)); + Root.Runtime.Runtime.instance().extensions('setting').forEach(this._addSetting.bind(this)); + Root.Runtime.Runtime.instance().extensions(UI.SettingsUI.SettingUI).forEach(this._addSettingUI.bind(this)); this._appendSection().appendChild( UI.UIUtils.createTextButton(Common.UIString.UIString('Restore defaults and reload'), restoreAndReload)); @@ -418,9 +419,9 @@ export class Revealer { const setting = /** @type {!Common.Settings.Setting} */ (object); let success = false; - self.runtime.extensions('setting').forEach(revealModuleSetting); - self.runtime.extensions(UI.SettingsUI.SettingUI).forEach(revealSettingUI); - self.runtime.extensions('view').forEach(revealSettingsView); + Root.Runtime.Runtime.instance().extensions('setting').forEach(revealModuleSetting); + Root.Runtime.Runtime.instance().extensions(UI.SettingsUI.SettingUI).forEach(revealSettingUI); + Root.Runtime.Runtime.instance().extensions('view').forEach(revealSettingsView); return success ? Promise.resolve() : Promise.reject(); diff --git a/front_end/sources/BreakpointEditDialog.js b/front_end/sources/BreakpointEditDialog.js index 978fac0d63..a5f649cd4c 100644 --- a/front_end/sources/BreakpointEditDialog.js +++ b/front_end/sources/BreakpointEditDialog.js @@ -6,6 +6,7 @@ // TODO(crbug.com/1011811): Enable TypeScript compiler checks import * as ObjectUI from '../object_ui/object_ui.js'; +import * as Root from '../root/root.js'; import * as UI from '../ui/ui.js'; export class BreakpointEditDialog extends UI.Widget.Widget { @@ -43,7 +44,7 @@ export class BreakpointEditDialog extends UI.Widget.Widget { this._typeSelector.select(this._isLogpoint ? logpointOption : conditionalOption); toolbar.appendToolbarItem(this._typeSelector); - self.runtime.extension(UI.TextEditor.TextEditorFactory).instance().then(factory => { + Root.Runtime.Runtime.instance().extension(UI.TextEditor.TextEditorFactory).instance().then(factory => { const editorOptions = {lineNumbers: false, lineWrapping: true, mimeType: 'javascript', autoHeight: true}; this._editor = factory.createEditor(editorOptions); this._updatePlaceholder(); diff --git a/front_end/sources/CallStackSidebarPane.js b/front_end/sources/CallStackSidebarPane.js index 0f28c8a82c..00b7d023b2 100644 --- a/front_end/sources/CallStackSidebarPane.js +++ b/front_end/sources/CallStackSidebarPane.js @@ -30,6 +30,7 @@ import * as Bindings from '../bindings/bindings.js'; import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as Persistence from '../persistence/persistence.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as UI from '../ui/ui.js'; import * as Workspace from '../workspace/workspace.js'; @@ -493,7 +494,7 @@ export class ActionDelegate { * @return {boolean} */ handleAction(context, actionId) { - const callStackSidebarPane = self.runtime.sharedInstance(CallStackSidebarPane); + const callStackSidebarPane = Root.Runtime.Runtime.instance().sharedInstance(CallStackSidebarPane); switch (actionId) { case 'debugger.next-call-frame': callStackSidebarPane._selectNextCallFrameOnStack(); diff --git a/front_end/sources/DebuggerPlugin.js b/front_end/sources/DebuggerPlugin.js index 24867f2e0c..5e43883818 100644 --- a/front_end/sources/DebuggerPlugin.js +++ b/front_end/sources/DebuggerPlugin.js @@ -35,6 +35,7 @@ import * as Bindings from '../bindings/bindings.js'; import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as ObjectUI from '../object_ui/object_ui.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as SourceFrame from '../source_frame/source_frame.js'; import * as TextEditor from '../text_editor/text_editor.js'; @@ -1645,7 +1646,7 @@ export class DebuggerPlugin extends Plugin { return; } - const editorActions = await self.runtime.allInstances(Sources.SourcesView.EditorAction); + const editorActions = await Root.Runtime.Runtime.instance().allInstances(Sources.SourcesView.EditorAction); let formatterCallback = null; for (const editorAction of editorActions) { if (editorAction instanceof Sources.ScriptFormatterEditorAction) { diff --git a/front_end/sources/SourcesPanel.js b/front_end/sources/SourcesPanel.js index 156b9de9d9..ebe0e47b77 100644 --- a/front_end/sources/SourcesPanel.js +++ b/front_end/sources/SourcesPanel.js @@ -32,6 +32,7 @@ import * as Common from '../common/common.js'; import * as Extensions from '../extensions/extensions.js'; import * as Host from '../host/host.js'; import * as ObjectUI from '../object_ui/object_ui.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as Snippets from '../snippets/snippets.js'; import * as UI from '../ui/ui.js'; @@ -128,7 +129,7 @@ export class SourcesPanel extends UI.Panel.Panel { this._threadsSidebarPane = null; this._watchSidebarPane = /** @type {!UI.View.View} */ (UI.ViewManager.ViewManager.instance().view('sources.watch')); - this._callstackPane = self.runtime.sharedInstance(CallStackSidebarPane); + this._callstackPane = Root.Runtime.Runtime.instance().sharedInstance(CallStackSidebarPane); Common.Settings.Settings.instance() .moduleSetting('sidebarPosition') @@ -434,7 +435,7 @@ export class SourcesPanel extends UI.Panel.Panel { * @param {boolean=} skipReveal */ _revealInNavigator(uiSourceCode, skipReveal) { - const extensions = self.runtime.extensions(NavigatorView); + const extensions = Root.Runtime.Runtime.instance().extensions(NavigatorView); Promise.all(extensions.map(extension => extension.instance())).then(filterNavigators.bind(this)); /** diff --git a/front_end/sources/SourcesView.js b/front_end/sources/SourcesView.js index 2dd2d466b1..0f8ee55f0e 100644 --- a/front_end/sources/SourcesView.js +++ b/front_end/sources/SourcesView.js @@ -9,6 +9,7 @@ import * as Common from '../common/common.js'; import * as Persistence from '../persistence/persistence.js'; import * as Platform from '../platform/platform.js'; import * as QuickOpen from '../quick_open/quick_open.js'; +import * as Root from '../root/root.js'; import * as SourceFrame from '../source_frame/source_frame.js'; import * as UI from '../ui/ui.js'; import * as Workspace from '../workspace/workspace.js'; @@ -54,7 +55,7 @@ export class SourcesView extends UI.Widget.VBox { this._toolbarContainerElement = this.element.createChild('div', 'sources-toolbar'); if (!Root.Runtime.experiments.isEnabled('sourcesPrettyPrint')) { this._toolbarEditorActions = new UI.Toolbar.Toolbar('', this._toolbarContainerElement); - self.runtime.allInstances(EditorAction).then(appendButtonsForExtensions.bind(this)); + Root.Runtime.Runtime.instance().allInstances(EditorAction).then(appendButtonsForExtensions.bind(this)); } /** * @param {!Array.} actions diff --git a/front_end/sources/UISourceCodeFrame.js b/front_end/sources/UISourceCodeFrame.js index 70476fa083..8e8330a33e 100644 --- a/front_end/sources/UISourceCodeFrame.js +++ b/front_end/sources/UISourceCodeFrame.js @@ -34,6 +34,7 @@ import * as Common from '../common/common.js'; import * as Persistence from '../persistence/persistence.js'; // eslint-disable-line no-unused-vars import * as Platform from '../platform/platform.js'; +import * as Root from '../root/root.js'; import * as SourceFrame from '../source_frame/source_frame.js'; import * as TextEditor from '../text_editor/text_editor.js'; // eslint-disable-line no-unused-vars import * as TextUtils from '../text_utils/text_utils.js'; @@ -590,7 +591,8 @@ export class UISourceCodeFrame extends SourceFrame.SourceFrame.SourceFrameImpl { return; } this._typeDecorationsPending.add(type); - const decorator = await self.runtime.extensions(SourceFrame.SourceFrame.LineDecorator) + const decorator = await Root.Runtime.Runtime.instance() + .extensions(SourceFrame.SourceFrame.LineDecorator) .find(extension => extension.descriptor()['decoratorType'] === type) .instance(); this._typeDecorationsPending.delete(type); @@ -604,7 +606,7 @@ export class UISourceCodeFrame extends SourceFrame.SourceFrame.SourceFrameImpl { if (!this.loaded) { return; } - for (const extension of self.runtime.extensions(SourceFrame.SourceFrame.LineDecorator)) { + for (const extension of Root.Runtime.Runtime.instance().extensions(SourceFrame.SourceFrame.LineDecorator)) { const type = extension.descriptor()['decoratorType']; if (this._uiSourceCode.decorationsForType(type)) { this._decorateTypeThrottled(type); diff --git a/front_end/text_editor/CodeMirrorTextEditor.js b/front_end/text_editor/CodeMirrorTextEditor.js index c26968ad1e..01ec5d1e71 100644 --- a/front_end/text_editor/CodeMirrorTextEditor.js +++ b/front_end/text_editor/CodeMirrorTextEditor.js @@ -33,6 +33,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as Platform from '../platform/platform.js'; +import * as Root from '../root/root.js'; import * as TextUtils from '../text_utils/text_utils.js'; import * as UI from '../ui/ui.js'; @@ -308,7 +309,7 @@ export class CodeMirrorTextEditor extends UI.Widget.VBox { const installed = loadedMimeModeExtensions; const nameToExtension = new Map(); - const extensions = self.runtime.extensions(CodeMirrorMimeMode); + const extensions = Root.Runtime.Runtime.instance().extensions(CodeMirrorMimeMode); for (const extension of extensions) { nameToExtension.set(extension.descriptor()['fileName'], extension); } diff --git a/front_end/timeline/TimelinePanel.js b/front_end/timeline/TimelinePanel.js index 77dcb94c8c..d2c46349b7 100644 --- a/front_end/timeline/TimelinePanel.js +++ b/front_end/timeline/TimelinePanel.js @@ -39,6 +39,7 @@ import * as MobileThrottling from '../mobile_throttling/mobile_throttling.js'; import * as PerfUI from '../perf_ui/perf_ui.js'; import * as Platform from '../platform/platform.js'; import * as ProtocolClient from '../protocol_client/protocol_client.js'; +import * as Root from '../root/root.js'; import * as SDK from '../sdk/sdk.js'; import * as TimelineModel from '../timeline_model/timeline_model.js'; import * as UI from '../ui/ui.js'; @@ -676,7 +677,7 @@ export class TimelinePanel extends UI.Panel.Panel { } _reset() { - self.runtime.sharedInstance(PerfUI.LineLevelProfile.Performance).reset(); + Root.Runtime.Runtime.instance().sharedInstance(PerfUI.LineLevelProfile.Performance).reset(); this._setModel(null); } @@ -713,7 +714,7 @@ export class TimelinePanel extends UI.Panel.Panel { this._overviewPane.setNavStartTimes(model.timelineModel().navStartTimes()); this._overviewPane.setBounds( model.timelineModel().minimumRecordTime(), model.timelineModel().maximumRecordTime()); - const lineLevelProfile = self.runtime.sharedInstance(PerfUI.LineLevelProfile.Performance); + const lineLevelProfile = Root.Runtime.Runtime.instance().sharedInstance(PerfUI.LineLevelProfile.Performance); lineLevelProfile.reset(); for (const profile of model.timelineModel().cpuProfiles()) { lineLevelProfile.appendCPUProfile(profile); diff --git a/front_end/ui/ActionRegistry.js b/front_end/ui/ActionRegistry.js index 35b5e56862..10081047b0 100644 --- a/front_end/ui/ActionRegistry.js +++ b/front_end/ui/ActionRegistry.js @@ -33,9 +33,7 @@ export class ActionRegistry { } _registerActions() { - // @ts-ignore - // TODO(crbug.com/1058320): Use Runtime.instance() once it no longer crashes at this point. - self.runtime.extensions('action').forEach(registerExtension, this); + Root.Runtime.Runtime.instance().extensions('action').forEach(registerExtension, this); /** * @param {!Root.Runtime.Extension} extension diff --git a/front_end/ui/Context.js b/front_end/ui/Context.js index 5a52e96b60..c09ad69835 100644 --- a/front_end/ui/Context.js +++ b/front_end/ui/Context.js @@ -4,6 +4,7 @@ import * as Common from '../common/common.js'; import * as Root from '../root/root.js'; // eslint-disable-line no-unused-vars + import {ContextFlavorListener} from './ContextFlavorListener.js'; /** @type {!Context} */ @@ -60,10 +61,7 @@ export class Context { * @template T */ _dispatchFlavorChange(flavorType, flavorValue) { - // @ts-ignore - // TODO(crbug.com/1058320): Use Runtime.instance() here once we no longer crash using it. - const runtime = /** @type {!Root.Runtime.Runtime} */ (self.runtime); - for (const extension of runtime.extensions(ContextFlavorListener)) { + for (const extension of Root.Runtime.Runtime.instance().extensions(ContextFlavorListener)) { if (extension.hasContextType(flavorType)) { extension.instance().then( instance => /** @type {!ContextFlavorListener} */ (instance).flavorChanged(flavorValue)); @@ -131,9 +129,7 @@ export class Context { const availableFlavors = this.flavors(); for (const extension of extensions) { - // @ts-ignore - // TODO(crbug.com/1058320): Use Runtime.instance() here once Closure is gone or can handle the type. - if (self.runtime.isExtensionApplicableToContextTypes(extension, availableFlavors)) { + if (Root.Runtime.Runtime.instance().isExtensionApplicableToContextTypes(extension, availableFlavors)) { targetExtensionSet.add(extension); } } diff --git a/front_end/ui/ContextMenu.js b/front_end/ui/ContextMenu.js index 2f03b24500..c85d981451 100644 --- a/front_end/ui/ContextMenu.js +++ b/front_end/ui/ContextMenu.js @@ -33,6 +33,7 @@ import * as Common from '../common/common.js'; // eslint-disable-line no-unused-vars import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import {ActionRegistry} from './ActionRegistry.js'; import {ShortcutRegistry} from './ShortcutRegistry.js'; @@ -346,7 +347,7 @@ export class SubMenu extends Item { * @param {string} location */ appendItemsAtLocation(location) { - for (const extension of self.runtime.extensions('context-menu-item')) { + for (const extension of Root.Runtime.Runtime.instance().extensions('context-menu-item')) { const itemLocation = extension.descriptor()['location'] || ''; if (!itemLocation.startsWith(location + '/')) { continue; @@ -559,7 +560,7 @@ export class ContextMenu extends SubMenu { * @param {!Object} target */ appendApplicableItems(target) { - this._pendingPromises.push(self.runtime.allInstances(Provider, target)); + this._pendingPromises.push(Root.Runtime.Runtime.instance().allInstances(Provider, target)); this._pendingTargets.push(target); } } diff --git a/front_end/ui/ShortcutRegistry.js b/front_end/ui/ShortcutRegistry.js index 55e1e077af..daf825603a 100644 --- a/front_end/ui/ShortcutRegistry.js +++ b/front_end/ui/ShortcutRegistry.js @@ -8,6 +8,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as Platform from '../platform/platform.js'; +import * as Root from '../root/root.js'; import {Action} from './Action.js'; // eslint-disable-line no-unused-vars import {ActionRegistry} from './ActionRegistry.js'; // eslint-disable-line no-unused-vars @@ -396,7 +397,7 @@ export class ShortcutRegistry { this._actionToShortcut.clear(); this._keyMap.clear(); const keybindSet = this._keybindSetSetting.get(); - const extensions = self.runtime.extensions('action'); + const extensions = Root.Runtime.Runtime.instance().extensions('action'); this._disabledDefaultShortcutsForAction.clear(); this._devToolsDefaultShortcutActions.clear(); const forwardedKeys = []; diff --git a/front_end/ui/SyntaxHighlighter.js b/front_end/ui/SyntaxHighlighter.js index 51ff864ecf..d99e953dec 100644 --- a/front_end/ui/SyntaxHighlighter.js +++ b/front_end/ui/SyntaxHighlighter.js @@ -67,10 +67,7 @@ export class SyntaxHighlighter { /** @type {string} */ let line; - // @ts-ignore - // TODO(crbug.com/1058320): Replace self.runtime global. - const runtime = /** @type {!Root.Runtime.Runtime} */ (self.runtime); - const extension = runtime.extension(TextUtils.TextUtils.TokenizerFactory); + const extension = Root.Runtime.Runtime.instance().extension(TextUtils.TextUtils.TokenizerFactory); if (extension) { return extension.instance().then( factory => processTokens.call(this, /** @type {!TextUtils.TextUtils.TokenizerFactory} */ (factory))); diff --git a/front_end/ui/Toolbar.js b/front_end/ui/Toolbar.js index 1d176177a2..21a812118d 100644 --- a/front_end/ui/Toolbar.js +++ b/front_end/ui/Toolbar.js @@ -33,6 +33,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import {Action, Events as ActionEvents} from './Action.js'; // eslint-disable-line no-unused-vars import {ActionRegistry} from './ActionRegistry.js'; @@ -400,7 +401,7 @@ export class Toolbar { * @return {!Promise} */ async appendItemsAtLocation(location) { - const extensions = self.runtime.extensions(Provider); + const extensions = Root.Runtime.Runtime.instance().extensions(Provider); const filtered = extensions.filter(e => e.descriptor()['location'] === location); const items = await Promise.all(filtered.map(extension => { const descriptor = extension.descriptor(); diff --git a/front_end/ui/UIUtils.js b/front_end/ui/UIUtils.js index 179e1b55d5..8cc1b7149e 100644 --- a/front_end/ui/UIUtils.js +++ b/front_end/ui/UIUtils.js @@ -35,6 +35,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; import * as Platform from '../platform/platform.js'; +import * as Root from '../root/root.js'; import * as TextUtils from '../text_utils/text_utils.js'; import * as ThemeSupport from '../theme_support/theme_support.js'; @@ -1882,7 +1883,7 @@ Renderer.render = async function(object, options) { if (!object) { throw new Error('Can\'t render ' + object); } - const renderer = await self.runtime.extension(Renderer, object).instance(); + const renderer = await Root.Runtime.Runtime.instance().extension(Renderer, object).instance(); return renderer ? renderer.render(object, options || {}) : null; }; diff --git a/front_end/ui/ViewManager.js b/front_end/ui/ViewManager.js index 28e45c7974..996207a89d 100644 --- a/front_end/ui/ViewManager.js +++ b/front_end/ui/ViewManager.js @@ -7,6 +7,7 @@ import * as Common from '../common/common.js'; import * as Host from '../host/host.js'; +import * as Root from '../root/root.js'; import * as ARIAUtils from './ARIAUtils.js'; import {ContextMenu} from './ContextMenu.js'; // eslint-disable-line no-unused-vars @@ -38,7 +39,7 @@ export class ViewManager { this._locationOverrideSetting = Common.Settings.Settings.instance().createSetting('viewsLocationOverride', {}); const preferredExtensionLocations = this._locationOverrideSetting.get(); - for (const extension of self.runtime.extensions('view')) { + for (const extension of Root.Runtime.Runtime.instance().extensions('view')) { const descriptor = extension.descriptor(); const descriptorId = descriptor['id']; this._views.set(descriptorId, new ProvidedView(extension)); @@ -185,8 +186,9 @@ export class ViewManager { return /** @type {!Promise} */ (Promise.resolve(null)); } - const resolverExtensions = - self.runtime.extensions(ViewLocationResolver).filter(extension => extension.descriptor()['name'] === location); + const resolverExtensions = Root.Runtime.Runtime.instance() + .extensions(ViewLocationResolver) + .filter(extension => extension.descriptor()['name'] === location); if (!resolverExtensions.length) { throw new Error('Unresolved location: ' + location); } diff --git a/front_end/worker_service/BUILD.gn b/front_end/worker_service/BUILD.gn index 37ef7fb89a..24f423aeed 100644 --- a/front_end/worker_service/BUILD.gn +++ b/front_end/worker_service/BUILD.gn @@ -8,7 +8,7 @@ import("../../scripts/build/ninja/devtools_module.gni") devtools_module("worker_service") { sources = [ "ServiceDispatcher.js" ] - deps = [] + deps = [ "../root:bundle" ] } devtools_entrypoint("bundle") { diff --git a/front_end/worker_service/ServiceDispatcher.js b/front_end/worker_service/ServiceDispatcher.js index 07bbd01808..39788f536c 100644 --- a/front_end/worker_service/ServiceDispatcher.js +++ b/front_end/worker_service/ServiceDispatcher.js @@ -5,6 +5,8 @@ // @ts-nocheck // TODO(crbug.com/1011811): Enable TypeScript compiler checks +import * as Root from '../root/root.js'; + /** * @interface */ @@ -62,8 +64,8 @@ class ServiceDispatcher { const method = domainAndMethod[1]; if (method === 'create') { - const extensions = - self.runtime.extensions(Service).filter(extension => extension.descriptor()['name'] === serviceName); + const extensions = Root.Runtime.Runtime.instance().extensions(Service).filter( + extension => extension.descriptor()['name'] === serviceName); if (!extensions.length) { this._sendErrorResponse(message['id'], 'Could not resolve service \'' + serviceName + '\''); return; diff --git a/test/unittests/front_end/common/SettingsHelper.ts b/test/unittests/front_end/common/SettingsHelper.ts index 2f9cf6cd47..51a7b6fbc8 100644 --- a/test/unittests/front_end/common/SettingsHelper.ts +++ b/test/unittests/front_end/common/SettingsHelper.ts @@ -3,6 +3,7 @@ // found in the LICENSE file. import * as Common from '../../../../front_end/common/common.js'; +import * as Root from '../../../../front_end/root/root.js'; /** * This method sets up the local/global settings storage. Settings are not loaded @@ -14,10 +15,7 @@ import * as Common from '../../../../front_end/common/common.js'; * so settings can't leak between unit tests. */ export function resetSettingsStorage(): Common.Settings.Settings { - // @ts-ignore - // Settings instantiation looks up settings for extensions. - // We set a dummy value here, otherwise this will result in a call to undefined. - self.runtime = self.runtime || {extensions: () => []}; + Root.Runtime.Runtime.instance({forceNew: true, moduleDescriptors: []}); return Common.Settings.Settings.instance({ forceNew: true,