| 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 * @typedef {{ | 6 * @typedef {{ |
| 7 * url: string, | 7 * url: string, |
| 8 * page: string, | 8 * page: string, |
| 9 * section: string, | 9 * section: string, |
| 10 * subpage: !Array<string>, | 10 * subpage: !Array<string>, |
| 11 * dialog: (string|undefined), |
| 11 * }} | 12 * }} |
| 12 */ | 13 */ |
| 13 var SettingsRoute; | 14 var SettingsRoute; |
| 14 | 15 |
| 15 /** | 16 /** |
| 16 * @fileoverview | 17 * @fileoverview |
| 17 * 'settings-router' is a simple router for settings. Its responsibilities: | 18 * 'settings-router' is a simple router for settings. Its responsibilities: |
| 18 * - Update the URL when the routing state changes. | 19 * - Update the URL when the routing state changes. |
| 19 * - Initialize the routing state with the initial URL. | 20 * - Initialize the routing state with the initial URL. |
| 20 * - Process and validate all routing state changes. | 21 * - Process and validate all routing state changes. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 51 // Take the current URL, find a matching pre-defined route, and | 52 // Take the current URL, find a matching pre-defined route, and |
| 52 // initialize the currentRoute to that pre-defined route. | 53 // initialize the currentRoute to that pre-defined route. |
| 53 for (var i = 0; i < this.routes_.length; ++i) { | 54 for (var i = 0; i < this.routes_.length; ++i) { |
| 54 var route = this.routes_[i]; | 55 var route = this.routes_[i]; |
| 55 if (route.url == window.location.pathname) { | 56 if (route.url == window.location.pathname) { |
| 56 return { | 57 return { |
| 57 url: route.url, | 58 url: route.url, |
| 58 page: route.page, | 59 page: route.page, |
| 59 section: route.section, | 60 section: route.section, |
| 60 subpage: route.subpage, | 61 subpage: route.subpage, |
| 62 dialog: route.dialog, |
| 61 }; | 63 }; |
| 62 } | 64 } |
| 63 } | 65 } |
| 64 | 66 |
| 65 // As a fallback return the default route. | 67 // As a fallback return the default route. |
| 66 return this.routes_[0]; | 68 return this.routes_[0]; |
| 67 }, | 69 }, |
| 68 }, | 70 }, |
| 69 | 71 |
| 70 /** | 72 /** |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 url: '/siteSettings/unsandboxedPlugins/details', | 420 url: '/siteSettings/unsandboxedPlugins/details', |
| 419 page: 'advanced', | 421 page: 'advanced', |
| 420 section: 'privacy', | 422 section: 'privacy', |
| 421 subpage: ['site-settings', 'site-settings-category-unsandsboxed-plugins', | 423 subpage: ['site-settings', 'site-settings-category-unsandsboxed-plugins', |
| 422 'site-details'], | 424 'site-details'], |
| 423 }, | 425 }, |
| 424 { | 426 { |
| 425 url: '/clearBrowserData', | 427 url: '/clearBrowserData', |
| 426 page: 'advanced', | 428 page: 'advanced', |
| 427 section: 'privacy', | 429 section: 'privacy', |
| 428 subpage: ['clear-browsing-data'], | 430 subpage: [], |
| 431 dialog: 'clear-browsing-data', |
| 429 }, | 432 }, |
| 430 <if expr="chromeos"> | 433 <if expr="chromeos"> |
| 431 { | 434 { |
| 432 url: '/dateTime', | 435 url: '/dateTime', |
| 433 page: 'advanced', | 436 page: 'advanced', |
| 434 section: 'dateTime', | 437 section: 'dateTime', |
| 435 subpage: [], | 438 subpage: [], |
| 436 }, | 439 }, |
| 437 { | 440 { |
| 438 url: '/bluetooth', | 441 url: '/bluetooth', |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 * Is called when another element modifies the route. This observer validates | 580 * Is called when another element modifies the route. This observer validates |
| 578 * the route change against the pre-defined list of routes, and updates the | 581 * the route change against the pre-defined list of routes, and updates the |
| 579 * URL appropriately. | 582 * URL appropriately. |
| 580 * @param {!SettingsRoute} newRoute Where we're headed. | 583 * @param {!SettingsRoute} newRoute Where we're headed. |
| 581 * @param {!SettingsRoute|undefined} oldRoute Where we've been. | 584 * @param {!SettingsRoute|undefined} oldRoute Where we've been. |
| 582 * @private | 585 * @private |
| 583 */ | 586 */ |
| 584 currentRouteChanged_: function(newRoute, oldRoute) { | 587 currentRouteChanged_: function(newRoute, oldRoute) { |
| 585 for (var i = 0; i < this.routes_.length; ++i) { | 588 for (var i = 0; i < this.routes_.length; ++i) { |
| 586 var route = this.routes_[i]; | 589 var route = this.routes_[i]; |
| 587 if (route.page == newRoute.page && route.section == newRoute.section && | 590 if (route.page == newRoute.page && |
| 591 route.section == newRoute.section && |
| 592 route.dialog == newRoute.dialog && |
| 588 route.subpage.length == newRoute.subpage.length && | 593 route.subpage.length == newRoute.subpage.length && |
| 589 newRoute.subpage.every(function(value, index) { | 594 newRoute.subpage.every(function(value, index) { |
| 590 return value == route.subpage[index]; | 595 return value == route.subpage[index]; |
| 591 })) { | 596 })) { |
| 592 | |
| 593 // Update the property containing the titles for the current route. | 597 // Update the property containing the titles for the current route. |
| 594 this.currentRouteTitles = { | 598 this.currentRouteTitles = { |
| 595 pageTitle: loadTimeData.getString(route.page + 'PageTitle'), | 599 pageTitle: loadTimeData.getString(route.page + 'PageTitle'), |
| 596 }; | 600 }; |
| 597 | 601 |
| 598 // If we are restoring a state from history, don't push it again. | 602 // If we are restoring a state from history, don't push it again. |
| 599 if (newRoute.inHistory) | 603 if (newRoute.inHistory) |
| 600 return; | 604 return; |
| 601 | 605 |
| 602 // Mark routes persisted in history as already stored in history. | 606 // Mark routes persisted in history as already stored in history. |
| 603 var historicState = { | 607 var historicState = { |
| 604 inHistory: true, | 608 inHistory: true, |
| 605 page: newRoute.page, | 609 page: newRoute.page, |
| 606 section: newRoute.section, | 610 section: newRoute.section, |
| 607 subpage: newRoute.subpage, | 611 subpage: newRoute.subpage, |
| 612 dialog: newRoute.dialog, |
| 608 }; | 613 }; |
| 609 | 614 |
| 610 // Push the current route to the history state, so when the user | 615 // Push the current route to the history state, so when the user |
| 611 // navigates with the browser back button, we can recall the route. | 616 // navigates with the browser back button, we can recall the route. |
| 612 if (oldRoute) { | 617 if (oldRoute) { |
| 613 window.history.pushState(historicState, document.title, route.url); | 618 window.history.pushState(historicState, document.title, route.url); |
| 614 } else { | 619 } else { |
| 615 // For the very first route (oldRoute will be undefined), we replace | 620 // For the very first route (oldRoute will be undefined), we replace |
| 616 // the existing state instead of pushing a new one. This is to allow | 621 // the existing state instead of pushing a new one. This is to allow |
| 617 // the user to use the browser back button to exit Settings entirely. | 622 // the user to use the browser back button to exit Settings entirely. |
| 618 window.history.replaceState(historicState, document.title); | 623 window.history.replaceState(historicState, document.title); |
| 619 } | 624 } |
| 620 | 625 |
| 621 return; | 626 return; |
| 622 } | 627 } |
| 623 } | 628 } |
| 624 | 629 |
| 625 assertNotReached('Route not found: ' + JSON.stringify(newRoute)); | 630 assertNotReached('Route not found: ' + JSON.stringify(newRoute)); |
| 626 }, | 631 }, |
| 627 }); | 632 }); |
| OLD | NEW |