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 network nameserver options. | 6 * @fileoverview Polymer element for displaying network nameserver options. |
7 */ | 7 */ |
8 (function() { | |
9 'use strict'; | |
10 | |
11 Polymer({ | 8 Polymer({ |
12 is: 'network-nameservers', | 9 is: 'network-nameservers', |
13 | 10 |
14 properties: { | 11 properties: { |
15 /** | 12 /** |
16 * The network properties dictionary containing the nameserver properties to | 13 * The network properties dictionary containing the nameserver properties to |
17 * display and modify. | 14 * display and modify. |
18 * @type {!CrOnc.NetworkProperties|undefined} | 15 * @type {!CrOnc.NetworkProperties|undefined} |
19 */ | 16 */ |
20 networkProperties: { | 17 networkProperties: { |
21 type: Object, | 18 type: Object, |
22 observer: 'networkPropertiesChanged_' | 19 observer: 'networkPropertiesChanged_', |
23 }, | 20 }, |
24 | 21 |
25 /** | 22 /** |
26 * Whether or not the nameservers can be edited. | 23 * Whether or not the nameservers can be edited. |
27 */ | 24 */ |
28 editable: { | 25 editable: { |
29 type: Boolean, | 26 type: Boolean, |
30 value: false | 27 value: false, |
31 }, | 28 }, |
32 | 29 |
33 /** | 30 /** |
34 * Array of nameserver addresses stored as strings. | 31 * Array of nameserver addresses stored as strings. |
35 * @type {!Array<string>} | 32 * @type {!Array<string>} |
36 */ | 33 */ |
37 nameservers: { | 34 nameservers: { |
38 type: Array, | 35 type: Array, |
39 value: function() { return []; } | 36 value: function() { |
37 return []; | |
38 }, | |
40 }, | 39 }, |
41 | 40 |
42 /** | 41 /** |
43 * The selected nameserver type. | 42 * The selected nameserver type. |
44 */ | 43 */ |
45 nameserversType: { | 44 nameserversType: { |
46 type: String, | 45 type: String, |
47 value: 'automatic' | 46 value: 'automatic', |
48 }, | 47 }, |
49 | 48 |
50 /** | 49 /** |
51 * Array of nameserver types. | 50 * Array of nameserver types. |
52 */ | 51 */ |
53 nameserverTypeNames_: { | 52 nameserverTypeNames_: { |
54 type: Array, | 53 type: Array, |
55 value: ['automatic', 'google', 'custom'], | 54 value: ['automatic', 'google', 'custom'], |
56 readOnly: true | 55 readOnly: true, |
57 }, | 56 }, |
58 }, | 57 }, |
59 | 58 |
60 /** @const */ GoogleNameservers: ['8.8.4.4', '8.8.8.8'], | 59 /** @const */ |
60 GoogleNameservers: [ | |
61 '8.8.4.4', | |
62 '8.8.8.8', | |
63 ], | |
61 | 64 |
62 /** | 65 /** |
63 * Saved nameservers when switching to 'automatic'. | 66 * Saved nameservers when switching to 'automatic'. |
64 * @type {!Array<string>} | 67 * @type {!Array<string>} |
65 */ | 68 */ |
66 savedNameservers_: [], | 69 savedNameservers_: [], |
67 | 70 |
68 /** | 71 /** @private */ |
69 * Polymer networkProperties changed method. | |
70 */ | |
71 networkPropertiesChanged_: function(newValue, oldValue) { | 72 networkPropertiesChanged_: function(newValue, oldValue) { |
72 if (!this.networkProperties) | 73 if (!this.networkProperties) |
73 return; | 74 return; |
74 | 75 |
75 if (!oldValue || newValue.GUID != oldValue.GUID) | 76 if (!oldValue || newValue.GUID != oldValue.GUID) |
76 this.savedNameservers_ = []; | 77 this.savedNameservers_ = []; |
77 | 78 |
78 // Update the 'nameservers' property. | 79 // Update the 'nameservers' property. |
79 var nameservers = []; | 80 var nameservers = []; |
80 var ipv4 = | 81 var ipv4 = |
81 CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV4); | 82 CrOnc.getIPConfigForType(this.networkProperties, CrOnc.IPType.IPV4); |
82 if (ipv4 && ipv4.NameServers) | 83 if (ipv4 && ipv4.NameServers) |
83 nameservers = ipv4.NameServers; | 84 nameservers = ipv4.NameServers; |
84 | 85 |
85 // Update the 'nameserversType' property. | 86 // Update the 'nameserversType' property. |
86 var configType = | 87 var configType = |
87 CrOnc.getActiveValue(this.networkProperties.NameServersConfigType); | 88 CrOnc.getActiveValue(this.networkProperties.NameServersConfigType); |
88 var type; | 89 var type; |
89 if (configType == CrOnc.IPConfigType.STATIC) { | 90 if (configType == CrOnc.IPConfigType.STATIC) { |
90 if (nameservers.join(',') == this.GoogleNameservers.join(',')) | 91 if (nameservers.join(',') == this.GoogleNameservers.join(',')) { |
91 type = 'google'; | 92 type = 'google'; |
92 else | 93 } else { |
93 type = 'custom'; | 94 type = 'custom'; |
95 } | |
94 } else { | 96 } else { |
95 type = 'automatic'; | 97 type = 'automatic'; |
96 } | 98 } |
97 this.nameserversType = type; | 99 this.setNameservers_(type, nameservers); |
98 this.$$('#type').selectedIndex = this.getSelectedIndex_(type); | 100 }, |
99 | 101 |
102 /** | |
103 * @param {string} nameserversType | |
104 * @param {!Array<string>} nameservers | |
105 * @private | |
106 */ | |
107 setNameservers_: function(nameserversType, nameservers) { | |
108 this.nameserversType = nameserversType; | |
109 if (nameserversType == 'custom') { | |
110 // Add empty entries for unset custom nameservers. | |
111 for (let i = nameservers.length; i < 4; ++i) | |
dschuyler
2016/07/29 19:27:01
nit: maybe a comment about why there are 4.
stevenjb
2016/07/29 22:23:29
Added const MAX_NAMESERVERS = 4.
| |
112 nameservers[i] = ''; | |
113 } | |
100 this.nameservers = nameservers; | 114 this.nameservers = nameservers; |
101 }, | 115 }, |
102 | 116 |
103 /** | 117 /** |
104 * @param {string} nameserversType The nameservers type. | |
105 * @return {number} The selected index for |nameserversType|. | |
106 * @private | |
107 */ | |
108 getSelectedIndex_: function(nameserversType) { | |
109 var idx = this.nameserverTypeNames_.indexOf(nameserversType); | |
110 if (idx != -1) | |
111 return idx; | |
112 console.error('Unexpected type: ' + nameserversType); | |
113 return 0; | |
114 }, | |
115 | |
116 /** | |
117 * @param {string} nameserversType The nameservers type. | 118 * @param {string} nameserversType The nameservers type. |
118 * @return {string} The description for |nameserversType|. | 119 * @return {string} The description for |nameserversType|. |
119 * @private | 120 * @private |
120 */ | 121 */ |
121 nameserverTypeDesc_: function(nameserversType) { | 122 nameserverTypeDesc_: function(nameserversType) { |
122 // TODO(stevenjb): Translate. | 123 // TODO(stevenjb): Translate. |
123 if (nameserversType == 'custom') | 124 if (nameserversType == 'custom') |
124 return 'Custom name servers'; | 125 return 'Custom name servers'; |
125 if (nameserversType == 'google') | 126 if (nameserversType == 'google') |
126 return 'Google name servers'; | 127 return 'Google name servers'; |
127 return 'Automatic name servers'; | 128 return 'Automatic name servers'; |
128 }, | 129 }, |
129 | 130 |
130 /** | 131 /** |
131 * @param {boolean} editable The editable state. | 132 * @param {boolean} editable The editable state. |
132 * @param {string} nameserversType The nameservers type. | 133 * @param {string} nameserversType The nameservers type. |
133 * @return {boolean} True if the nameservers are editable. | 134 * @return {boolean} True if the nameservers are editable. |
134 * @private | 135 * @private |
135 */ | 136 */ |
136 canEdit_: function(editable, nameserversType) { | 137 canEdit_: function(editable, nameserversType) { |
137 return editable && nameserversType == 'custom'; | 138 return editable && nameserversType == 'custom'; |
138 }, | 139 }, |
139 | 140 |
140 /** | 141 /** |
141 * Event triggered when the selected type changes. Updates nameservers and | 142 * Event triggered when the selected type changes. Updates nameservers and |
142 * sends the change value if necessary. | 143 * sends the change value if necessary. |
143 * @param {Event} event The select node change event. | 144 * @param {!{detail: !{selected: string}}} e |
144 * @private | 145 * @private |
145 */ | 146 */ |
146 onTypeChange_: function(event) { | 147 onTypeChange_: function(e) { |
147 if (this.nameserversType == 'custom') | 148 if (this.nameserversType == 'custom') |
148 this.savedNameservers_ = this.nameservers; | 149 this.savedNameservers_ = this.nameservers; |
149 var type = this.nameserverTypeNames_[event.target.selectedIndex]; | 150 var type = e.detail.selected; |
150 this.nameserversType = type; | 151 this.nameserversType = type; |
151 if (type == 'custom') { | 152 if (type == 'custom') { |
153 // Restore the saved nameservers. | |
154 this.setNameservers_(type, this.savedNameservers_); | |
155 // Only send custom nameservers if they are not empty. | |
152 if (this.savedNameservers_.length == 0) | 156 if (this.savedNameservers_.length == 0) |
153 return; // Don't change nameservers until onValueChange_(). | 157 return; |
154 // Restore the saved nameservers and send them. | |
155 this.nameservers = this.savedNameservers_; | |
156 } | 158 } |
157 this.sendNameServers_(); | 159 this.sendNameServers_(); |
158 }, | 160 }, |
159 | 161 |
160 /** | 162 /** |
161 * Event triggered when a nameserver value changes. | 163 * Event triggered when a nameserver value changes. |
162 * @private | 164 * @private |
163 */ | 165 */ |
164 onValueChange_: function() { | 166 onValueChange_: function() { |
165 if (this.nameserversType != 'custom') { | 167 if (this.nameserversType != 'custom') { |
166 // If a user inputs Google nameservers in the custom nameservers fields, | 168 // If a user inputs Google nameservers in the custom nameservers fields, |
167 // |nameserversType| will change to 'google' so don't send the values. | 169 // |nameserversType| will change to 'google' so don't send the values. |
168 return; | 170 return; |
169 } | 171 } |
170 this.sendNameServers_(); | 172 this.sendNameServers_(); |
171 }, | 173 }, |
172 | 174 |
173 /** | 175 /** |
174 * Sends the current nameservers type (for automatic) or value. | 176 * Sends the current nameservers type (for automatic) or value. |
175 * @private | 177 * @private |
176 */ | 178 */ |
177 sendNameServers_: function() { | 179 sendNameServers_: function() { |
178 var type = this.nameserversType; | 180 var type = this.nameserversType; |
179 | 181 |
180 var nameservers; | |
181 if (type == 'custom') { | 182 if (type == 'custom') { |
182 nameservers = []; | 183 let nameservers = []; |
183 for (let i = 0; i < 4; ++i) { | 184 for (let i = 0; i < 4; ++i) { |
184 let id = 'nameserver' + i; | 185 let id = 'nameserver' + i; |
185 let nameserver = this.$$('#' + id).value; | 186 let nameserverInput = this.$$('#' + id); |
186 if (nameserver) | 187 let nameserver = ''; |
187 nameservers.push(nameserver); | 188 if (nameserverInput) |
189 nameserver = this.$$('#' + id).value; | |
190 nameservers.push(nameserver); | |
188 } | 191 } |
189 this.fire('nameservers-change', { | 192 this.fire('nameservers-change', { |
190 field: 'NameServers', | 193 field: 'NameServers', |
191 value: nameservers | 194 value: nameservers, |
192 }); | 195 }); |
193 } else if (type == 'google') { | 196 } else if (type == 'google') { |
194 nameservers = this.GoogleNameservers; | 197 let nameservers = this.GoogleNameservers; |
195 this.fire('nameservers-change', { | 198 this.fire('nameservers-change', { |
196 field: 'NameServers', | 199 field: 'NameServers', |
197 value: nameservers | 200 value: nameservers, |
198 }); | 201 }); |
199 } else { | 202 } else { |
200 // automatic | 203 // automatic |
201 this.fire('nameservers-change', { | 204 this.fire('nameservers-change', { |
202 field: 'NameServersConfigType', | 205 field: 'NameServersConfigType', |
203 value: CrOnc.IPConfigType.DHCP | 206 value: CrOnc.IPConfigType.DHCP, |
204 }); | 207 }); |
205 } | 208 } |
206 }, | 209 }, |
207 }); | 210 }); |
208 })(); | |
OLD | NEW |