| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| Sources.CoveragePlugin = class extends Sources.UISourceCodeFrame.Plugin { |
| /** |
| * @param {!SourceFrame.SourcesTextEditor} textEditor |
| * @param {!Workspace.UISourceCode} uiSourceCode |
| */ |
| constructor(textEditor, uiSourceCode) { |
| super(); |
| |
| this._textEditor = textEditor; |
| this._uiSourceCode = uiSourceCode; |
| |
| /* @type {!Workspace.UISourceCode} uiSourceCode */ |
| this._originalSourceCode = Sources.sourceFormatter.getOriginalUISourceCode(this._uiSourceCode); |
| |
| this._text = new UI.ToolbarButton(ls`Click to show Coverage Panel`); |
| this._text.setSecondary(); |
| this._text.addEventListener(UI.ToolbarButton.Events.Click, () => { |
| UI.viewManager.showView('coverage'); |
| }); |
| |
| const mainTarget = SDK.targetManager.mainTarget(); |
| if (mainTarget) { |
| this._model = mainTarget.model(Coverage.CoverageModel); |
| this._model.addEventListener(Coverage.CoverageModel.Events.CoverageReset, this._handleReset, this); |
| |
| this._coverage = this._model.getCoverageForUrl(this._originalSourceCode.url()); |
| if (this._coverage) { |
| this._coverage.addEventListener( |
| Coverage.URLCoverageInfo.Events.SizesChanged, this._handleCoverageSizesChanged, this); |
| } |
| } |
| |
| this._updateStats(); |
| } |
| |
| /** |
| * @override |
| */ |
| dispose() { |
| if (this._coverage) { |
| this._coverage.removeEventListener( |
| Coverage.URLCoverageInfo.Events.SizesChanged, this._handleCoverageSizesChanged, this); |
| } |
| if (this._model) { |
| this._model.removeEventListener(Coverage.CoverageModel.Events.CoverageReset, this._handleReset, this); |
| } |
| } |
| |
| /** |
| * @override |
| * @param {!Workspace.UISourceCode} uiSourceCode |
| * @return {boolean} |
| */ |
| static accepts(uiSourceCode) { |
| return uiSourceCode.contentType().isDocumentOrScriptOrStyleSheet(); |
| } |
| |
| _handleReset() { |
| this._coverage = null; |
| this._updateStats(); |
| } |
| |
| _handleCoverageSizesChanged() { |
| this._updateStats(); |
| } |
| |
| _updateStats() { |
| if (this._coverage) { |
| this._text.setTitle(ls`Show Details`); |
| this._text.setText(ls`Coverage: ${this._coverage.usedPercentage().toFixed(1)} %`); |
| } else { |
| this._text.setTitle(ls`Click to show Coverage Panel`); |
| this._text.setText(ls`Coverage: n/a`); |
| } |
| } |
| |
| /** |
| * @override |
| * @return {!Array<!UI.ToolbarItem>} |
| */ |
| rightToolbarItems() { |
| return [this._text]; |
| } |
| }; |