Commit c0adb0ad authored by rbpotter's avatar rbpotter Committed by Commit Bot

Downloads Web UI: Use relative paths and redirect subpaths

(1) Use relative paths in the downloads UI, instead of prefixing
everything with chrome://downloads.
(2) To make this work, add a <base href="chrome://downloads> to non
optimized builds.
(3) Match the behavior for incorrect subpaths like
chrome://downloads/a/b/ to the behavior for other Web UIs (settings,
extensions, and print preview).

Bug: none
Change-Id: I34978c736126537fddbb8118d03de0dce8201917
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1604054
Commit-Queue: Rebekah Potter <rbpotter@chromium.org>
Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#660018}
parent de3f31a9
......@@ -20,8 +20,8 @@ if (optimize_webui) {
js_out_files = [ "crisper.js" ]
excludes = [
"chrome://resources/js/mojo_bindings_lite.js",
"chrome://downloads/downloads.mojom-lite.js",
"chrome://downloads/downloads.mojom-lite.html",
"downloads.mojom-lite.js",
"downloads.mojom-lite.html",
]
replace_for_html_imports_polyfill = "crisper.js"
......
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.html">
<link rel="import" href="chrome://downloads/downloads.mojom-lite.html">
<link rel="import" href="downloads.mojom-lite.html">
<script src="browser_proxy.js"></script>
<link rel="import" href="chrome://resources/html/cr.html">
<script src="chrome://downloads/constants.js"></script>
<script src="constants.js"></script>
......@@ -3,6 +3,9 @@
$i18n{dark}>
<head>
<meta charset="utf-8">
<if expr="not optimize_webui">
<base href="chrome://downloads">
</if>
<title>$i18n{title}</title>
<link rel="stylesheet" href="chrome://resources/css/md_colors.css">
<style>
......@@ -47,9 +50,9 @@
<link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://downloads/i18n_setup.html">
<link rel="import" href="chrome://downloads/manager.html">
<script src="chrome://downloads/downloads.js"></script>
<link rel="import" href="i18n_setup.html">
<link rel="import" href="manager.html">
<script src="downloads.js"></script>
<link rel="import" href="chrome://resources/html/dark_mode.html">
</body>
</html>
<link rel="import" href="chrome://resources/html/load_time_data.html">
<script src="chrome://downloads/strings.js"></script>
<script src="strings.js"></script>
<link rel="import" href="chrome://resources/html/assert.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/html/icon.html">
<script src="chrome://downloads/icon_loader.js"></script>
<script src="icon_loader.js"></script>
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://downloads/browser_proxy.html">
<link rel="import" href="chrome://downloads/constants.html">
<link rel="import" href="chrome://downloads/i18n_setup.html">
<link rel="import" href="chrome://downloads/icon_loader.html">
<link rel="import" href="chrome://downloads/icons.html">
<link rel="import" href="browser_proxy.html">
<link rel="import" href="constants.html">
<link rel="import" href="i18n_setup.html">
<link rel="import" href="icon_loader.html">
<link rel="import" href="icons.html">
<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html">
<link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast_manager.html">
......@@ -252,7 +252,7 @@
}
#incognito {
-webkit-mask-image: url(chrome://downloads/images/incognito_marker.svg);
-webkit-mask-image: url(images/incognito_marker.svg);
background-color: var(--cr-secondary-text-color);
bottom: 20px;
height: 16px;
......@@ -376,5 +376,5 @@
</div>
</template>
<script src="chrome://downloads/item.js"></script>
<script src="item.js"></script>
</dom-module>
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://downloads/browser_proxy.html">
<link rel="import" href="chrome://downloads/constants.html">
<link rel="import" href="chrome://downloads/i18n_setup.html">
<link rel="import" href="chrome://downloads/item.html">
<link rel="import" href="chrome://downloads/search_service.html">
<link rel="import" href="chrome://downloads/toolbar.html">
<link rel="import" href="browser_proxy.html">
<link rel="import" href="constants.html">
<link rel="import" href="i18n_setup.html">
<link rel="import" href="item.html">
<link rel="import" href="search_service.html">
<link rel="import" href="toolbar.html">
<link rel="import" href="chrome://resources/cr_components/managed_footnote/managed_footnote.html">
<link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast_manager.html">
<link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html">
......@@ -86,7 +86,7 @@
}
#no-downloads .illustration {
background: url(chrome://downloads/images/no_downloads.svg) no-repeat
background: url(images/no_downloads.svg) no-repeat
center center;
background-size: contain;
height: 144px;
......@@ -145,5 +145,5 @@
undo-description="$i18n{undoDescription}" duration="10000">
</cr-toast-manager>
</template>
<script src="chrome://downloads/manager.js"></script>
<script src="manager.js"></script>
</dom-module>
......@@ -88,6 +88,14 @@ cr.define('downloads', function() {
this.mojoEventTarget_ = browserProxy.callbackRouter;
this.mojoHandler_ = browserProxy.handler;
this.searchService_ = downloads.SearchService.getInstance();
// Regular expression that captures the leading slash, the content and the
// trailing slash in three different groups.
const CANONICAL_PATH_REGEX = /(^\/)([\/-\w]+)(\/$)/;
const path = location.pathname.replace(CANONICAL_PATH_REGEX, '$1$2');
if (path !== '/') { // There are no subpages in chrome://downloads.
window.history.replaceState(undefined /* stateObject */, '', '/');
}
},
/** @override */
......
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://downloads/i18n_setup.html">
<link rel="import" href="chrome://downloads/browser_proxy.html">
<script src="chrome://downloads/search_service.js"></script>
<link rel="import" href="i18n_setup.html">
<link rel="import" href="browser_proxy.html">
<script src="search_service.js"></script>
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://downloads/search_service.html">
<link rel="import" href="chrome://downloads/browser_proxy.html">
<link rel="import" href="search_service.html">
<link rel="import" href="browser_proxy.html">
<link rel="import" href="chrome://resources/cr_elements/cr_action_menu/cr_action_menu.html">
<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_toast/cr_toast_manager.html">
......@@ -53,5 +53,5 @@
</button>
</cr-action-menu>
</template>
<script src="chrome://downloads/toolbar.js"></script>
<script src="toolbar.js"></script>
</dom-module>
......@@ -137,8 +137,10 @@ DownloadsUrlTest.prototype = {
TEST_F('DownloadsUrlTest', 'All', function() {
suite('loading a nonexistent URL of /a/b/', function() {
test('should yield no console errors', function() {
assertEquals(location.href, DownloadsUrlTest.prototype.browsePreload);
test('should load main page with no console errors', function() {
return customElements.whenDefined('downloads-manager').then(() => {
assertEquals('chrome://downloads/', location.href);
});
});
});
mocha.run();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment