OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
| 6 * @implements {SDK.SDKModelObserver<!SDK.ServiceWorkerManager>} |
6 * @unrestricted | 7 * @unrestricted |
7 */ | 8 */ |
8 Audits2.Audits2Panel = class extends UI.PanelWithSidebar { | 9 Audits2.Audits2Panel = class extends UI.PanelWithSidebar { |
9 constructor() { | 10 constructor() { |
10 super('audits2'); | 11 super('audits2'); |
11 this.setHideOnDetach(); | 12 this.setHideOnDetach(); |
12 this.registerRequiredCSS('audits2/audits2Panel.css'); | 13 this.registerRequiredCSS('audits2/audits2Panel.css'); |
13 this.registerRequiredCSS('audits2/lighthouse/report-styles.css'); | 14 this.registerRequiredCSS('audits2/lighthouse/report-styles.css'); |
14 | 15 |
15 this._protocolService = new Audits2.ProtocolService(); | 16 this._protocolService = new Audits2.ProtocolService(); |
(...skipping 20 matching lines...) Expand all Loading... |
36 this._treeOutline.registerRequiredCSS('audits2/audits2Tree.css'); | 37 this._treeOutline.registerRequiredCSS('audits2/audits2Tree.css'); |
37 this.panelSidebarElement().appendChild(this._treeOutline.element); | 38 this.panelSidebarElement().appendChild(this._treeOutline.element); |
38 | 39 |
39 this._dropTarget = new UI.DropTarget( | 40 this._dropTarget = new UI.DropTarget( |
40 this.contentElement, [UI.DropTarget.Types.Files], Common.UIString('Drop
audit file here'), | 41 this.contentElement, [UI.DropTarget.Types.Files], Common.UIString('Drop
audit file here'), |
41 this._handleDrop.bind(this)); | 42 this._handleDrop.bind(this)); |
42 | 43 |
43 for (var preset of Audits2.Audits2Panel.Presets) | 44 for (var preset of Audits2.Audits2Panel.Presets) |
44 preset.setting.addChangeListener(this._updateStartButtonEnabled.bind(this)
); | 45 preset.setting.addChangeListener(this._updateStartButtonEnabled.bind(this)
); |
45 this._showLandingPage(); | 46 this._showLandingPage(); |
| 47 SDK.targetManager.observeModels(SDK.ServiceWorkerManager, this); |
| 48 } |
| 49 |
| 50 /** |
| 51 * @override |
| 52 * @param {!SDK.ServiceWorkerManager} serviceWorkerManager |
| 53 */ |
| 54 modelAdded(serviceWorkerManager) { |
| 55 if (this._manager) |
| 56 return; |
| 57 |
| 58 this._manager = serviceWorkerManager; |
| 59 this._serviceWorkerListeners = [ |
| 60 this._manager.addEventListener( |
| 61 SDK.ServiceWorkerManager.Events.RegistrationUpdated, this._updateStart
ButtonEnabled, this), |
| 62 this._manager.addEventListener( |
| 63 SDK.ServiceWorkerManager.Events.RegistrationDeleted, this._updateStart
ButtonEnabled, this), |
| 64 ]; |
| 65 |
| 66 this._updateStartButtonEnabled(); |
| 67 } |
| 68 |
| 69 /** |
| 70 * @override |
| 71 * @param {!SDK.ServiceWorkerManager} serviceWorkerManager |
| 72 */ |
| 73 modelRemoved(serviceWorkerManager) { |
| 74 if (!this._manager || this._manager !== serviceWorkerManager) |
| 75 return; |
| 76 |
| 77 Common.EventTarget.removeEventListeners(this._serviceWorkerListeners); |
| 78 this._manager = null; |
| 79 this._serviceWorkerListeners = null; |
| 80 this._updateStartButtonEnabled(); |
| 81 } |
| 82 |
| 83 /** |
| 84 * @return {boolean} |
| 85 */ |
| 86 _hasActiveServiceWorker() { |
| 87 if (!this._manager) |
| 88 return false; |
| 89 |
| 90 var inspectedURL = SDK.targetManager.mainTarget().inspectedURL().asParsedURL
(); |
| 91 var inspectedOrigin = inspectedURL && inspectedURL.securityOrigin(); |
| 92 for (var registration of this._manager.registrations().values()) { |
| 93 if (registration.securityOrigin !== inspectedOrigin) |
| 94 continue; |
| 95 |
| 96 for (var version of registration.versions.values()) { |
| 97 if (version.controlledClients.length > 1) |
| 98 return true; |
| 99 } |
| 100 } |
| 101 |
| 102 return false; |
| 103 } |
| 104 |
| 105 /** |
| 106 * @return {boolean} |
| 107 */ |
| 108 _hasAtLeastOneCategory() { |
| 109 return Audits2.Audits2Panel.Presets.some(preset => preset.setting.get()); |
| 110 } |
| 111 |
| 112 _updateStartButtonEnabled() { |
| 113 var hasActiveServiceWorker = this._hasActiveServiceWorker(); |
| 114 var hasAtLeastOneCategory = this._hasAtLeastOneCategory(); |
| 115 var isDisabled = hasActiveServiceWorker || !hasAtLeastOneCategory; |
| 116 |
| 117 if (this._dialogHelpText && hasActiveServiceWorker) { |
| 118 this._dialogHelpText.textContent = Common.UIString( |
| 119 'Multiple tabs are being controlled by the same service worker. ' + |
| 120 'Close your other tabs on the same origin to audit this page.'); |
| 121 } |
| 122 |
| 123 if (this._dialogHelpText && !hasAtLeastOneCategory) |
| 124 this._dialogHelpText.textContent = Common.UIString('At least one category
must be selected.'); |
| 125 |
| 126 if (this._dialogHelpText) |
| 127 this._dialogHelpText.classList.toggle('hidden', !isDisabled); |
| 128 |
| 129 if (this._startButton) |
| 130 this._startButton.disabled = isDisabled; |
46 } | 131 } |
47 | 132 |
48 _clearAll() { | 133 _clearAll() { |
49 this._treeOutline.removeChildren(); | 134 this._treeOutline.removeChildren(); |
50 this._showLandingPage(); | 135 this._showLandingPage(); |
51 } | 136 } |
52 | 137 |
53 _deleteSelected() { | 138 _deleteSelected() { |
54 var selection = this._treeOutline.selectedTreeElement; | 139 var selection = this._treeOutline.selectedTreeElement; |
55 if (selection) | 140 if (selection) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 | 180 |
96 for (var preset of Audits2.Audits2Panel.Presets) { | 181 for (var preset of Audits2.Audits2Panel.Presets) { |
97 preset.setting.setTitle(preset.title); | 182 preset.setting.setTitle(preset.title); |
98 var checkbox = new UI.ToolbarSettingCheckbox(preset.setting); | 183 var checkbox = new UI.ToolbarSettingCheckbox(preset.setting); |
99 var row = this._auditSelectorForm.createChild('div', 'vbox audits2-launche
r-row'); | 184 var row = this._auditSelectorForm.createChild('div', 'vbox audits2-launche
r-row'); |
100 row.appendChild(checkbox.element); | 185 row.appendChild(checkbox.element); |
101 row.createChild('span', 'audits2-launcher-description dimmed').textContent
= preset.description; | 186 row.createChild('span', 'audits2-launcher-description dimmed').textContent
= preset.description; |
102 } | 187 } |
103 | 188 |
104 this._statusView = this._createStatusView(uiElement); | 189 this._statusView = this._createStatusView(uiElement); |
| 190 this._dialogHelpText = uiElement.createChild('div', 'audits2-dialog-help-tex
t'); |
105 | 191 |
106 var buttonsRow = uiElement.createChild('div', 'audits2-dialog-buttons hbox')
; | 192 var buttonsRow = uiElement.createChild('div', 'audits2-dialog-buttons hbox')
; |
107 this._startButton = | 193 this._startButton = |
108 UI.createTextButton(Common.UIString('Run audit'), this._start.bind(this)
, 'material-button default'); | 194 UI.createTextButton(Common.UIString('Run audit'), this._start.bind(this)
, 'material-button default'); |
109 this._updateStartButtonEnabled(); | 195 this._updateStartButtonEnabled(); |
110 buttonsRow.appendChild(this._startButton); | 196 buttonsRow.appendChild(this._startButton); |
111 this._cancelButton = UI.createTextButton(Common.UIString('Cancel'), this._ca
ncel.bind(this), 'material-button'); | 197 this._cancelButton = UI.createTextButton(Common.UIString('Cancel'), this._ca
ncel.bind(this), 'material-button'); |
112 buttonsRow.appendChild(this._cancelButton); | 198 buttonsRow.appendChild(this._cancelButton); |
113 | 199 |
114 this._dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactWidthMaxHeigh
t); | 200 this._dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactWidthMaxHeigh
t); |
115 this._dialog.setMaxContentSize(new UI.Size(500, 400)); | 201 this._dialog.setMaxContentSize(new UI.Size(500, 400)); |
116 this._dialog.show(this.mainElement()); | 202 this._dialog.show(this.mainElement()); |
117 auditsViewElement.tabIndex = 0; | 203 auditsViewElement.tabIndex = 0; |
118 auditsViewElement.focus(); | 204 auditsViewElement.focus(); |
119 } | 205 } |
120 | 206 |
121 _updateStartButtonEnabled() { | |
122 if (!this._startButton) | |
123 return; | |
124 for (var preset of Audits2.Audits2Panel.Presets) { | |
125 if (preset.setting.get()) { | |
126 this._startButton.disabled = false; | |
127 return; | |
128 } | |
129 } | |
130 this._startButton.disabled = true; | |
131 } | |
132 | |
133 /** | 207 /** |
134 * @param {!Element} launcherUIElement | 208 * @param {!Element} launcherUIElement |
135 * @return {!Element} | 209 * @return {!Element} |
136 */ | 210 */ |
137 _createStatusView(launcherUIElement) { | 211 _createStatusView(launcherUIElement) { |
138 var statusView = launcherUIElement.createChild('div', 'audits2-status vbox h
idden'); | 212 var statusView = launcherUIElement.createChild('div', 'audits2-status vbox h
idden'); |
139 this._statusIcon = statusView.createChild('div', 'icon'); | 213 this._statusIcon = statusView.createChild('div', 'icon'); |
140 this._statusElement = statusView.createChild('div'); | 214 this._statusElement = statusView.createChild('div'); |
141 this._updateStatus(Common.UIString('Loading...')); | 215 this._updateStatus(Common.UIString('Loading...')); |
142 return statusView; | 216 return statusView; |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 return; | 754 return; |
681 | 755 |
682 var element = Components.DOMPresentationUtils.linkifyNodeReference(node,
undefined, detailsItem.snippet); | 756 var element = Components.DOMPresentationUtils.linkifyNodeReference(node,
undefined, detailsItem.snippet); |
683 origElement.title = ''; | 757 origElement.title = ''; |
684 origElement.textContent = ''; | 758 origElement.textContent = ''; |
685 origElement.appendChild(element); | 759 origElement.appendChild(element); |
686 }); | 760 }); |
687 }); | 761 }); |
688 } | 762 } |
689 }; | 763 }; |
OLD | NEW |