Index: third_party/WebKit/Source/devtools/front_end/audits2/Audits2Panel.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/audits2/Audits2Panel.js b/third_party/WebKit/Source/devtools/front_end/audits2/Audits2Panel.js |
index 44475267d74e85512c302f094088e782b24eae4b..5f62072c95a4e5a6e75f088975ec96e7f77e5987 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/audits2/Audits2Panel.js |
+++ b/third_party/WebKit/Source/devtools/front_end/audits2/Audits2Panel.js |
@@ -3,6 +3,7 @@ |
// found in the LICENSE file. |
/** |
+ * @implements {SDK.SDKModelObserver<!SDK.ServiceWorkerManager>} |
* @unrestricted |
*/ |
Audits2.Audits2Panel = class extends UI.PanelWithSidebar { |
@@ -43,6 +44,90 @@ Audits2.Audits2Panel = class extends UI.PanelWithSidebar { |
for (var preset of Audits2.Audits2Panel.Presets) |
preset.setting.addChangeListener(this._updateStartButtonEnabled.bind(this)); |
this._showLandingPage(); |
+ SDK.targetManager.observeModels(SDK.ServiceWorkerManager, this); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!SDK.ServiceWorkerManager} serviceWorkerManager |
+ */ |
+ modelAdded(serviceWorkerManager) { |
+ if (this._manager) |
+ return; |
+ |
+ this._manager = serviceWorkerManager; |
+ this._serviceWorkerListeners = [ |
+ this._manager.addEventListener( |
+ SDK.ServiceWorkerManager.Events.RegistrationUpdated, this._updateStartButtonEnabled, this), |
+ this._manager.addEventListener( |
+ SDK.ServiceWorkerManager.Events.RegistrationDeleted, this._updateStartButtonEnabled, this), |
+ ]; |
+ |
+ this._updateStartButtonEnabled(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!SDK.ServiceWorkerManager} serviceWorkerManager |
+ */ |
+ modelRemoved(serviceWorkerManager) { |
+ if (!this._manager || this._manager !== serviceWorkerManager) |
+ return; |
+ |
+ Common.EventTarget.removeEventListeners(this._serviceWorkerListeners); |
+ this._manager = null; |
+ this._serviceWorkerListeners = null; |
+ this._updateStartButtonEnabled(); |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ _hasActiveServiceWorker() { |
+ if (!this._manager) |
+ return false; |
+ |
+ var inspectedURL = SDK.targetManager.mainTarget().inspectedURL().asParsedURL(); |
+ var inspectedOrigin = inspectedURL && inspectedURL.securityOrigin(); |
+ for (var registration of this._manager.registrations().values()) { |
+ if (registration.securityOrigin !== inspectedOrigin) |
+ continue; |
+ |
+ for (var version of registration.versions.values()) { |
+ if (version.controlledClients.length > 1) |
+ return true; |
+ } |
+ } |
+ |
+ return false; |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ _hasAtLeastOneCategory() { |
+ return Audits2.Audits2Panel.Presets.some(preset => preset.setting.get()); |
+ } |
+ |
+ _updateStartButtonEnabled() { |
+ var hasActiveServiceWorker = this._hasActiveServiceWorker(); |
+ var hasAtLeastOneCategory = this._hasAtLeastOneCategory(); |
+ var isDisabled = hasActiveServiceWorker || !hasAtLeastOneCategory; |
+ |
+ if (this._dialogHelpText && hasActiveServiceWorker) { |
+ this._dialogHelpText.textContent = Common.UIString( |
+ 'Multiple tabs are being controlled by the same service worker. ' + |
+ 'Close your other tabs on the same origin to audit this page.'); |
+ } |
+ |
+ if (this._dialogHelpText && !hasAtLeastOneCategory) |
+ this._dialogHelpText.textContent = Common.UIString('At least one category must be selected.'); |
+ |
+ if (this._dialogHelpText) |
+ this._dialogHelpText.classList.toggle('hidden', !isDisabled); |
+ |
+ if (this._startButton) |
+ this._startButton.disabled = isDisabled; |
} |
_clearAll() { |
@@ -102,6 +187,7 @@ Audits2.Audits2Panel = class extends UI.PanelWithSidebar { |
} |
this._statusView = this._createStatusView(uiElement); |
+ this._dialogHelpText = uiElement.createChild('div', 'audits2-dialog-help-text'); |
var buttonsRow = uiElement.createChild('div', 'audits2-dialog-buttons hbox'); |
this._startButton = |
@@ -118,18 +204,6 @@ Audits2.Audits2Panel = class extends UI.PanelWithSidebar { |
auditsViewElement.focus(); |
} |
- _updateStartButtonEnabled() { |
- if (!this._startButton) |
- return; |
- for (var preset of Audits2.Audits2Panel.Presets) { |
- if (preset.setting.get()) { |
- this._startButton.disabled = false; |
- return; |
- } |
- } |
- this._startButton.disabled = true; |
- } |
- |
/** |
* @param {!Element} launcherUIElement |
* @return {!Element} |