OLD | NEW |
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 * @fileoverview Polymer element for displaying and editing network proxy | 6 * @fileoverview Polymer element for displaying and editing network proxy |
7 * values. | 7 * values. |
8 */ | 8 */ |
9 Polymer({ | 9 Polymer({ |
10 is: 'network-proxy', | 10 is: 'network-proxy', |
11 | 11 |
12 behaviors: [CrPolicyNetworkBehavior], | 12 behaviors: [CrPolicyNetworkBehavior, I18nBehavior, PrefsBehavior], |
13 | 13 |
14 properties: { | 14 properties: { |
15 /** | 15 /** |
16 * The network properties dictionary containing the proxy properties to | 16 * The network properties dictionary containing the proxy properties to |
17 * display and modify. | 17 * display and modify. |
18 * @type {!CrOnc.NetworkProperties|undefined} | 18 * @type {!CrOnc.NetworkProperties|undefined} |
19 */ | 19 */ |
20 networkProperties: { | 20 networkProperties: { |
21 type: Object, | 21 type: Object, |
22 observer: 'networkPropertiesChanged_', | 22 observer: 'networkPropertiesChanged_', |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 */ | 95 */ |
96 savedManual_: undefined, | 96 savedManual_: undefined, |
97 | 97 |
98 /** | 98 /** |
99 * Saved ExcludeDomains properties so that switching to a non-Manual type does | 99 * Saved ExcludeDomains properties so that switching to a non-Manual type does |
100 * not loose any set exclusions while the UI is open. | 100 * not loose any set exclusions while the UI is open. |
101 * @private {!Array<string>|undefined} | 101 * @private {!Array<string>|undefined} |
102 */ | 102 */ |
103 savedExcludeDomains_: undefined, | 103 savedExcludeDomains_: undefined, |
104 | 104 |
| 105 /** |
| 106 * Set to true the first time we receive a manual proxy. Used to set the |
| 107 * initial |useSameProxy_| value. |
| 108 * @private {boolean} |
| 109 */ |
| 110 receivedManualProxy_: false, |
| 111 |
105 /** @private */ | 112 /** @private */ |
106 networkPropertiesChanged_: function() { | 113 networkPropertiesChanged_: function() { |
107 if (!this.networkProperties) | 114 if (!this.networkProperties) |
108 return; | 115 return; |
109 | 116 |
110 /** @type {!CrOnc.ProxySettings} */ | 117 /** @type {!CrOnc.ProxySettings} */ |
111 var proxy = this.createDefaultProxySettings_(); | 118 var proxy = this.createDefaultProxySettings_(); |
112 /** @type {!chrome.networkingPrivate.ManagedProxySettings|undefined} */ | 119 /** @type {!chrome.networkingPrivate.ManagedProxySettings|undefined} */ |
113 var proxySettings = this.networkProperties.ProxySettings; | 120 var proxySettings = this.networkProperties.ProxySettings; |
114 if (proxySettings) { | 121 if (proxySettings) { |
115 proxy.Type = /** @type {!CrOnc.ProxySettingsType} */ ( | 122 proxy.Type = /** @type {!CrOnc.ProxySettingsType} */ ( |
116 CrOnc.getActiveValue(proxySettings.Type)); | 123 CrOnc.getActiveValue(proxySettings.Type)); |
117 if (proxySettings.Manual) { | 124 if (proxySettings.Manual) { |
118 proxy.Manual.HTTPProxy = /** @type {!CrOnc.ProxyLocation|undefined} */ ( | 125 proxy.Manual.HTTPProxy = /** @type {!CrOnc.ProxyLocation|undefined} */ ( |
119 CrOnc.getSimpleActiveProperties(proxySettings.Manual.HTTPProxy)); | 126 CrOnc.getSimpleActiveProperties(proxySettings.Manual.HTTPProxy)); |
120 proxy.Manual.SecureHTTPProxy = | 127 proxy.Manual.SecureHTTPProxy = |
121 /** @type {!CrOnc.ProxyLocation|undefined} */ ( | 128 /** @type {!CrOnc.ProxyLocation|undefined} */ ( |
122 CrOnc.getSimpleActiveProperties( | 129 CrOnc.getSimpleActiveProperties( |
123 proxySettings.Manual.SecureHTTPProxy)); | 130 proxySettings.Manual.SecureHTTPProxy)); |
124 proxy.Manual.FTPProxy = /** @type {!CrOnc.ProxyLocation|undefined} */ ( | 131 proxy.Manual.FTPProxy = /** @type {!CrOnc.ProxyLocation|undefined} */ ( |
125 CrOnc.getSimpleActiveProperties(proxySettings.Manual.FTPProxy)); | 132 CrOnc.getSimpleActiveProperties(proxySettings.Manual.FTPProxy)); |
126 proxy.Manual.SOCKS = /** @type {!CrOnc.ProxyLocation|undefined} */ ( | 133 proxy.Manual.SOCKS = /** @type {!CrOnc.ProxyLocation|undefined} */ ( |
127 CrOnc.getSimpleActiveProperties(proxySettings.Manual.SOCKS)); | 134 CrOnc.getSimpleActiveProperties(proxySettings.Manual.SOCKS)); |
| 135 if (!this.receivedManualProxy_) { |
| 136 let json_http = JSON.stringify(proxy.Manual.HTTPProxy); |
| 137 this.useSameProxy_ = |
| 138 json_http == JSON.stringify(proxy.Manual.SecureHTTPProxy) && |
| 139 json_http == JSON.stringify(proxy.Manual.FTPProxy) && |
| 140 json_http == JSON.stringify(proxy.Manual.SOCKS); |
| 141 this.receivedManualProxy_ = true; |
| 142 } |
128 } | 143 } |
129 if (proxySettings.ExcludeDomains) { | 144 if (proxySettings.ExcludeDomains) { |
130 proxy.ExcludeDomains = /** @type {!Array<string>|undefined} */ ( | 145 proxy.ExcludeDomains = /** @type {!Array<string>|undefined} */ ( |
131 CrOnc.getActiveValue(proxySettings.ExcludeDomains)); | 146 CrOnc.getActiveValue(proxySettings.ExcludeDomains)); |
132 } | 147 } |
133 proxy.PAC = /** @type {string|undefined} */ ( | 148 proxy.PAC = /** @type {string|undefined} */ ( |
134 CrOnc.getActiveValue(proxySettings.PAC)); | 149 CrOnc.getActiveValue(proxySettings.PAC)); |
135 } | 150 } |
136 // Use saved ExcludeDomanains and Manual if not defined. | 151 // Use saved ExcludeDomanains and Manual if not defined. |
137 proxy.ExcludeDomains = proxy.ExcludeDomains || this.savedExcludeDomains_; | 152 proxy.ExcludeDomains = proxy.ExcludeDomains || this.savedExcludeDomains_; |
138 proxy.Manual = proxy.Manual || this.savedManual_; | 153 proxy.Manual = proxy.Manual || this.savedManual_; |
139 | 154 |
140 // Set this.proxy after dom-repeat has been stamped. | 155 // Set this.proxy after dom-repeat has been stamped. |
141 this.async(function() { | 156 this.async(function() { |
142 this.proxy = proxy; | 157 this.proxy = proxy; |
143 }.bind(this)); | 158 }.bind(this)); |
144 | 159 |
145 // Set the Web Proxy Auto Discovery URL. | 160 // Set the Web Proxy Auto Discovery URL. |
146 var ipv4 = | 161 var ipv4 = |
147 CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV4); | 162 CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV4); |
148 this.WPAD = (ipv4 && ipv4.WebProxyAutoDiscoveryUrl) || ''; | 163 this.WPAD = (ipv4 && ipv4.WebProxyAutoDiscoveryUrl) || ''; |
149 }, | 164 }, |
150 | 165 |
151 /** @private */ | 166 /** @private */ |
152 useSameProxyChanged_: function() { | 167 useSameProxyChanged_: function() { |
| 168 if (!this.receivedManualProxy_) |
| 169 return; |
153 this.sendProxyChange_(); | 170 this.sendProxyChange_(); |
154 }, | 171 }, |
155 | 172 |
156 /** | 173 /** |
157 * @return {CrOnc.ProxySettings} An empty/default proxy settings object. | 174 * @return {CrOnc.ProxySettings} An empty/default proxy settings object. |
158 * @private | 175 * @private |
159 */ | 176 */ |
160 createDefaultProxySettings_: function() { | 177 createDefaultProxySettings_: function() { |
161 return { | 178 return { |
162 Type: CrOnc.ProxySettingsType.DIRECT, | 179 Type: CrOnc.ProxySettingsType.DIRECT, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 */ | 265 */ |
249 onProxyExclusionsChange_: function(event) { | 266 onProxyExclusionsChange_: function(event) { |
250 this.sendProxyChange_(); | 267 this.sendProxyChange_(); |
251 }, | 268 }, |
252 | 269 |
253 /** | 270 /** |
254 * @param {string} proxyType The proxy type. | 271 * @param {string} proxyType The proxy type. |
255 * @return {string} The description for |proxyType|. | 272 * @return {string} The description for |proxyType|. |
256 * @private | 273 * @private |
257 */ | 274 */ |
258 proxyTypeDesc_: function(proxyType) { | 275 getProxyTypeDesc_: function(proxyType) { |
259 // TODO(stevenjb): Translate. | |
260 if (proxyType == CrOnc.ProxySettingsType.MANUAL) | 276 if (proxyType == CrOnc.ProxySettingsType.MANUAL) |
261 return 'Manual proxy configuration'; | 277 return this.i18n('networkProxyTypeManual'); |
262 if (proxyType == CrOnc.ProxySettingsType.PAC) | 278 if (proxyType == CrOnc.ProxySettingsType.PAC) |
263 return 'Automatic proxy configuration'; | 279 return this.i18n('networkProxyTypePac'); |
264 if (proxyType == CrOnc.ProxySettingsType.WPAD) | 280 if (proxyType == CrOnc.ProxySettingsType.WPAD) |
265 return 'Web proxy autodiscovery'; | 281 return this.i18n('networkProxyTypeWpad'); |
266 return 'Direct Internet connection'; | 282 return this.i18n('networkProxyTypeDirect'); |
267 }, | 283 }, |
268 | 284 |
269 /** | 285 /** |
270 * @param {boolean} editable | 286 * @return {boolean} |
271 * @param {!CrOnc.NetworkProperties} networkProperties | |
272 * @param {string} key | |
273 * @return {boolean} Whether the property is editable. | |
274 * @private | 287 * @private |
275 */ | 288 */ |
276 isPropertyEditable_: function(editable, networkProperties, key) { | 289 getShowNetworkPolicyIndicator_: function() { |
277 if (!editable) | 290 let property = /** @type {!CrOnc.ManagedProperty|undefined}*/ ( |
278 return false; | 291 this.get('ProxySettings.Type', this.networkProperties)); |
279 var property = /** @type {!CrOnc.ManagedProperty|undefined} */ ( | 292 return !!property && !this.isExtensionControlled(property) && |
280 this.get(key, networkProperties)); | 293 this.isNetworkPolicyEnforced(property); |
281 return !this.isNetworkPolicyEnforced(property); | |
282 }, | 294 }, |
283 | 295 |
284 /** | 296 /** |
| 297 * @return {boolean} |
| 298 * @private |
| 299 */ |
| 300 getShowPrefPolicyIndicator_: function() { |
| 301 let property = /** @type {!CrOnc.ManagedProperty|undefined}*/ ( |
| 302 this.get('ProxySettings.Type', this.networkProperties)); |
| 303 return !!property && this.isExtensionControlled(property); |
| 304 }, |
| 305 |
| 306 /** |
| 307 * @param {!CrOnc.ManagedProperty|undefined} property |
| 308 * @return {boolean} Whether the property setting is enforced. |
| 309 * @private |
| 310 */ |
| 311 isEditable_: function(property) { |
| 312 return this.editable && !this.isNetworkPolicyEnforced(property) && |
| 313 !this.isExtensionControlled(property); |
| 314 }, |
| 315 |
| 316 /** |
| 317 * Used to check the editable state for proxy related UI that may or may |
| 318 * not be directly controlled by a policy. We use the enforced state of the |
| 319 * 'ProxySettings.Type' property for these controls. |
| 320 * @return {boolean} Whether the proxy control is editable. |
| 321 * @private |
| 322 */ |
| 323 isProxyEditable_: function() { |
| 324 let property = /** @type {!CrOnc.ManagedProperty|undefined}*/ ( |
| 325 this.get('ProxySettings.Type', this.networkProperties)); |
| 326 return !!property && this.isEditable_(property); |
| 327 }, |
| 328 |
| 329 /** |
285 * @param {string} property The property to test | 330 * @param {string} property The property to test |
286 * @param {string} value The value to test against | 331 * @param {string} value The value to test against |
287 * @return {boolean} True if property == value | 332 * @return {boolean} True if property == value |
288 * @private | 333 * @private |
289 */ | 334 */ |
290 matches_: function(property, value) { | 335 matches_: function(property, value) { |
291 return property == value; | 336 return property == value; |
292 } | 337 } |
293 }); | 338 }); |
OLD | NEW |