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

Side by Side Diff: Source/devtools/front_end/security/SecurityPanel.js

Issue 1215493002: Add a sidebar to the DevTools Security panel. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Address dgozman's comments. Created 5 years, 6 months 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 unified diff | Download patch
« no previous file with comments | « no previous file | Source/devtools/front_end/security/securityPanel.css » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 * @constructor 6 * @constructor
7 * @extends {WebInspector.Panel} 7 * @extends {WebInspector.PanelWithSidebar}
8 * @implements {WebInspector.TargetManager.Observer} 8 * @implements {WebInspector.TargetManager.Observer}
9 */ 9 */
10 WebInspector.SecurityPanel = function() { 10 WebInspector.SecurityPanel = function() {
11 WebInspector.Panel.call(this, "security"); 11 WebInspector.PanelWithSidebar.call(this, "security");
12 this.registerRequiredCSS("security/securityPanel.css"); 12 this.registerRequiredCSS("security/securityPanel.css");
13 13
14 // Create security state section. 14 var sidebarTree = new TreeOutlineInShadow();
15 var securityStateSection = this.element.createChild("div"); 15 sidebarTree.element.classList.add("sidebar-tree");
16 this._lockIcon = securityStateSection.createChild("div", "lock-icon"); 16 this.panelSidebarElement().appendChild(sidebarTree.element);
17 this._securityStateText = securityStateSection.createChild("div", "security- state"); 17 this.setDefaultFocusedElement(sidebarTree.element);
18 securityStateSection.createChild("hr"); 18
19 this._securityExplanations = securityStateSection.createChild("div", "securi ty-explanations"); 19 this._sidebarMainViewElement = new WebInspector.SecurityMainViewSidebarTreeE lement(this);
20 sidebarTree.appendChild(this._sidebarMainViewElement);
21
22 this._mainView = new WebInspector.SecurityMainView();
23 this.showMainView();
20 24
21 WebInspector.targetManager.observeTargets(this); 25 WebInspector.targetManager.observeTargets(this);
22 } 26 }
23 27
24 WebInspector.SecurityPanel.prototype = { 28 WebInspector.SecurityPanel.prototype = {
25 /**
26 * @param {!SecurityAgent.SecurityStateExplanation} explanation
27 */
28 _addExplanation: function(explanation) {
29 var explanationDiv = this._securityExplanations.createChild("div", "secu rity-explanation");
30
31 var explanationLockIcon = explanationDiv.createChild("div", "lock-icon") ;
32 explanationLockIcon.classList.add("lock-icon-" + explanation.securitySta te);
33 explanationDiv.createChild("div", "explanation-title").textContent = exp lanation.summary;
34 explanationDiv.createChild("div", "explanation-text").textContent = expl anation.description;
35 },
36 29
37 /** 30 /**
38 * @param {!SecurityAgent.SecurityState} newSecurityState 31 * @param {!SecurityAgent.SecurityState} newSecurityState
39 * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations 32 * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations
40 */ 33 */
41 _updateSecurityState: function(newSecurityState, explanations) 34 _updateSecurityState: function(newSecurityState, explanations)
42 { 35 {
43 // Remove old state. 36 this._sidebarMainViewElement.setSecurityState(newSecurityState);
44 // It's safe to call this even when this._securityState is undefined. 37 this._mainView.updateSecurityState(newSecurityState, explanations);
45 this._lockIcon.classList.remove("lock-icon-" + this._securityState);
46
47 // Add new state.
48 this._securityState = newSecurityState;
49 this._lockIcon.classList.add("lock-icon-" + this._securityState);
50 this._securityStateText.textContent = WebInspector.UIString("Page securi ty state: %s", this._securityState);
51
52 this._securityExplanations.removeChildren();
53 for (var explanation of explanations)
54 this._addExplanation(explanation);
55 }, 38 },
56 39
57 /** 40 /**
58 * @param {!WebInspector.Event} event 41 * @param {!WebInspector.Event} event
59 */ 42 */
60 _onSecurityStateChanged: function(event) 43 _onSecurityStateChanged: function(event)
61 { 44 {
62 var securityState = /** @type {!SecurityAgent.SecurityState} */ (event.d ata.securityState); 45 var securityState = /** @type {!SecurityAgent.SecurityState} */ (event.d ata.securityState);
63 var explanations = /** @type {!Array<!SecurityAgent.SecurityStateExplana tion>} */ (event.data.explanations); 46 var explanations = /** @type {!Array<!SecurityAgent.SecurityStateExplana tion>} */ (event.data.explanations);
64 this._updateSecurityState(securityState, explanations); 47 this._updateSecurityState(securityState, explanations);
65 }, 48 },
66 49
50 showMainView: function()
51 {
52 this.setVisibleView(this._mainView);
53 },
54
55 /**
56 * @return {!WebInspector.VBox}
57 */
58 getVisibleView: function()
dgozman 2015/06/28 16:22:34 This is not used. Remove.
59 {
60 return this._visibleView;
61 },
62
63 /**
64 * @param {!WebInspector.VBox} view
65 */
66 setVisibleView: function(view)
dgozman 2015/06/28 16:22:34 Make it private.
67 {
68 if (this._visibleView === view)
69 return;
70
71 if (this._visibleView)
72 this._visibleView.detach();
73
74 this._visibleView = view;
75
76 if (view)
77 this.splitWidget().setMainWidget(view);
78 },
79
67 /** 80 /**
68 * @override 81 * @override
69 * @param {!WebInspector.Target} target 82 * @param {!WebInspector.Target} target
70 */ 83 */
71 targetAdded: function(target) 84 targetAdded: function(target)
72 { 85 {
73 if (!this._target) { 86 if (!this._target) {
74 this._target = target; 87 this._target = target;
75 this._securityModel = WebInspector.SecurityModel.fromTarget(target); 88 this._securityModel = WebInspector.SecurityModel.fromTarget(target);
76 this._securityModel.addEventListener(WebInspector.SecurityModel.Even tTypes.SecurityStateChanged, this._onSecurityStateChanged, this); 89 this._securityModel.addEventListener(WebInspector.SecurityModel.Even tTypes.SecurityStateChanged, this._onSecurityStateChanged, this);
77 this._updateSecurityState(this._securityModel.securityState(), []); 90 this._updateSecurityState(this._securityModel.securityState(), []);
78 } 91 }
79 }, 92 },
80 93
81 /** 94 /**
82 * @override 95 * @override
83 * @param {!WebInspector.Target} target 96 * @param {!WebInspector.Target} target
84 */ 97 */
85 targetRemoved: function(target) 98 targetRemoved: function(target)
86 { 99 {
87 if (target === this._target) { 100 if (target === this._target) {
88 this._securityModel.removeEventListener(WebInspector.SecurityModel.E ventTypes.SecurityStateChanged, this._onSecurityStateChanged, this); 101 this._securityModel.removeEventListener(WebInspector.SecurityModel.E ventTypes.SecurityStateChanged, this._onSecurityStateChanged, this);
89 delete this._securityModel; 102 delete this._securityModel;
90 delete this._target; 103 delete this._target;
91 this._updateSecurityState(SecurityAgent.SecurityState.Unknown, []); 104 this._updateSecurityState(SecurityAgent.SecurityState.Unknown, []);
92 } 105 }
93 }, 106 },
94 107
95 __proto__: WebInspector.Panel.prototype 108 __proto__: WebInspector.PanelWithSidebar.prototype
96 } 109 }
97 110
98 /** 111 /**
99 * @return {!WebInspector.SecurityPanel} 112 * @return {!WebInspector.SecurityPanel}
100 */ 113 */
101 WebInspector.SecurityPanel._instance = function() 114 WebInspector.SecurityPanel._instance = function()
102 { 115 {
103 if (!WebInspector.SecurityPanel._instanceObject) 116 if (!WebInspector.SecurityPanel._instanceObject)
104 WebInspector.SecurityPanel._instanceObject = new WebInspector.SecurityPa nel(); 117 WebInspector.SecurityPanel._instanceObject = new WebInspector.SecurityPa nel();
105 return WebInspector.SecurityPanel._instanceObject; 118 return WebInspector.SecurityPanel._instanceObject;
106 } 119 }
107 120
108 /** 121 /**
109 * @constructor 122 * @constructor
123 * @extends {WebInspector.SidebarTreeElement}
124 * @param {!WebInspector.SecurityPanel} panel
125 */
126 WebInspector.SecurityMainViewSidebarTreeElement = function(panel)
127 {
128 this._panel = panel;
129 this.small = true;
130 WebInspector.SidebarTreeElement.call(this, "security-sidebar-tree-item", Web Inspector.UIString("Overview"));
131 this.iconElement.classList.add("lock-icon");
dgozman 2015/06/28 16:22:34 For this to work, split off lockIcon.css and regis
132 }
133
134 WebInspector.SecurityMainViewSidebarTreeElement.prototype = {
135 onattach: function()
136 {
137 WebInspector.SidebarTreeElement.prototype.onattach.call(this);
138 },
139
140 /**
141 * @param {!SecurityAgent.SecurityState} newSecurityState
142 */
143 setSecurityState: function(newSecurityState)
144 {
145 for (var className of this.iconElement.classList)
146 if (className.indexOf("lock-icon-") === 0)
147 this.iconElement.classList.remove(className);
148
149 this.iconElement.classList.add("lock-icon-" + newSecurityState);
150 },
151
152 /**
153 * @override
154 * @return {boolean}
155 */
156 onselect: function()
157 {
158 this._panel.showMainView();
159 return true;
160 },
161
162 __proto__: WebInspector.SidebarTreeElement.prototype
163 }
164
165 /**
166 * @constructor
110 * @implements {WebInspector.PanelFactory} 167 * @implements {WebInspector.PanelFactory}
111 */ 168 */
112 WebInspector.SecurityPanelFactory = function() 169 WebInspector.SecurityPanelFactory = function()
113 { 170 {
114 } 171 }
115 172
116 WebInspector.SecurityPanelFactory.prototype = { 173 WebInspector.SecurityPanelFactory.prototype = {
117 /** 174 /**
118 * @override 175 * @override
119 * @return {!WebInspector.Panel} 176 * @return {!WebInspector.Panel}
120 */ 177 */
121 createPanel: function() 178 createPanel: function()
122 { 179 {
123 return WebInspector.SecurityPanel._instance(); 180 return WebInspector.SecurityPanel._instance();
124 } 181 }
125 } 182 }
183
184 /**
185 * @constructor
186 * @extends {WebInspector.VBox}
187 */
188 WebInspector.SecurityMainView = function()
189 {
190 WebInspector.VBox.call(this);
191 this.setMinimumSize(100, 100);
192
193 this.element.classList.add("security-main-view");
194
195 // Create security state section.
196 var securityStateSection = this.element.createChild("div");
197 this._lockIcon = securityStateSection.createChild("div", "lock-icon");
198 this._securityStateText = securityStateSection.createChild("div", "security- state");
199 securityStateSection.createChild("hr");
200 this._securityExplanations = securityStateSection.createChild("div", "securi ty-explanations");
201
202 }
203
204 WebInspector.SecurityMainView.prototype = {
205 /**
206 * @param {!SecurityAgent.SecurityStateExplanation} explanation
207 */
208 _addExplanation: function(explanation)
209 {
210 var explanationDiv = this._securityExplanations.createChild("div", "secu rity-explanation");
211
212 var explanationLockIcon = explanationDiv.createChild("div", "lock-icon") ;
213 explanationLockIcon.classList.add("lock-icon-" + explanation.securitySta te);
214 explanationDiv.createChild("div", "explanation-title").textContent = exp lanation.summary;
215 explanationDiv.createChild("div", "explanation-text").textContent = expl anation.description;
216 },
217
218 /**
219 * @param {!SecurityAgent.SecurityState} newSecurityState
220 * @param {!Array<!SecurityAgent.SecurityStateExplanation>} explanations
221 */
222 updateSecurityState: function(newSecurityState, explanations)
223 {
224 // Remove old state.
225 // It's safe to call this even when this._securityState is undefined.
226 this._lockIcon.classList.remove("lock-icon-" + this._securityState);
227
228 // Add new state.
229 this._securityState = newSecurityState;
230 this._lockIcon.classList.add("lock-icon-" + this._securityState);
231 this._securityStateText.textContent = WebInspector.UIString("Page securi ty state: %s", this._securityState);
232
233 this._securityExplanations.removeChildren();
234 for (var explanation of explanations)
235 this._addExplanation(explanation);
236 },
237
238 __proto__: WebInspector.VBox.prototype
239 }
OLDNEW
« no previous file with comments | « no previous file | Source/devtools/front_end/security/securityPanel.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698