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 | 6 * @fileoverview |
7 * 'settings-router' is a simple router for settings. Its responsibilities: | 7 * 'settings-router' is a simple router for settings. Its responsibilities: |
8 * - Update the URL when the routing state changes. | 8 * - Update the URL when the routing state changes. |
9 * - Initialize the routing state with the initial URL. | 9 * - Initialize the routing state with the initial URL. |
10 * - Process and validate all routing state changes. | 10 * - Process and validate all routing state changes. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 } | 51 } |
52 | 52 |
53 // As a fallback return the default route. | 53 // As a fallback return the default route. |
54 return this.routes_[0]; | 54 return this.routes_[0]; |
55 }, | 55 }, |
56 }, | 56 }, |
57 | 57 |
58 /** | 58 /** |
59 * Page titles for the currently active route. Updated by the currentRoute | 59 * Page titles for the currently active route. Updated by the currentRoute |
60 * property observer. | 60 * property observer. |
61 * @type {{pageTitle: string, subpageTitles: Array<string>}} | 61 * @type {{pageTitle: string}} |
62 */ | 62 */ |
63 currentRouteTitles: { | 63 currentRouteTitles: { |
64 notify: true, | 64 notify: true, |
65 type: Object, | 65 type: Object, |
66 value: function() { | 66 value: function() { |
67 return { | 67 return { |
68 pageTitle: '', | 68 pageTitle: '', |
69 subpageTitles: [], | |
70 }; | 69 }; |
71 }, | 70 }, |
72 }, | 71 }, |
73 }, | 72 }, |
74 | 73 |
75 | 74 |
76 /** | 75 /** |
77 * @private | 76 * @private |
78 * The 'url' property is not accessible to other elements. | 77 * The 'url' property is not accessible to other elements. |
79 */ | 78 */ |
80 routes_: [ | 79 routes_: [ |
81 { | 80 { |
82 url: '/', | 81 url: '/', |
83 page: 'basic', | 82 page: 'basic', |
84 section: '', | 83 section: '', |
85 subpage: [], | 84 subpage: [], |
86 subpageTitles: [], | |
87 }, | 85 }, |
88 { | 86 { |
89 url: '/advanced', | 87 url: '/advanced', |
90 page: 'advanced', | 88 page: 'advanced', |
91 section: '', | 89 section: '', |
92 subpage: [], | 90 subpage: [], |
93 subpageTitles: [], | |
94 }, | 91 }, |
95 <if expr="chromeos"> | 92 <if expr="chromeos"> |
96 { | 93 { |
97 url: '/networkDetail', | 94 url: '/networkDetail', |
98 page: 'basic', | 95 page: 'basic', |
99 section: 'internet', | 96 section: 'internet', |
100 subpage: ['network-detail'], | 97 subpage: ['network-detail'], |
101 subpageTitles: ['internetDetailPageTitle'], | |
102 }, | 98 }, |
103 { | 99 { |
104 url: '/knownNetworks', | 100 url: '/knownNetworks', |
105 page: 'basic', | 101 page: 'basic', |
106 section: 'internet', | 102 section: 'internet', |
107 subpage: ['known-networks'], | 103 subpage: ['known-networks'], |
108 subpageTitles: ['internetKnownNetworksPageTitle'], | |
109 }, | 104 }, |
110 </if> | 105 </if> |
111 { | 106 { |
112 url: '/fonts', | 107 url: '/fonts', |
113 page: 'basic', | 108 page: 'basic', |
114 section: 'appearance', | 109 section: 'appearance', |
115 subpage: ['appearance-fonts'], | 110 subpage: ['appearance-fonts'], |
116 subpageTitles: ['customizeFonts'], | |
117 }, | 111 }, |
118 { | 112 { |
119 url: '/searchEngines', | 113 url: '/searchEngines', |
120 page: 'basic', | 114 page: 'basic', |
121 section: 'search', | 115 section: 'search', |
122 subpage: ['search-engines'], | 116 subpage: ['search-engines'], |
123 subpageTitles: ['searchEnginesPageTitle'], | |
124 }, | 117 }, |
125 { | 118 { |
126 url: '/searchEngines/advanced', | 119 url: '/searchEngines/advanced', |
127 page: 'basic', | 120 page: 'basic', |
128 section: 'search', | 121 section: 'search', |
129 subpage: ['search-engines', 'search-engines-advanced'], | 122 subpage: ['search-engines', 'search-engines-advanced'], |
130 subpageTitles: ['searchEnginesPageTitle', 'advancedPageTitle'], | |
131 }, | 123 }, |
132 <if expr="chromeos"> | 124 <if expr="chromeos"> |
133 { | 125 { |
134 url: '/changePicture', | 126 url: '/changePicture', |
135 page: 'basic', | 127 page: 'basic', |
136 section: 'people', | 128 section: 'people', |
137 subpage: ['changePicture'], | 129 subpage: ['changePicture'], |
138 subpageTitles: ['changePictureTitle'], | |
139 }, | 130 }, |
140 </if> | 131 </if> |
141 <if expr="not chromeos"> | 132 <if expr="not chromeos"> |
142 { | 133 { |
143 url: '/manageProfile', | 134 url: '/manageProfile', |
144 page: 'basic', | 135 page: 'basic', |
145 section: 'people', | 136 section: 'people', |
146 subpage: ['manageProfile'], | 137 subpage: ['manageProfile'], |
147 subpageTitles: ['editPerson'], | |
148 }, | 138 }, |
149 </if> | 139 </if> |
150 { | 140 { |
151 url: '/syncSetup', | 141 url: '/syncSetup', |
152 page: 'basic', | 142 page: 'basic', |
153 section: 'people', | 143 section: 'people', |
154 subpage: ['sync'], | 144 subpage: ['sync'], |
155 subpageTitles: ['syncPageTitle'], | |
156 }, | 145 }, |
157 <if expr="chromeos"> | 146 <if expr="chromeos"> |
158 { | 147 { |
159 url: '/accounts', | 148 url: '/accounts', |
160 page: 'basic', | 149 page: 'basic', |
161 section: 'people', | 150 section: 'people', |
162 subpage: ['users'], | 151 subpage: ['users'], |
163 subpageTitles: ['usersPageTitle'], | |
164 }, | 152 }, |
165 </if> | 153 </if> |
166 { | 154 { |
167 url: '/certificates', | 155 url: '/certificates', |
168 page: 'advanced', | 156 page: 'advanced', |
169 section: 'privacy', | 157 section: 'privacy', |
170 subpage: ['manage-certificates'], | 158 subpage: ['manage-certificates'], |
171 subpageTitles: ['manageCertificates'], | |
172 }, | 159 }, |
173 { | 160 { |
174 url: '/siteSettings', | 161 url: '/siteSettings', |
175 page: 'advanced', | 162 page: 'advanced', |
176 section: 'privacy', | 163 section: 'privacy', |
177 subpage: ['site-settings'], | 164 subpage: ['site-settings'], |
178 subpageTitles: ['siteSettings'], | |
179 }, | 165 }, |
180 // Site Category routes. | 166 // Site Category routes. |
181 { | 167 { |
182 url: '/siteSettings/all', | 168 url: '/siteSettings/all', |
183 page: 'advanced', | 169 page: 'advanced', |
184 section: 'privacy', | 170 section: 'privacy', |
185 subpage: ['site-settings', 'all-sites'], | 171 subpage: ['site-settings', 'all-sites'], |
186 subpageTitles: ['siteSettings', 'siteSettingsCategoryAllSites'], | |
187 }, | 172 }, |
188 { | 173 { |
189 url: '/siteSettings/camera', | 174 url: '/siteSettings/camera', |
190 page: 'advanced', | 175 page: 'advanced', |
191 section: 'privacy', | 176 section: 'privacy', |
192 subpage: ['site-settings', 'site-settings-category-camera'], | 177 subpage: ['site-settings', 'site-settings-category-camera'], |
193 subpageTitles: ['siteSettings', 'siteSettingsCategoryCamera'], | |
194 }, | 178 }, |
195 { | 179 { |
196 url: '/siteSettings/cookies', | 180 url: '/siteSettings/cookies', |
197 page: 'advanced', | 181 page: 'advanced', |
198 section: 'privacy', | 182 section: 'privacy', |
199 subpage: ['site-settings', 'site-settings-category-cookies'], | 183 subpage: ['site-settings', 'site-settings-category-cookies'], |
200 subpageTitles: ['siteSettings', 'siteSettingsCategoryCookies'], | |
201 }, | 184 }, |
202 { | 185 { |
203 url: '/siteSettings/fullscreen', | 186 url: '/siteSettings/fullscreen', |
204 page: 'advanced', | 187 page: 'advanced', |
205 section: 'privacy', | 188 section: 'privacy', |
206 subpage: ['site-settings', 'site-settings-category-fullscreen'], | 189 subpage: ['site-settings', 'site-settings-category-fullscreen'], |
207 subpageTitles: ['siteSettings', 'siteSettingsCategoryFullscreen'], | |
208 }, | 190 }, |
209 { | 191 { |
210 url: '/siteSettings/images', | 192 url: '/siteSettings/images', |
211 page: 'advanced', | 193 page: 'advanced', |
212 section: 'privacy', | 194 section: 'privacy', |
213 subpage: ['site-settings', 'site-settings-category-images'], | 195 subpage: ['site-settings', 'site-settings-category-images'], |
214 subpageTitles: ['siteSettings', 'siteSettingsCategoryImages'], | |
215 }, | 196 }, |
216 { | 197 { |
217 url: '/siteSettings/location', | 198 url: '/siteSettings/location', |
218 page: 'advanced', | 199 page: 'advanced', |
219 section: 'privacy', | 200 section: 'privacy', |
220 subpage: ['site-settings', 'site-settings-category-location'], | 201 subpage: ['site-settings', 'site-settings-category-location'], |
221 subpageTitles: ['siteSettings', 'siteSettingsCategoryLocation'], | |
222 }, | 202 }, |
223 { | 203 { |
224 url: '/siteSettings/javascript', | 204 url: '/siteSettings/javascript', |
225 page: 'advanced', | 205 page: 'advanced', |
226 section: 'privacy', | 206 section: 'privacy', |
227 subpage: ['site-settings', 'site-settings-category-javascript'], | 207 subpage: ['site-settings', 'site-settings-category-javascript'], |
228 subpageTitles: ['siteSettings', 'siteSettingsCategoryJavascript'], | |
229 }, | 208 }, |
230 { | 209 { |
231 url: '/siteSettings/microphone', | 210 url: '/siteSettings/microphone', |
232 page: 'advanced', | 211 page: 'advanced', |
233 section: 'privacy', | 212 section: 'privacy', |
234 subpage: ['site-settings', 'site-settings-category-microphone'], | 213 subpage: ['site-settings', 'site-settings-category-microphone'], |
235 subpageTitles: ['siteSettings', 'siteSettingsCategoryMicrophone'], | |
236 }, | 214 }, |
237 { | 215 { |
238 url: '/siteSettings/notifications', | 216 url: '/siteSettings/notifications', |
239 page: 'advanced', | 217 page: 'advanced', |
240 section: 'privacy', | 218 section: 'privacy', |
241 subpage: ['site-settings', 'site-settings-category-notifications'], | 219 subpage: ['site-settings', 'site-settings-category-notifications'], |
242 subpageTitles: ['siteSettings', 'siteSettingsCategoryNotifications'], | |
243 }, | 220 }, |
244 { | 221 { |
245 url: '/siteSettings/popups', | 222 url: '/siteSettings/popups', |
246 page: 'advanced', | 223 page: 'advanced', |
247 section: 'privacy', | 224 section: 'privacy', |
248 subpage: ['site-settings', 'site-settings-category-popups'], | 225 subpage: ['site-settings', 'site-settings-category-popups'], |
249 subpageTitles: ['siteSettings', 'siteSettingsCategoryPopups'], | |
250 }, | 226 }, |
251 // Site details routes. | 227 // Site details routes. |
252 { | 228 { |
253 url: '/siteSettings/all/details', | 229 url: '/siteSettings/all/details', |
254 page: 'advanced', | 230 page: 'advanced', |
255 section: 'privacy', | 231 section: 'privacy', |
256 subpage: ['site-settings', 'all-sites', 'site-details'], | 232 subpage: ['site-settings', 'all-sites', 'site-details'], |
257 subpageTitles: ['siteSettings', 'siteSettingsCategoryAllSites', | |
258 'siteSettingsSiteDetailsPageTitle'], | |
259 }, | 233 }, |
260 { | 234 { |
261 url: '/siteSettings/camera/details', | 235 url: '/siteSettings/camera/details', |
262 page: 'advanced', | 236 page: 'advanced', |
263 section: 'privacy', | 237 section: 'privacy', |
264 subpage: ['site-settings', 'site-settings-category-camera', | 238 subpage: ['site-settings', 'site-settings-category-camera', |
265 'site-details'], | 239 'site-details'], |
266 subpageTitles: ['siteSettings', 'siteSettingsCamera', | |
267 'siteSettingsSiteDetailsPageTitle'], | |
268 }, | 240 }, |
269 { | 241 { |
270 url: '/siteSettings/cookies/details', | 242 url: '/siteSettings/cookies/details', |
271 page: 'advanced', | 243 page: 'advanced', |
272 section: 'privacy', | 244 section: 'privacy', |
273 subpage: ['site-settings', 'site-settings-category-cookies', | 245 subpage: ['site-settings', 'site-settings-category-cookies', |
274 'site-details'], | 246 'site-details'], |
275 subpageTitles: ['siteSettings', 'siteSettingsCategoryCookies', | |
276 'siteSettingsSiteDetailsPageTitle'], | |
277 }, | 247 }, |
278 { | 248 { |
279 url: '/siteSettings/fullscreen/details', | 249 url: '/siteSettings/fullscreen/details', |
280 page: 'advanced', | 250 page: 'advanced', |
281 section: 'privacy', | 251 section: 'privacy', |
282 subpage: ['site-settings', 'site-settings-category-fullscreen', | 252 subpage: ['site-settings', 'site-settings-category-fullscreen', |
283 'site-details'], | 253 'site-details'], |
284 subpageTitles: ['siteSettings', 'siteSettingsCategoryFullscreen', | |
285 'siteSettingsSiteDetailsPageTitle'], | |
286 }, | 254 }, |
287 { | 255 { |
288 url: '/siteSettings/images/details', | 256 url: '/siteSettings/images/details', |
289 page: 'advanced', | 257 page: 'advanced', |
290 section: 'privacy', | 258 section: 'privacy', |
291 subpage: ['site-settings', 'site-settings-category-images', | 259 subpage: ['site-settings', 'site-settings-category-images', |
292 'site-details'], | 260 'site-details'], |
293 subpageTitles: ['siteSettings', 'siteSettingsCategoryImages', | |
294 'siteSettingsSiteDetailsPageTitle'], | |
295 }, | 261 }, |
296 { | 262 { |
297 url: '/siteSettings/location/details', | 263 url: '/siteSettings/location/details', |
298 page: 'advanced', | 264 page: 'advanced', |
299 section: 'privacy', | 265 section: 'privacy', |
300 subpage: ['site-settings', 'site-settings-category-location', | 266 subpage: ['site-settings', 'site-settings-category-location', |
301 'site-details'], | 267 'site-details'], |
302 subpageTitles: ['siteSettings', 'siteSettingsCategoryLocation', | |
303 'siteSettingsSiteDetailsPageTitle'], | |
304 }, | 268 }, |
305 { | 269 { |
306 url: '/siteSettings/javascript/details', | 270 url: '/siteSettings/javascript/details', |
307 page: 'advanced', | 271 page: 'advanced', |
308 section: 'privacy', | 272 section: 'privacy', |
309 subpage: ['site-settings', 'site-settings-category-javascript', | 273 subpage: ['site-settings', 'site-settings-category-javascript', |
310 'site-details'], | 274 'site-details'], |
311 subpageTitles: ['siteSettings', 'siteSettingsCategoryJavascript', | |
312 'siteSettingsSiteDetailsPageTitle'], | |
313 }, | 275 }, |
314 { | 276 { |
315 url: '/siteSettings/microphone/details', | 277 url: '/siteSettings/microphone/details', |
316 page: 'advanced', | 278 page: 'advanced', |
317 section: 'privacy', | 279 section: 'privacy', |
318 subpage: ['site-settings', 'site-settings-category-microphone', | 280 subpage: ['site-settings', 'site-settings-category-microphone', |
319 'site-details'], | 281 'site-details'], |
320 subpageTitles: ['siteSettings', 'siteSettingsCategoryMicrophone', | |
321 'siteSettingsSiteDetailsPageTitle'], | |
322 }, | 282 }, |
323 { | 283 { |
324 url: '/siteSettings/notifications/details', | 284 url: '/siteSettings/notifications/details', |
325 page: 'advanced', | 285 page: 'advanced', |
326 section: 'privacy', | 286 section: 'privacy', |
327 subpage: ['site-settings', 'site-settings-category-notifications', | 287 subpage: ['site-settings', 'site-settings-category-notifications', |
328 'site-details'], | 288 'site-details'], |
329 subpageTitles: ['siteSettings', 'siteSettingsCategoryNotifications', | |
330 'siteSettingsSiteDetailsPageTitle'], | |
331 }, | 289 }, |
332 { | 290 { |
333 url: '/siteSettings/popups/details', | 291 url: '/siteSettings/popups/details', |
334 page: 'advanced', | 292 page: 'advanced', |
335 section: 'privacy', | 293 section: 'privacy', |
336 subpage: ['site-settings', 'site-settings-category-popups', | 294 subpage: ['site-settings', 'site-settings-category-popups', |
337 'site-details'], | 295 'site-details'], |
338 subpageTitles: ['siteSettings', 'siteSettingsCategoryPopups', | |
339 'siteSettingsSiteDetailsPageTitle'], | |
340 }, | 296 }, |
341 { | 297 { |
342 url: '/clearBrowserData', | 298 url: '/clearBrowserData', |
343 page: 'advanced', | 299 page: 'advanced', |
344 section: 'privacy', | 300 section: 'privacy', |
345 subpage: ['clear-browsing-data'], | 301 subpage: ['clear-browsing-data'], |
346 subpageTitles: ['clearBrowsingData'], | |
347 }, | 302 }, |
348 <if expr="chromeos"> | 303 <if expr="chromeos"> |
349 { | 304 { |
350 url: '/bluetoothAddDevice', | 305 url: '/bluetoothAddDevice', |
351 page: 'advanced', | 306 page: 'advanced', |
352 section: 'bluetooth', | 307 section: 'bluetooth', |
353 subpage: ['bluetooth-add-device'], | 308 subpage: ['bluetooth-add-device'], |
354 subpageTitles: ['bluetoothAddDevicePageTitle'], | |
355 }, | 309 }, |
356 { | 310 { |
357 url: '/bluetoothAddDevice/bluetoothPairDevice', | 311 url: '/bluetoothAddDevice/bluetoothPairDevice', |
358 page: 'advanced', | 312 page: 'advanced', |
359 section: 'bluetooth', | 313 section: 'bluetooth', |
360 subpage: ['bluetooth-add-device', 'bluetooth-pair-device'], | 314 subpage: ['bluetooth-add-device', 'bluetooth-pair-device'], |
361 subpageTitles: ['bluetoothAddDevicePageTitle', | |
362 'bluetoothPairDevicePageTitle'], | |
363 }, | 315 }, |
364 </if> | 316 </if> |
365 { | 317 { |
366 url: '/languages', | 318 url: '/languages', |
367 page: 'advanced', | 319 page: 'advanced', |
368 section: 'languages', | 320 section: 'languages', |
369 subpage: ['manage-languages'], | 321 subpage: ['manage-languages'], |
370 subpageTitles: ['manageLanguagesPageTitle'], | |
371 }, | 322 }, |
372 { | 323 { |
373 url: '/languages/edit', | 324 url: '/languages/edit', |
374 page: 'advanced', | 325 page: 'advanced', |
375 section: 'languages', | 326 section: 'languages', |
376 subpage: ['language-detail'], | 327 subpage: ['language-detail'], |
377 subpageTitles: ['manageLanguagesPageTitle'], | |
378 }, | 328 }, |
379 <if expr="not is_macosx"> | 329 <if expr="not is_macosx"> |
380 { | 330 { |
381 url: '/editDictionary', | 331 url: '/editDictionary', |
382 page: 'advanced', | 332 page: 'advanced', |
383 section: 'languages', | 333 section: 'languages', |
384 subpage: ['edit-dictionary'], | 334 subpage: ['edit-dictionary'], |
385 subpageTitles: ['editDictionaryPageTitle'], | |
386 }, | 335 }, |
387 </if> | 336 </if> |
388 <if expr="chromeos"> | 337 <if expr="chromeos"> |
389 { | 338 { |
390 url: '/pointer-overlay', | 339 url: '/pointer-overlay', |
391 page: 'basic', | 340 page: 'basic', |
392 section: 'device', | 341 section: 'device', |
393 subpage: ['touchpad'], | 342 subpage: ['touchpad'], |
394 subpageTitles: ['touchpadTitle'], | |
395 }, | 343 }, |
396 { | 344 { |
397 url: '/keyboard-overlay', | 345 url: '/keyboard-overlay', |
398 page: 'basic', | 346 page: 'basic', |
399 section: 'device', | 347 section: 'device', |
400 subpage: ['keyboard'], | 348 subpage: ['keyboard'], |
401 subpageTitles: ['keyboardTitle'], | |
402 }, | 349 }, |
403 </if> | 350 </if> |
404 ], | 351 ], |
405 | 352 |
406 /** | 353 /** |
407 * Sets up a history popstate observer. | 354 * Sets up a history popstate observer. |
408 */ | 355 */ |
409 created: function() { | 356 created: function() { |
410 window.addEventListener('popstate', function(event) { | 357 window.addEventListener('popstate', function(event) { |
411 if (event.state && event.state.page) | 358 if (event.state && event.state.page) |
(...skipping 12 matching lines...) Expand all Loading... |
424 var route = this.routes_[i]; | 371 var route = this.routes_[i]; |
425 if (route.page == newRoute.page && route.section == newRoute.section && | 372 if (route.page == newRoute.page && route.section == newRoute.section && |
426 route.subpage.length == newRoute.subpage.length && | 373 route.subpage.length == newRoute.subpage.length && |
427 newRoute.subpage.every(function(value, index) { | 374 newRoute.subpage.every(function(value, index) { |
428 return value == route.subpage[index]; | 375 return value == route.subpage[index]; |
429 })) { | 376 })) { |
430 | 377 |
431 // Update the property containing the titles for the current route. | 378 // Update the property containing the titles for the current route. |
432 this.currentRouteTitles = { | 379 this.currentRouteTitles = { |
433 pageTitle: loadTimeData.getString(route.page + 'PageTitle'), | 380 pageTitle: loadTimeData.getString(route.page + 'PageTitle'), |
434 subpageTitles: route.subpageTitles.map(function(titleCode) { | |
435 return loadTimeData.getString(titleCode); | |
436 }), | |
437 }; | 381 }; |
438 | 382 |
439 // If we are restoring a state from history, don't push it again. | 383 // If we are restoring a state from history, don't push it again. |
440 if (newRoute.inHistory) | 384 if (newRoute.inHistory) |
441 return; | 385 return; |
442 | 386 |
443 // Mark routes persisted in history as already stored in history. | 387 // Mark routes persisted in history as already stored in history. |
444 var historicState = { | 388 var historicState = { |
445 inHistory: true, | 389 inHistory: true, |
446 page: newRoute.page, | 390 page: newRoute.page, |
(...skipping 12 matching lines...) Expand all Loading... |
459 window.history.replaceState(historicState, document.title); | 403 window.history.replaceState(historicState, document.title); |
460 } | 404 } |
461 | 405 |
462 return; | 406 return; |
463 } | 407 } |
464 } | 408 } |
465 | 409 |
466 assertNotReached('Route not found: ' + JSON.stringify(newRoute)); | 410 assertNotReached('Route not found: ' + JSON.stringify(newRoute)); |
467 }, | 411 }, |
468 }); | 412 }); |
OLD | NEW |