[go: nahoru, domu]

blob: 661c9895e6a0d613a491ca921a506ea7efbc1e5b [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {pageVisibility} from './page_visibility.js';
import {Route, Router} from './router.m.js';
import {SettingsRoutes} from './settings_routes.js';
/**
* Add all of the child routes that originate from the privacy route,
* regardless of whether the privacy section under basic or advanced.
* @param {!SettingsRoutes} r
*/
function addPrivacyChildRoutes(r) {
r.SITE_SETTINGS = r.PRIVACY.createChild('/content');
r.COOKIES = r.PRIVACY.createChild('/cookies');
r.SECURITY = r.PRIVACY.createChild('/security');
// TODO(crbug.com/1147032): The certificates settings page is temporarily
// disabled for Lacros-Chrome until a better solution is found.
// <if expr="use_nss_certs and not lacros">
r.CERTIFICATES = r.SECURITY.createChild('/certificates');
// </if>
if (loadTimeData.getBoolean('enableSecurityKeysSubpage')) {
r.SECURITY_KEYS = r.SECURITY.createChild('/securityKeys');
}
r.SITE_SETTINGS_ALL = r.SITE_SETTINGS.createChild('all');
r.SITE_SETTINGS_SITE_DETAILS =
r.SITE_SETTINGS_ALL.createChild('/content/siteDetails');
r.SITE_SETTINGS_HANDLERS = r.SITE_SETTINGS.createChild('/handlers');
// TODO(tommycli): Find a way to refactor these repetitive category
// routes.
r.SITE_SETTINGS_ADS = r.SITE_SETTINGS.createChild('ads');
r.SITE_SETTINGS_AR = r.SITE_SETTINGS.createChild('ar');
r.SITE_SETTINGS_AUTOMATIC_DOWNLOADS =
r.SITE_SETTINGS.createChild('automaticDownloads');
r.SITE_SETTINGS_BACKGROUND_SYNC =
r.SITE_SETTINGS.createChild('backgroundSync');
r.SITE_SETTINGS_CAMERA = r.SITE_SETTINGS.createChild('camera');
r.SITE_SETTINGS_CLIPBOARD = r.SITE_SETTINGS.createChild('clipboard');
r.SITE_SETTINGS_SITE_DATA = r.COOKIES.createChild('/siteData');
r.SITE_SETTINGS_DATA_DETAILS =
r.SITE_SETTINGS_SITE_DATA.createChild('/cookies/detail');
r.SITE_SETTINGS_IDLE_DETECTION = r.SITE_SETTINGS.createChild('idleDetection');
r.SITE_SETTINGS_IMAGES = r.SITE_SETTINGS.createChild('images');
r.SITE_SETTINGS_MIXEDSCRIPT = r.SITE_SETTINGS.createChild('insecureContent');
r.SITE_SETTINGS_JAVASCRIPT = r.SITE_SETTINGS.createChild('javascript');
r.SITE_SETTINGS_SOUND = r.SITE_SETTINGS.createChild('sound');
r.SITE_SETTINGS_SENSORS = r.SITE_SETTINGS.createChild('sensors');
r.SITE_SETTINGS_LOCATION = r.SITE_SETTINGS.createChild('location');
r.SITE_SETTINGS_MICROPHONE = r.SITE_SETTINGS.createChild('microphone');
r.SITE_SETTINGS_NOTIFICATIONS = r.SITE_SETTINGS.createChild('notifications');
r.SITE_SETTINGS_POPUPS = r.SITE_SETTINGS.createChild('popups');
r.SITE_SETTINGS_MIDI_DEVICES = r.SITE_SETTINGS.createChild('midiDevices');
r.SITE_SETTINGS_USB_DEVICES = r.SITE_SETTINGS.createChild('usbDevices');
r.SITE_SETTINGS_HID_DEVICES = r.SITE_SETTINGS.createChild('hidDevices');
r.SITE_SETTINGS_SERIAL_PORTS = r.SITE_SETTINGS.createChild('serialPorts');
if (loadTimeData.getBoolean('enableWebBluetoothNewPermissionsBackend')) {
r.SITE_SETTINGS_BLUETOOTH_DEVICES =
r.SITE_SETTINGS.createChild('bluetoothDevices');
}
r.SITE_SETTINGS_ZOOM_LEVELS = r.SITE_SETTINGS.createChild('zoomLevels');
r.SITE_SETTINGS_PDF_DOCUMENTS = r.SITE_SETTINGS.createChild('pdfDocuments');
r.SITE_SETTINGS_PROTECTED_CONTENT =
r.SITE_SETTINGS.createChild('protectedContent');
if (loadTimeData.getBoolean('enablePaymentHandlerContentSetting')) {
r.SITE_SETTINGS_PAYMENT_HANDLER =
r.SITE_SETTINGS.createChild('paymentHandler');
}
r.SITE_SETTINGS_VR = r.SITE_SETTINGS.createChild('vr');
if (loadTimeData.getBoolean('enableExperimentalWebPlatformFeatures')) {
r.SITE_SETTINGS_BLUETOOTH_SCANNING =
r.SITE_SETTINGS.createChild('bluetoothScanning');
r.SITE_SETTINGS_WINDOW_PLACEMENT =
r.SITE_SETTINGS.createChild('windowPlacement');
}
r.SITE_SETTINGS_FILE_SYSTEM_WRITE = r.SITE_SETTINGS.createChild('filesystem');
if (loadTimeData.getBoolean('enableFontAccessContentSetting')) {
r.SITE_SETTINGS_FONT_ACCESS = r.SITE_SETTINGS.createChild('fontAccess');
}
}
/**
* Adds Route objects for each path.
* @return {!SettingsRoutes}
*/
function createBrowserSettingsRoutes() {
const r = /** @type {!SettingsRoutes} */ ({});
// Root pages.
r.BASIC = new Route('/');
r.ABOUT = new Route('/help');
r.SIGN_OUT = r.BASIC.createChild('/signOut');
r.SIGN_OUT.isNavigableDialog = true;
r.SEARCH = r.BASIC.createSection('/search', 'search');
if (!loadTimeData.getBoolean('isGuest') ||
loadTimeData.getBoolean('isEphemeralGuestProfile')) {
r.PEOPLE = r.BASIC.createSection('/people', 'people');
r.SYNC = r.PEOPLE.createChild('/syncSetup');
r.SYNC_ADVANCED = r.SYNC.createChild('/syncSetup/advanced');
}
const visibility = pageVisibility || {};
// <if expr="not chromeos">
r.IMPORT_DATA = r.BASIC.createChild('/importData');
r.IMPORT_DATA.isNavigableDialog = true;
if (visibility.people !== false) {
r.MANAGE_PROFILE = r.PEOPLE.createChild('/manageProfile');
}
// </if>
if (visibility.appearance !== false) {
r.APPEARANCE = r.BASIC.createSection('/appearance', 'appearance');
r.FONTS = r.APPEARANCE.createChild('/fonts');
}
if (visibility.autofill !== false) {
r.AUTOFILL = r.BASIC.createSection('/autofill', 'autofill');
r.PASSWORDS = r.AUTOFILL.createChild('/passwords');
r.CHECK_PASSWORDS = r.PASSWORDS.createChild('check');
if (loadTimeData.getBoolean('enableAccountStorage')) {
r.DEVICE_PASSWORDS = r.PASSWORDS.createChild('device');
}
r.PAYMENTS = r.AUTOFILL.createChild('/payments');
r.ADDRESSES = r.AUTOFILL.createChild('/addresses');
}
r.CLEAR_BROWSER_DATA = r.BASIC.createChild('/clearBrowserData');
r.CLEAR_BROWSER_DATA.isNavigableDialog = true;
if (visibility.privacy !== false) {
r.PRIVACY = r.BASIC.createSection('/privacy', 'privacy');
addPrivacyChildRoutes(r);
r.SAFETY_CHECK = r.BASIC.createSection('/safetyCheck', 'safetyCheck');
}
if (visibility.defaultBrowser !== false) {
r.DEFAULT_BROWSER =
r.BASIC.createSection('/defaultBrowser', 'defaultBrowser');
}
r.SEARCH_ENGINES = r.SEARCH.createChild('/searchEngines');
if (visibility.onStartup !== false) {
r.ON_STARTUP = r.BASIC.createSection('/onStartup', 'onStartup');
r.STARTUP_PAGES = r.ON_STARTUP.createChild('/startupPages');
}
// Advanced Routes
if (visibility.advancedSettings !== false) {
r.ADVANCED = new Route('/advanced');
r.LANGUAGES = r.ADVANCED.createSection('/languages', 'languages');
// <if expr="not is_macosx">
r.EDIT_DICTIONARY = r.LANGUAGES.createChild('/editDictionary');
// </if>
if (visibility.downloads !== false) {
r.DOWNLOADS = r.ADVANCED.createSection('/downloads', 'downloads');
}
r.ACCESSIBILITY = r.ADVANCED.createSection('/accessibility', 'a11y');
// <if expr="chromeos or is_linux">
r.CAPTIONS = r.ACCESSIBILITY.createChild('/captions');
// </if>
// <if expr="is_win">
if (!loadTimeData.getBoolean('isWindows10OrNewer')) {
r.CAPTIONS = r.ACCESSIBILITY.createChild('/captions');
}
// </if>
// <if expr="not chromeos">
r.SYSTEM = r.ADVANCED.createSection('/system', 'system');
// </if>
if (visibility.reset !== false) {
r.RESET = r.ADVANCED.createSection('/reset', 'reset');
r.RESET_DIALOG = r.ADVANCED.createChild('/resetProfileSettings');
r.RESET_DIALOG.isNavigableDialog = true;
r.TRIGGERED_RESET_DIALOG =
r.ADVANCED.createChild('/triggeredResetProfileSettings');
r.TRIGGERED_RESET_DIALOG.isNavigableDialog = true;
// <if expr="_google_chrome and is_win">
r.CHROME_CLEANUP = r.RESET.createChild('/cleanup');
if (loadTimeData.getBoolean('showIncompatibleApplications')) {
r.INCOMPATIBLE_APPLICATIONS =
r.RESET.createChild('/incompatibleApplications');
}
// </if>
}
}
return r;
}
/**
* @return {!Router} A router with the browser settings routes.
*/
export function buildRouter() {
return new Router(createBrowserSettingsRoutes());
}
Router.setInstance(buildRouter());
window.addEventListener('popstate', function(event) {
// On pop state, do not push the state onto the window.history again.
const routerInstance = Router.getInstance();
routerInstance.setCurrentRoute(
routerInstance.getRouteForPath(window.location.pathname) ||
routerInstance.getRoutes().BASIC,
new URLSearchParams(window.location.search), true);
});
export const routes =
/** @type {!SettingsRoutes} */ (Router.getInstance().getRoutes());